From 8a5f39f6aa96b74319d1fd8b589e851d61e2fd3b Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Sat, 2 Nov 2019 00:03:22 +0100 Subject: [PATCH] Subscribe to nested topics for bind. https://github.com/Koenkk/zigbee2mqtt/issues/2250 --- lib/extension/deviceBind.js | 8 ++++---- test/deviceBind.test.js | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/extension/deviceBind.js b/lib/extension/deviceBind.js index 4506c52d1..50dc4ce4a 100644 --- a/lib/extension/deviceBind.js +++ b/lib/extension/deviceBind.js @@ -8,10 +8,10 @@ const clusters = ['genScenes', 'genOnOff', 'genLevelCtrl', 'lightingColorCtrl']; class DeviceBind extends BaseExtension { onMQTTConnected() { - this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/bind/+`); - this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/bind/+/+`); - this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/unbind/+`); - this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/unbind/+/+`); + for (let step = 1; step < 20; step++) { + this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/bind${'/+'.repeat(step)}`); + this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/unbind${'/+'.repeat(step)}`); + } } async onMQTTMessage(topic, message) { diff --git a/test/deviceBind.test.js b/test/deviceBind.test.js index de6be232c..b450b7b9b 100644 --- a/test/deviceBind.test.js +++ b/test/deviceBind.test.js @@ -29,6 +29,13 @@ describe('Device bind', () => { MQTT.publish.mockClear(); }); + it('Should subscribe to nested topics', async () => { + expect(MQTT.subscribe).toHaveBeenCalledWith('zigbee2mqtt/bridge/bind/+'); + expect(MQTT.subscribe).toHaveBeenCalledWith('zigbee2mqtt/bridge/bind/+/+'); + expect(MQTT.subscribe).toHaveBeenCalledWith('zigbee2mqtt/bridge/bind/+/+/+'); + expect(MQTT.subscribe).toHaveBeenCalledWith('zigbee2mqtt/bridge/bind/+/+/+/+/+'); + }); + it('Should bind', async () => { const device = zigbeeHerdsman.devices.remote; const target = zigbeeHerdsman.devices.bulb_color.getEndpoint(1);