diff --git a/lib/util/settings.js b/lib/util/settings.js index 6ff635cf3..218c0e304 100644 --- a/lib/util/settings.js +++ b/lib/util/settings.js @@ -139,6 +139,12 @@ const schema = { }, ban: {type: 'array', items: {type: 'string'}}, whitelist: {type: 'array', items: {type: 'string'}}, + experimental: { + type: 'object', + properties: { + transmit_power: {type: 'number'}, + }, + }, advanced: { type: 'object', properties: { diff --git a/lib/zigbee.js b/lib/zigbee.js index 258cb7545..ae55e26fb 100644 --- a/lib/zigbee.js +++ b/lib/zigbee.js @@ -75,7 +75,14 @@ class Zigbee extends events.EventEmitter { // Check if we have to turn off the led if (settings.get().serial.disable_led) { - this.herdsman.setLED(false); + await this.herdsman.setLED(false); + } + + // Check if we have to set a transmit power + if (settings.get().experimental.hasOwnProperty('transmit_power')) { + const transmitPower = settings.get().experimental.transmit_power; + await this.herdsman.setTransmitPower(transmitPower); + logger.info(`Set transmit power to '${transmitPower}'`); } } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 7d5f33025..454f92bc5 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -6170,9 +6170,9 @@ } }, "zigbee-herdsman": { - "version": "0.12.12", - "resolved": "https://registry.npmjs.org/zigbee-herdsman/-/zigbee-herdsman-0.12.12.tgz", - "integrity": "sha512-GPH8lO1C64tW5Vr74MwOAgkCLJhNj9ifENzGaNE7zSDErmwhxVSNMDklCdgTwySucNy5Fdt6r7JuBEvbnzzdUw==", + "version": "0.12.14", + "resolved": "https://registry.npmjs.org/zigbee-herdsman/-/zigbee-herdsman-0.12.14.tgz", + "integrity": "sha512-lltiWte3wLE/43asybU97JdAaYNupnQQh+WvZKfFRoNamJkgoLa3bp7aL4nPNNW/B+hjsrU0kuotVc6NmAcrug==", "requires": { "debug": "^4.1.1", "fast-deep-equal": "^2.0.1", diff --git a/package.json b/package.json index 63e83a8ba..382483392 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "rimraf": "*", "semver": "*", "winston": "*", - "zigbee-herdsman": "0.12.12", + "zigbee-herdsman": "0.12.14", "zigbee-herdsman-converters": "11.1.50" }, "devDependencies": { diff --git a/test/controller.test.js b/test/controller.test.js index 5dda197f3..88320c6e3 100644 --- a/test/controller.test.js +++ b/test/controller.test.js @@ -34,6 +34,7 @@ describe('Controller', () => { expect(zigbeeHerdsman.constructor).toHaveBeenCalledWith({"network":{"panID":6754,"extendedPanID":[221,221,221,221,221,221,221,221],"channelList":[11],"networkKey":[1,3,5,7,9,11,13,15,0,2,4,6,8,10,12,13]},"databasePath":path.join(data.mockDir, "database.db"), "databaseBackupPath":path.join(data.mockDir, "database.db.backup"),"backupPath":path.join(data.mockDir, "coordinator_backup.json"),"acceptJoiningDeviceHandler": expect.any(Function),"serialPort":{"baudRate":115200,"rtscts":true,"path":"/dev/dummy"}}); expect(zigbeeHerdsman.start).toHaveBeenCalledTimes(1); expect(zigbeeHerdsman.setLED).toHaveBeenCalledTimes(0); + expect(zigbeeHerdsman.setTransmitPower).toHaveBeenCalledTimes(0); expect(zigbeeHerdsman.permitJoin).toHaveBeenCalledTimes(1); expect(zigbeeHerdsman.permitJoin).toHaveBeenCalledWith(true); expect(logger.info).toHaveBeenCalledWith(`Currently ${Object.values(zigbeeHerdsman.devices).length - 1} devices are joined:`) @@ -176,6 +177,13 @@ describe('Controller', () => { expect(zigbeeHerdsman.setLED).toHaveBeenCalledWith(false); }); + it('Start controller with transmit power', async () => { + settings.set(['experimental', 'transmit_power'], 14); + await controller.start(); + expect(zigbeeHerdsman.setTransmitPower).toHaveBeenCalledTimes(1); + expect(zigbeeHerdsman.setTransmitPower).toHaveBeenCalledWith(14); + }); + it('Start controller and stop', async () => { await controller.start(); await controller.stop(); diff --git a/test/stub/zigbeeHerdsman.js b/test/stub/zigbeeHerdsman.js index 99f2da7fa..ba0f73d23 100644 --- a/test/stub/zigbeeHerdsman.js +++ b/test/stub/zigbeeHerdsman.js @@ -139,6 +139,7 @@ const groups = { } const mock = { + setTransmitPower: jest.fn(), touchlinkFactoryReset: jest.fn(), start: jest.fn(), permitJoin: jest.fn(),