feat(light): Effekte zur Auswahl
Die neun Effekte der Firmware waren in Home Assistant nicht erreichbar -
das Auswahlfeld, das es schon gab, sind die Szenen. Jetzt bietet die
Lichtentitaet sie an:
* Gewaehlt wird ueber den NAMEN aus der Firmware ("Regenbogen"),
geschickt wird die Kennung ("rainbow"). Eine Liste englischer
Kennungen waere in einer deutschen Oberflaeche unnoetig sperrig.
* Ein Effekt laeuft wie eine Farbe in ALLEN Segmenten; angezeigt wird er
nur, wenn alle denselben fahren.
* Eine Kennung, die nicht in der Liste steht (neuere Firmware, aeltere
Liste), wird roh angezeigt statt verschluckt.
* Ein unbekannter Name wird abgelehnt, statt stillschweigend nichts zu
tun.
Die Liste steht fest in der Firmware und wird deshalb einmal geholt,
nicht je Abfragezyklus - erneut erst, wenn sich die Version aendert. Eine
sechste Anfrage je Zyklus fuer etwas, das sich nie aendert, waere
Verschwendung.
Effekt-Parameter (Geschwindigkeit, Intensitaet, Palette) fehlen noch;
dafuer braucht es Entitaeten je Segment.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9eb7adcdd7
commit
ffcbbdfe4a
@@ -79,6 +79,11 @@ class NinstripCoordinator(DataUpdateCoordinator[NinstripData]):
|
||||
# teilen. Mehrere gleichzeitige Anfragen bringen nichts ausser Last.
|
||||
self.lock = asyncio.Lock()
|
||||
self.ota_in_progress = False
|
||||
# Die Effektliste steht fest in der Firmware; sie wird einmal geholt
|
||||
# und nach einem Update erneut. Jede Abfrage damit zu belasten waere
|
||||
# eine sechste Anfrage je Zyklus fuer etwas, das sich nie aendert.
|
||||
self.effects: list[dict[str, Any]] = []
|
||||
self._effects_fuer: str | None = None
|
||||
self._consecutive_poll_failures = 0
|
||||
|
||||
async def _async_update_data(self) -> NinstripData:
|
||||
@@ -93,6 +98,14 @@ class NinstripCoordinator(DataUpdateCoordinator[NinstripData]):
|
||||
# Die sACN-Einstellungen liegen hinter system/settings, nicht in
|
||||
# device/state - eine vierte Anfrage je Zyklus. Wie ha-ninlight.
|
||||
settings = await self.client.get_settings()
|
||||
fw = str(info.get("fw_version"))
|
||||
if self._effects_fuer != fw:
|
||||
antwort = await self.client.get_effects()
|
||||
roh = antwort.get("effects")
|
||||
self.effects = (
|
||||
[e for e in roh if isinstance(e, dict)] if isinstance(roh, list) else []
|
||||
)
|
||||
self._effects_fuer = fw
|
||||
except NinstripAuthError as err:
|
||||
raise ConfigEntryAuthFailed(f"{self.client.host}: Token abgelehnt") from err
|
||||
except NinstripError as err:
|
||||
|
||||
Reference in New Issue
Block a user