diff --git a/lib/extension/homeassistant.ts b/lib/extension/homeassistant.ts index 500cf338..275b59a8 100644 --- a/lib/extension/homeassistant.ts +++ b/lib/extension/homeassistant.ts @@ -284,11 +284,11 @@ export default class HomeAssistant extends Extension { const preset = firstExpose.features.find((f) => f.name === 'preset'); if (preset) { - discoveryEntry.discovery_payload.hold_modes = preset.values; - discoveryEntry.discovery_payload.hold_command_topic = true; - discoveryEntry.discovery_payload.hold_state_template = + discoveryEntry.discovery_payload.preset_modes = preset.values; + discoveryEntry.discovery_payload.preset_mode_command_topic = 'preset'; + discoveryEntry.discovery_payload.preset_mode_value_template = `{{ value_json.${preset.property} }}`; - discoveryEntry.discovery_payload.hold_state_topic = true; + discoveryEntry.discovery_payload.preset_mode_state_topic = true; } const awayMode = firstExpose.features.find((f) => f.name === 'away_mode'); @@ -514,7 +514,7 @@ export default class HomeAssistant extends Extension { discoveryEntry.discovery_payload.speed_range_max = speeds.length - 1; assert(presets.length !== 0); discoveryEntry.discovery_payload.preset_mode_state_topic = true; - discoveryEntry.discovery_payload.preset_mode_command_topic = true; + discoveryEntry.discovery_payload.preset_mode_command_topic = 'fan_mode'; discoveryEntry.discovery_payload.preset_mode_value_template = `{{ value_json.${speed.property} if value_json.${speed.property} in [${presetList}]` + ` else 'None' | default('None') }}`; @@ -1187,14 +1187,6 @@ export default class HomeAssistant extends Extension { payload.mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/system_mode`; } - if (payload.hold_command_topic) { - payload.hold_command_topic = `${baseTopic}/${commandTopicPrefix}set/preset`; - } - - if (payload.hold_state_topic) { - payload.hold_state_topic = stateTopic; - } - if (payload.away_mode_state_topic) { payload.away_mode_state_topic = stateTopic; } @@ -1255,7 +1247,8 @@ export default class HomeAssistant extends Extension { } if (payload.preset_mode_command_topic) { - payload.preset_mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/fan_mode`; + payload.preset_mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/` + + payload.preset_mode_command_topic; } if (payload.action_topic) { diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index 12c0f102..7dfd79de 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -766,8 +766,8 @@ describe('HomeAssistant extension', () => { "name":"TS0601_thermostat", "sw_version":null }, - "hold_command_topic":"zigbee2mqtt/TS0601_thermostat/set/preset", - "hold_modes":[ + "preset_mode_command_topic":"zigbee2mqtt/TS0601_thermostat/set/preset", + "preset_modes":[ "schedule", "manual", "boost", @@ -775,8 +775,8 @@ describe('HomeAssistant extension', () => { "comfort", "eco" ], - "hold_state_template":"{{ value_json.preset }}", - "hold_state_topic":"zigbee2mqtt/TS0601_thermostat", + "preset_mode_value_template":"{{ value_json.preset }}", + "preset_mode_state_topic":"zigbee2mqtt/TS0601_thermostat", "json_attributes_topic":"zigbee2mqtt/TS0601_thermostat", "max_temp":"35", "min_temp":"5",