From f27e5efe0f4220c48a514ce1850319a7f82e2658 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Wed, 28 Apr 2021 19:10:39 +0200 Subject: [PATCH] Fix Home Assistant "KeyError: 'color_mode'" for brightness only lights. https://github.com/Koenkk/zigbee2mqtt/issues/7220 --- lib/extension/homeassistant.js | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index 7a4ce84ef..4d73889ad 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -86,32 +86,12 @@ class HomeAssistant extends Extension { const colorHS = expose.features.find((e) => e.name === 'color_hs'); const brightness = expose.features.find((e) => e.name === 'brightness'); const colorTemp = expose.features.find((e) => e.name === 'color_temp'); - const colorModes = []; - // Ignore else, all bulbs support atleast brightness - /* istanbul ignore else */ - if (colorTemp || colorHS || colorXY) { - if (colorXY) { - colorModes.push('xy'); - } else if (colorHS) { - colorModes.push('hs'); - } - - if (colorTemp) { - colorModes.push('color_temp'); - } - } else if (brightness) { - colorModes.push('brightness'); - } else { - colorModes.push('onoff'); - } discoveryEntry = { type: 'light', object_id: expose.endpoint ? `light_${expose.endpoint}` : 'light', discovery_payload: { brightness: !!brightness, - color_mode: true, - supported_color_modes: colorModes, schema: 'json', command_topic: true, brightness_scale: 254, @@ -120,6 +100,18 @@ class HomeAssistant extends Extension { }, }; + const colorModes = [ + colorXY ? 'xy' : null, + !colorXY && colorHS ? 'hs' : null, + colorTemp ? 'color_temp' : null, + ].filter((c) => c); + + if (colorModes.length) { + discoveryEntry.discovery_payload.color_mode = true; + discoveryEntry.discovery_payload.supported_color_modes = colorModes; + } + + if (colorTemp) { discoveryEntry.discovery_payload.max_mireds = colorTemp.value_max; discoveryEntry.discovery_payload.min_mireds = colorTemp.value_min;