diff --git a/lib/extension/homeassistant.ts b/lib/extension/homeassistant.ts index 624c119b..975fb0f9 100644 --- a/lib/extension/homeassistant.ts +++ b/lib/extension/homeassistant.ts @@ -127,6 +127,7 @@ export default class HomeAssistant extends Extension { const hasBrightness = exposes.find((expose) => expose.features.find((e) => e.name === 'brightness')); const hasColorTemp = exposes.find((expose) => expose.features.find((e) => e.name === 'color_temp')); const state = firstExpose.features.find((f) => f.name === 'state'); + const preferHS = !!exposes.find((expose) => expose.preferredColorMode === 'hs'); const discoveryEntry: DiscoveryEntry = { type: 'light', @@ -143,8 +144,8 @@ export default class HomeAssistant extends Extension { }; const colorModes = [ - hasColorXY ? 'xy' : null, - !hasColorXY && hasColorHS ? 'hs' : null, + hasColorXY && !preferHS ? 'xy' : null, + (!hasColorXY || preferHS) && hasColorHS ? 'hs' : null, hasColorTemp ? 'color_temp' : null, ].filter((c) => c); diff --git a/lib/types/types.d.ts b/lib/types/types.d.ts index 7b7b8746..fcbc8aef 100644 --- a/lib/types/types.d.ts +++ b/lib/types/types.d.ts @@ -101,7 +101,7 @@ declare global { interface DefinitionExpose { type: string, name?: string, features?: DefinitionExposeFeature[], endpoint?: string, values?: string[], value_off?: string, value_on?: string, - access: number, property: string, unit?: string, + access: number, property: string, unit?: string, preferredColorMode?: 'xy' | 'hs', value_min?: number, value_max?: number} interface Definition {