diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index feafc145..781288f8 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -7,68 +7,12 @@ const stringify = require('json-stable-stringify-without-jsonify'); const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters'); const assert = require('assert'); -const cfg = { - // Binary sensor - 'binary_sensor_update_available': { - type: 'binary_sensor', - object_id: 'update_available', - discovery_payload: { - payload_on: true, - payload_off: false, - value_template: '{{ value_json.update_available}}', - }, - }, - - // Sensor - 'sensor_update_state': { - type: 'sensor', - object_id: 'update_state', - discovery_payload: { - icon: 'mdi:update', - value_template: `{{ value_json['update']['state'] }}`, - }, - }, - 'sensor_click': { - type: 'sensor', - object_id: 'click', - discovery_payload: { - icon: 'mdi:toggle-switch', - value_template: '{{ value_json.click }}', - }, - }, - 'sensor_brightness': { - type: 'sensor', - object_id: 'brightness', - discovery_payload: { - unit_of_measurement: 'brightness', - icon: 'mdi:brightness-5', - value_template: '{{ value_json.brightness }}', - }, - }, - 'sensor_linkquality': { - type: 'sensor', - object_id: 'linkquality', - discovery_payload: { - icon: 'mdi:signal', - unit_of_measurement: 'lqi', - value_template: '{{ value_json.linkquality }}', - }, - }, - - // Trigger - 'trigger_action': { - type: 'device_automation', - discovery_payload: { - automation_type: 'trigger', - type: 'action', - }, - }, - 'trigger_click': { - type: 'device_automation', - discovery_payload: { - automation_type: 'trigger', - type: 'click', - }, +const sensorClick = { + type: 'sensor', + object_id: 'click', + discovery_payload: { + icon: 'mdi:toggle-switch', + value_template: '{{ value_json.click }}', }, }; @@ -117,12 +61,20 @@ class HomeAssistant extends Extension { 'HGZB-1S', 'AV2010/34', 'IM6001-BTP01', 'WXKG11LM', 'WXKG03LM', 'WXKG02LM', 'QBKG04LM', 'QBKG03LM', 'QBKG11LM', 'QBKG21LM', 'QBKG22LM', 'WXKG12LM', 'QBKG12LM', 'E1743'].includes(def.model)) { // deprecated - this.mapping[def.model].push(cfg.sensor_click); + this.mapping[def.model].push(sensorClick); } if (['ICTC-G-1'].includes(def.model)) { // deprecated - this.mapping[def.model].push(cfg.sensor_brightness); + this.mapping[def.model].push({ + type: 'sensor', + object_id: 'brightness', + discovery_payload: { + unit_of_measurement: 'brightness', + icon: 'mdi:brightness-5', + value_template: '{{ value_json.brightness }}', + }, + }); } for (const expose of def.exposes) { @@ -594,14 +546,32 @@ class HomeAssistant extends Extension { let configs = this.mapping[resolvedEntity.definition.model].slice(); if (resolvedEntity.definition.hasOwnProperty('ota')) { - configs.push(cfg.sensor_update_state); + const updateStateSensor = { + type: 'sensor', + object_id: 'update_state', + discovery_payload: { + icon: 'mdi:update', + value_template: `{{ value_json['update']['state'] }}`, + }, + }; + + configs.push(updateStateSensor); if (this.legacyApi) { - configs.push(cfg.binary_sensor_update_available); + const updateAvailableSensor = { + type: 'binary_sensor', + object_id: 'update_available', + discovery_payload: { + payload_on: true, + payload_off: false, + value_template: '{{ value_json.update_available}}', + }, + }; + configs.push(updateAvailableSensor); } } if (resolvedEntity.settings.hasOwnProperty('legacy') && !resolvedEntity.settings.legacy) { - configs = configs.filter((c) => c !== cfg.sensor_click); + configs = configs.filter((c) => c !== sensorClick); } if (!settings.get().advanced.homeassistant_legacy_triggers) { @@ -908,8 +878,15 @@ class HomeAssistant extends Extension { return; } - const config = cfg[`trigger_${key}`]; - config.object_id = `${key}_${value}`; + const config = { + type: 'device_automation', + object_id: `${key}_${value}`, + discovery_payload: { + automation_type: 'trigger', + type: key, + }, + }; + const topic = this.getDiscoveryTopic(config, device); const payload = { ...config.discovery_payload,