feat: nachgezogen, was ha-ninlight laengst hat
Michaels Befund: die Integration ist nicht dasselbe wie die von ninlight. Verglichen und die Luecken geschlossen - alle Felder gibt es in der Firmware schon, sie waren nur nicht bedienbar: * number: fade_in, fade_out, transition_default in Millisekunden, mit den Grenzen der Firmware (10 s, 10 s, 60 s). * select: Einschaltverhalten (last, on, off). * switch: bei Aenderung einschalten. * light: Uebergangszeit beim Ein- und Ausschalten. HA rechnet in Sekunden, das Geraet in Millisekunden; laengeres als 60 s wird gekappt, sonst wiese das Geraet die ganze Anfrage mit 400 ab. Ohne Angabe wird kein Feld geschickt, sonst ueberschriebe jeder Schaltbefehl die Vorgabe. * sensor: letzter Update-Fehler und Startzeit (Zeitstempel statt einer Laufzeit, die jede Abfrage weiterlaeuft), beide ab Werk aus. * diagnostics.py: Diagnosedaten zum Herunterladen, ohne Token, Adressen, MAC und SSID. * config_flow: Neu-Konfigurieren von Adresse und Token, mit Gegenprobe der MAC - ein Tippfehler in der Adresse soll nicht still den falschen Eintrag umbiegen. * Hinweis in den Reparaturen, wenn ein Geraet noch auf dem oeffentlichen Werks-Token steht. Nicht uebernommen: die Auswahl sacn_layout. ninstrip ist immer rgb, ein Strip hat keinen Masterkanal - eine Auswahl mit einer Option waere nur Zierde. 241 Tests, 97 %. Die Kappung der Uebergangszeit per Mutation gegengeprueft.
This commit is contained in:
@@ -15,12 +15,15 @@ from homeassistant.components.light import (
|
||||
ATTR_BRIGHTNESS,
|
||||
ATTR_COLOR_TEMP_KELVIN,
|
||||
ATTR_RGB_COLOR,
|
||||
ATTR_TRANSITION,
|
||||
ColorMode,
|
||||
LightEntity,
|
||||
LightEntityFeature,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||
|
||||
from .const import MAX_TRANSITION_MS
|
||||
from .coordinator import NinstripConfigEntry, NinstripCoordinator
|
||||
from .entity import NinstripEntity
|
||||
|
||||
@@ -31,6 +34,15 @@ MIN_KELVIN = 2700
|
||||
MAX_KELVIN = 6500
|
||||
|
||||
|
||||
def uebergang_ms(sekunden: float) -> int:
|
||||
"""Home Assistant rechnet in Sekunden, das Geraet in Millisekunden.
|
||||
|
||||
Gekappt auf das, was die Firmware annimmt - ein laengerer Wert wuerde
|
||||
sonst die ganze Anfrage mit 400 abweisen, statt nur langsamer zu blenden.
|
||||
"""
|
||||
return max(0, min(MAX_TRANSITION_MS, round(sekunden * 1000)))
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: NinstripConfigEntry,
|
||||
@@ -44,6 +56,7 @@ class NinstripLight(NinstripEntity, LightEntity):
|
||||
|
||||
_attr_name = None
|
||||
_attr_supported_color_modes = {ColorMode.RGB, ColorMode.COLOR_TEMP}
|
||||
_attr_supported_features = LightEntityFeature.TRANSITION
|
||||
_attr_min_color_temp_kelvin = MIN_KELVIN
|
||||
_attr_max_color_temp_kelvin = MAX_KELVIN
|
||||
|
||||
@@ -131,7 +144,12 @@ class NinstripLight(NinstripEntity, LightEntity):
|
||||
fields: dict[str, Any] = {"on": True}
|
||||
if ATTR_BRIGHTNESS in kwargs:
|
||||
fields["brightness"] = round(int(kwargs[ATTR_BRIGHTNESS]) * 100 / 255)
|
||||
if ATTR_TRANSITION in kwargs:
|
||||
fields["transition"] = uebergang_ms(kwargs[ATTR_TRANSITION])
|
||||
await self.coordinator.async_set_state(**fields)
|
||||
|
||||
async def async_turn_off(self, **kwargs: Any) -> None:
|
||||
await self.coordinator.async_set_state(on=False)
|
||||
fields: dict[str, Any] = {"on": False}
|
||||
if ATTR_TRANSITION in kwargs:
|
||||
fields["transition"] = uebergang_ms(kwargs[ATTR_TRANSITION])
|
||||
await self.coordinator.async_set_state(**fields)
|
||||
|
||||
Reference in New Issue
Block a user