diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index f3950c80d..7a4ce84ef 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -82,17 +82,36 @@ class HomeAssistant extends Extension { let discoveryEntry = null; /* istanbul ignore else */ if (expose.type === 'light') { - const supportsXY = !!expose.features.find((e) => e.name === 'color_xy'); - const supportsHS = !!expose.features.find((e) => e.name === 'color_hs'); + const colorXY = expose.features.find((e) => e.name === 'color_xy'); + 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: !!expose.features.find((e) => e.name === 'brightness'), - color_temp: !!colorTemp, - xy: supportsXY, - hs: !supportsXY && supportsHS, + brightness: !!brightness, + color_mode: true, + supported_color_modes: colorModes, schema: 'json', command_topic: true, brightness_scale: 254, diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index 0cfb2f5e2..318a78790 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -248,7 +248,8 @@ describe('HomeAssistant extension', () => { ], "brightness":true, "brightness_scale":254, - "color_temp":true, + "color_mode": true, + "supported_color_modes": ["color_temp"], "min_mireds": 250, "max_mireds": 454, "command_topic":"zigbee2mqtt/bulb/set", @@ -270,13 +271,11 @@ describe('HomeAssistant extension', () => { "finish_effect", "stop_effect" ], - "hs":false, "json_attributes_topic":"zigbee2mqtt/bulb", "name":"bulb", "schema":"json", "state_topic":"zigbee2mqtt/bulb", "unique_id":"0x000b57fffec6a5b2_light_zigbee2mqtt", - "xy":false }; expect(MQTT.publish).toHaveBeenCalledWith(