From cd1a4573b1f3c60997e50ec48f5d963f5a3f3b35 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Fri, 2 Jul 2021 20:21:18 +0200 Subject: [PATCH] Fix Home Assistant group discovery collision between different Zigbee2MQTT instances. https://github.com/Koenkk/zigbee2mqtt/issues/7918 --- lib/extension/homeassistant.js | 5 ++++- test/homeassistant.test.js | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index 6ce6fe82e..12fc0c1a8 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -995,7 +995,10 @@ class HomeAssistant extends Extension { } getDiscoveryTopic(config, resolvedEntity) { - const key = resolvedEntity.type === 'device' ? resolvedEntity.device.ieeeAddr : resolvedEntity.group.groupID; + const key = resolvedEntity.type === 'device' ? + resolvedEntity.device.ieeeAddr : + `${settings.get().mqtt.base_topic.split('') + .map((s) => s.charCodeAt(0).toString()).join('')}_${resolvedEntity.group.groupID}`; return `${config.type}/${key}/${config.object_id}/config`; } diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index 76303eaca..00e021266 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -76,7 +76,7 @@ describe('HomeAssistant extension', () => { }; expect(MQTT.publish).toHaveBeenCalledWith( - 'homeassistant/light/9/light/config', + 'homeassistant/light/1221051039810110150109113116116_9/light/config', stringify(payload), { retain: true, qos: 0 }, expect.any(Function), @@ -100,7 +100,7 @@ describe('HomeAssistant extension', () => { }; expect(MQTT.publish).toHaveBeenCalledWith( - 'homeassistant/switch/9/switch/config', + 'homeassistant/switch/1221051039810110150109113116116_9/switch/config', stringify(payload), { retain: true, qos: 0 }, expect.any(Function), @@ -1703,7 +1703,7 @@ describe('HomeAssistant extension', () => { }; expect(MQTT.publish).toHaveBeenCalledWith( - 'homeassistant/light/9/light/config', + 'homeassistant/light/1221051039810110150109113116116_9/light/config', stringify(payload), { retain: true, qos: 0 }, expect.any(Function),