From 2cf9657bd4932bb72a89484a3126658d3689809d Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Thu, 7 Jan 2021 18:56:39 +0100 Subject: [PATCH] Fix disabling discovery of specific Home Assistant sensor not working. #5597 --- lib/extension/homeassistant.js | 4 +++- test/homeassistant.test.js | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index 99c7c2321..f5611387e 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -586,8 +586,10 @@ class HomeAssistant extends Extension { configs = JSON.parse(JSON.stringify(configs)); if (resolvedEntity.settings.homeassistant) { + const s = resolvedEntity.settings.homeassistant; + configs = configs.filter((config) => !s.hasOwnProperty(config.object_id) || s[config.object_id] != null); configs.forEach((config) => { - const configOverride = resolvedEntity.settings.homeassistant[config.object_id]; + const configOverride = s[config.object_id]; if (configOverride) { config.object_id = configOverride.object_id || config.object_id; config.type = configOverride.type || config.type; diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index e10f7f7fa..bc3219b9d 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -529,6 +529,24 @@ describe('HomeAssistant extension', () => { expect(topics).not.toContain('homeassistant/sensor/0x0017880104e45522/temperature/config') }); + it('Shouldnt discover sensor when set to null', async () => { + logger.error.mockClear(); + settings.set(['devices', '0x0017880104e45522'], { + homeassistant: {humidity: null}, + friendly_name: 'weather_sensor', + retain: false, + }) + + controller = new Controller(false); + await controller.start(); + + await flushPromises(); + + const topics = MQTT.publish.mock.calls.map((c) => c[0]); + expect(topics).not.toContain('homeassistant/sensor/0x0017880104e45522/humidity/config') + expect(topics).toContain('homeassistant/sensor/0x0017880104e45522/temperature/config') + }); + it('Should discover devices with fan', async () => { controller = new Controller(false); await controller.start();