diff --git a/lib/extension/homeassistant.ts b/lib/extension/homeassistant.ts index c39f74e7b..75ea1bc41 100644 --- a/lib/extension/homeassistant.ts +++ b/lib/extension/homeassistant.ts @@ -282,6 +282,15 @@ export default class HomeAssistant extends Extension { discoveryEntry.discovery_payload.fan_mode_state_topic = true; } + const swingMode = firstExpose.features.find((f) => f.name === 'swing_mode'); + if (swingMode) { + discoveryEntry.discovery_payload.swing_modes = swingMode.values; + discoveryEntry.discovery_payload.swing_mode_command_topic = true; + discoveryEntry.discovery_payload.swing_mode_state_template = + `{{ value_json.${swingMode.property} }}`; + discoveryEntry.discovery_payload.swing_mode_state_topic = true; + } + const preset = firstExpose.features.find((f) => f.name === 'preset'); if (preset) { discoveryEntry.discovery_payload.preset_modes = preset.values; @@ -1222,6 +1231,14 @@ export default class HomeAssistant extends Extension { payload.fan_mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/fan_mode`; } + if (payload.swing_mode_state_topic) { + payload.swing_mode_state_topic = stateTopic; + } + + if (payload.swing_mode_command_topic) { + payload.swing_mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/swing_mode`; + } + if (payload.percentage_state_topic) { payload.percentage_state_topic = stateTopic; } diff --git a/test/stub/zigbeeHerdsman.js b/test/stub/zigbeeHerdsman.js index 4d65f88cd..afe53b2e7 100644 --- a/test/stub/zigbeeHerdsman.js +++ b/test/stub/zigbeeHerdsman.js @@ -201,7 +201,7 @@ const devices = { 'temperature_sensor': new Device('EndDevice', '0x0017880104e45561', 6544,4151, [new Endpoint(1, [0,3,4,1026], [])], true, "Battery", "temperature.sensor"), 'heating_actuator': new Device('Router', '0x0017880104e45562', 6545,4151, [new Endpoint(1, [0,3,4,513], [1026])], true, "Mains (single phase)", "heating.actuator"), 'bj_scene_switch': new Device('EndDevice', '0xd85def11a1002caa', 50117, 4398, [new Endpoint(10, [0,4096], [3,4,5,6,8,25,768,4096], '0xd85def11a1002caa', [{target: bulb_color_2.endpoints[0], cluster: {ID: 8, name: 'genLevelCtrl'}}, {target: bulb_color_2.endpoints[0], cluster: {ID: 6, name: 'genOnOff'}}, {target: bulb_color_2.endpoints[0], cluster: {ID: 768, name: 'lightingColorCtrl'}},]), new Endpoint(11, [0,4096], [3,4,5,6,8,25,768,4096], '0xd85def11a1002caa')], true, 'Battery', 'RB01', false, 'Busch-Jaeger', '20161222', '1.2.0'), - + 'GW003-AS-IN-TE-FC': new Device('Router', '0x0017548104a44669', 6545,4699, [new Endpoint(1, [3], [0,3,513,514], '0x0017548104a44669')], true, "Mains (single phase)", 'Adapter Zigbee FUJITSU'), } const mock = {