From fdcf2e8c3d57889652724ab6316af51a09fe0e84 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Fri, 15 Mar 2019 22:41:39 +0100 Subject: [PATCH] Option to set Home Assistant discovery topic. #1019 --- lib/extension/homeassistant.js | 4 +++- lib/util/settings.js | 5 +++++ test/homeassistant.test.js | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index d1078fe19..db8dd17b0 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -638,6 +638,8 @@ class HomeAssistant { if (settings.get().experimental.output === 'attribute') { throw new Error('Home Assitant integration is not possible with attribute output!'); } + + this.discoveryTopic = settings.get().advanced.homeassistant_discovery_topic; } onMQTTConnected() { @@ -757,7 +759,7 @@ class HomeAssistant { } } - this.mqtt.publish(topic, JSON.stringify(payload), {retain: true, qos: 0}, null, 'homeassistant'); + this.mqtt.publish(topic, JSON.stringify(payload), {retain: true, qos: 0}, null, this.discoveryTopic); }); this.discovered[entityID] = true; diff --git a/lib/util/settings.js b/lib/util/settings.js index e83733423..ae6de4b01 100644 --- a/lib/util/settings.js +++ b/lib/util/settings.js @@ -65,6 +65,11 @@ const defaults = { * Enables reporting feature */ report: false, + + /** + * Home Assistant discovery topic + */ + homeassistant_discovery_topic: 'homeassistant', }, }; diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index 1383f6e31..5965a8d40 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -557,4 +557,37 @@ describe('HomeAssistant extension', () => { expect(mqtt.publish.mock.calls[0][3]).toBeNull(); expect(mqtt.publish.mock.calls[0][4]).toBe('homeassistant'); }); + + it('Should discover devices with a custom discovery topic', () => { + jest.spyOn(settings, 'get').mockReturnValue({ + mqtt: { + base_topic: 'zigbee2mqtt', + }, + experimental: { + output: 'json', + }, + advanced: { + homeassistant_discovery_topic: 'my_custom_topic', + }, + }); + + homeassistant = new HomeassistantExtension(null, mqtt, null, null); + + jest.spyOn(settings, 'getDevice').mockReturnValue({ + friendly_name: 'my_device', + homeassistant: { + temperature: { + expire_after: 90, + device: { + identifiers: 'test', + }, + }, + }, + }); + + homeassistant.discover('0x12345678', WSDCGQ11LM, false); + + expect(mqtt.publish).toHaveBeenCalledTimes(5); + expect(mqtt.publish.mock.calls[0][4]).toBe('my_custom_topic'); + }); });