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:
Michael Sauer
2026-09-23 11:15:36 +02:00
co-authored by Claude Opus 5
parent 9eb7adcdd7
commit ffcbbdfe4a
10 changed files with 235 additions and 7 deletions
+7 -3
View File
@@ -138,8 +138,12 @@ async def test_ohne_uebergang_wird_kein_feld_geschickt(
mock_client.set_state.assert_awaited_once_with(on=False)
async def test_die_lichtentitaet_meldet_uebergaenge(
async def test_die_lichtentitaet_meldet_uebergaenge_und_effekte(
hass: HomeAssistant, init_integration: MockConfigEntry
) -> None:
state = hass.states.get(entity_id_for(hass, "light", "light"))
assert state.attributes["supported_features"] == 32 # LightEntityFeature.TRANSITION
from homeassistant.components.light import LightEntityFeature
merkmale = hass.states.get(entity_id_for(hass, "light", "light")).attributes[
"supported_features"
]
assert merkmale == LightEntityFeature.TRANSITION | LightEntityFeature.EFFECT