From 8db16cca3d2ca4fd2602680d2547570188bbbc7b Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Tue, 15 Sep 2020 22:13:30 +0200 Subject: [PATCH] Republish devices on OTA update. https://github.com/Koenkk/zigbee2mqtt/issues/4266 --- lib/eventBus.js | 2 +- lib/extension/bind.js | 2 +- lib/extension/bridge.js | 2 +- lib/extension/otaUpdate.js | 1 + test/otaUpdate.test.js | 6 ++++++ 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/eventBus.js b/lib/eventBus.js index 49a4ffa0..07aee554 100644 --- a/lib/eventBus.js +++ b/lib/eventBus.js @@ -9,7 +9,7 @@ const allowedEvents = [ 'stateChange', // Entity changes its state 'groupMembersChanged', // Members of a group has been changed 'reportingDisabled', // Reporting is disabled for a device - 'deviceBindingsChanged', // Device bindings changed + 'devicesChanged', // Devices changed ]; class EventBus extends events.EventEmitter { diff --git a/lib/extension/bind.js b/lib/extension/bind.js index 7074439e..50c6ccb7 100644 --- a/lib/extension/bind.js +++ b/lib/extension/bind.js @@ -158,7 +158,7 @@ class Bind extends Extension { if (error) { logger.error(error); } else { - this.eventBus.emit(`deviceBindingsChanged`); + this.eventBus.emit(`devicesChanged`); } } } diff --git a/lib/extension/bridge.js b/lib/extension/bridge.js index fd3f20d6..d0843018 100644 --- a/lib/extension/bridge.js +++ b/lib/extension/bridge.js @@ -41,7 +41,7 @@ class Bridge extends Extension { this.coordinatorVersion = await this.zigbee.getCoordinatorVersion(); this.eventBus.on(`groupMembersChanged`, () => this.publishGroups()); - this.eventBus.on(`deviceBindingsChanged`, () => this.publishDevices()); + this.eventBus.on(`devicesChanged`, () => this.publishDevices()); this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/request/#`); await this.publishInfo(); await this.publishDevices(); diff --git a/lib/extension/otaUpdate.js b/lib/extension/otaUpdate.js index 637de825..0b94aea6 100644 --- a/lib/extension/otaUpdate.js +++ b/lib/extension/otaUpdate.js @@ -238,6 +238,7 @@ class OTAUpdate extends Extension { this.publishEntityState(resolvedEntity.device.ieeeAddr, payload); responseData.from = from_ ? utils.toSnakeCase(from_) : null; responseData.to = to ? utils.toSnakeCase(to) : null; + this.eventBus.emit(`devicesChanged`); /* istanbul ignore else */ if (settings.get().advanced.legacy_api) { diff --git a/test/otaUpdate.test.js b/test/otaUpdate.test.js index 7d0050e8..6879bc63 100644 --- a/test/otaUpdate.test.js +++ b/test/otaUpdate.test.js @@ -83,6 +83,12 @@ describe('OTA update', () => { stringify({"data":{"id": "bulb","from":{"software_build_id":1,"date_code":"20190101"},"to":{"software_build_id":2,"date_code":"20190102"}},"status":"ok"}), {retain: false, qos: 0}, expect.any(Function) ); + expect(MQTT.publish).toHaveBeenCalledWith( + 'zigbee2mqtt/bridge/devices', + expect.any(String), + { retain: true, qos: 0 }, + expect.any(Function) + ); }); it('Should handle when OTA update fails', async () => {