From eaad39a1991341e15c17305b7b952377a2f42e31 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Mon, 18 Oct 2021 18:16:00 +0200 Subject: [PATCH] Expose device and group configuration_url to Home Assistant. (#9214) --- lib/extension/homeassistant.ts | 6 ++++++ lib/types/types.d.ts | 1 + test/homeassistant.test.js | 37 ++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/lib/extension/homeassistant.ts b/lib/extension/homeassistant.ts index b8591da53..2a33d770a 100644 --- a/lib/extension/homeassistant.ts +++ b/lib/extension/homeassistant.ts @@ -1158,6 +1158,12 @@ export default class HomeAssistant extends Extension { payload.manufacturer = entity.definition.vendor; } + if (settings.get().frontend?.url) { + const url = settings.get().frontend?.url; + payload.configuration_url = entity.isDevice() ? `${url}/#/device/${entity.ieeeAddr}/info` : + `${url}/#/group/${entity.ID}`; + } + return payload; } diff --git a/lib/types/types.d.ts b/lib/types/types.d.ts index 54071c087..8d7976fa8 100644 --- a/lib/types/types.d.ts +++ b/lib/types/types.d.ts @@ -176,6 +176,7 @@ declare global { auth_token?: string, host?: string, port?: number, + url?: string, }, mqtt: { base_topic: string, diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index eac8943ad..b53535b7e 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -1696,4 +1696,41 @@ describe('HomeAssistant extension', () => { expect.any(Function), ); }); + + it('Should discover devices with configuration url', async () => { + settings.set(['frontend', 'url'], 'http://zigbee.mqtt'); + + await resetExtension(); + + let payload; + await flushPromises(); + + payload = { + 'unit_of_measurement': '°C', + 'device_class': 'temperature', + 'state_class': 'measurement', + 'enabled_by_default': true, + 'value_template': "{{ value_json.temperature }}", + 'state_topic': 'zigbee2mqtt/weather_sensor', + 'json_attributes_topic': 'zigbee2mqtt/weather_sensor', + 'name': 'weather_sensor_temperature', + 'unique_id': '0x0017880104e45522_temperature_zigbee2mqtt', + 'device': { + 'identifiers': ['zigbee2mqtt_0x0017880104e45522'], + 'name': 'weather_sensor', + 'sw_version': version, + 'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)', + 'manufacturer': 'Xiaomi', + 'configuration_url': 'http://zigbee.mqtt/#/device/0x0017880104e45522/info' + }, + 'availability': [{topic: 'zigbee2mqtt/bridge/state'}], + }; + + expect(MQTT.publish).toHaveBeenCalledWith( + 'homeassistant/sensor/0x0017880104e45522/temperature/config', + stringify(payload), + { retain: true, qos: 0 }, + expect.any(Function), + ); + }); });