fix(light): kein Farbtemperaturmodus ohne echten Bereich
Das Montana-Black-Shield (neues Ziel ledshield_rgb in der Firmware) steuert analoge RGB-Streifen und hat keinen eigenen Weisskanal. Sein Board meldet deshalb ct_min == ct_max (nl_board.c: 4000/4000) - die Konvention der Firmware fuer "weiss entsteht als RGB-Mischung". supported_color_modes bot COLOR_TEMP bisher IMMER an. Beim Shield bekaeme Home Assistant damit einen Farbtemperaturregler, dessen Grenzen zusammenfallen. Jetzt entscheidet der gemeldete Bereich: nur wenn oben > unten, gibt es COLOR_TEMP. Dieselbe Regel benutzt ninlight_core schon (device_state.dart, hasColorTemp), dort faellt der Regler beim Shield von selbst weg. Die Menge darf nie leer werden - HA verlangt mindestens einen Modus -, deshalb faellt sie im Grenzfall auf BRIGHTNESS zurueck: ein Geraet ohne Farbe und ohne Bereich kann immer noch dimmen.
This commit is contained in:
@@ -68,11 +68,30 @@ class NinlightLight(NinlightEntity, LightEntity):
|
||||
def brightness(self) -> int:
|
||||
return lamp_to_ha_brightness(int(self._state["brightness"]))
|
||||
|
||||
def _has_ct_range(self) -> bool:
|
||||
"""Ob das Geraet einen echten Farbtemperaturbereich hat.
|
||||
|
||||
Das Montana-Black-Shield steuert analoge RGB-Streifen ohne eigenen
|
||||
Weisskanal und meldet deshalb ct_min == ct_max (nl_board.c,
|
||||
"ledshield_rgb": 4000/4000) - die Konvention der Firmware fuer "weiss
|
||||
entsteht als RGB-Mischung". Ein Bereich ohne Spielraum ist keiner;
|
||||
wuerde er hier als COLOR_TEMP durchgehen, bekaeme Home Assistant einen
|
||||
Regler mit min == max.
|
||||
"""
|
||||
unten, oben = self._kelvin_range()
|
||||
return oben > unten
|
||||
|
||||
@property
|
||||
def supported_color_modes(self) -> set[ColorMode]:
|
||||
if self._state["capabilities"].get("color"):
|
||||
return {ColorMode.RGB, ColorMode.COLOR_TEMP}
|
||||
return {ColorMode.COLOR_TEMP}
|
||||
farbe = bool(self._state["capabilities"].get("color"))
|
||||
modi: set[ColorMode] = set()
|
||||
if farbe:
|
||||
modi.add(ColorMode.RGB)
|
||||
if self._has_ct_range():
|
||||
modi.add(ColorMode.COLOR_TEMP)
|
||||
# Leer darf die Menge nie sein - HA verlangt mindestens einen Modus.
|
||||
# Ein Geraet ohne Farbe und ohne Bereich kann immer noch dimmen.
|
||||
return modi or {ColorMode.BRIGHTNESS}
|
||||
|
||||
@property
|
||||
def color_mode(self) -> ColorMode:
|
||||
|
||||
Reference in New Issue
Block a user