From 22f657ed4df17b56b4b6aa0cddd32bfc39dda049 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Thu, 20 Aug 2020 20:55:40 +0200 Subject: [PATCH] Add device_announce event to new api. https://github.com/Koenkk/zigbee2mqtt/issues/3281 --- lib/extension/bridge.js | 6 +++++- test/bridge.test.js | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/extension/bridge.js b/lib/extension/bridge.js index 877945fb..ed70fc79 100644 --- a/lib/extension/bridge.js +++ b/lib/extension/bridge.js @@ -78,7 +78,7 @@ class Bridge extends Extension { this.lastJoinedDeviceIeeeAddr = resolvedEntity.device.ieeeAddr; } - if (['deviceJoined', 'deviceLeave', 'deviceInterview'].includes(type)) { + if (['deviceJoined', 'deviceLeave', 'deviceInterview', 'deviceAnnounce'].includes(type)) { let payload; const ieeeAddress = data.device ? data.device.ieeeAddr : data.ieeeAddr; if (type === 'deviceJoined') { @@ -96,6 +96,10 @@ class Bridge extends Extension { supports: resolvedEntity.definition.supports, } : null; } + } else if (type === 'deviceAnnounce') { + payload = { + friendly_name: resolvedEntity.settings.friendlyName, ieee_address: ieeeAddress, + }; } else payload = {ieee_address: ieeeAddress}; // deviceLeave await this.mqtt.publish( diff --git a/test/bridge.test.js b/test/bridge.test.js index 1fd9c373..8e3754fa 100644 --- a/test/bridge.test.js +++ b/test/bridge.test.js @@ -103,6 +103,19 @@ describe('Bridge', () => { ); }); + it('Should publish event when device announces', async () => { + MQTT.publish.mockClear(); + await zigbeeHerdsman.events.deviceAnnounce({device: zigbeeHerdsman.devices.bulb}); + await flushPromises(); + expect(MQTT.publish).toHaveBeenCalledTimes(1); + expect(MQTT.publish).toHaveBeenCalledWith( + 'zigbee2mqtt/bridge/event', + stringify({"type":"device_announce","data":{"friendly_name":"bulb","ieee_address":"0x000b57fffec6a5b2"}}), + { retain: false, qos: 0 }, + expect.any(Function) + ); + }); + it('Should publish event when device interview started', async () => { MQTT.publish.mockClear(); await zigbeeHerdsman.events.deviceInterview({device: zigbeeHerdsman.devices.bulb, status: 'started'});