Files
ha-ninstrip/tests_unit/samples.py
T
Michael SauerandClaude Opus 5 ffcbbdfe4a 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>
2026-09-23 11:15:36 +02:00

124 lines
3.7 KiB
Python

"""Echte Nutzdaten zweier Geraete. Bewusst keine Grenzwerte - die stehen in den Tests selbst."""
from __future__ import annotations
from typing import Any
TOKEN = "a201883d13a570dd3cf1f3b64b5e1df7"
HOST_K1Y = "192.168.2.238"
MAC_K1Y = "b0:81:84:49:ad:4c"
# Abgefragt an der Stehlampe (KL-LSC5C3WV2-K1Y, SK6812-RGBW, 60 Pixel).
STATE_K1Y: dict[str, Any] = {
"on": True,
"brightness": 100,
"power_on_behaviour": "last",
"fade_in": 500,
"fade_out": 500,
"transition_default": 300,
"wake_on_change": False,
"preset": 2,
"preset_modified": False,
"segment_count": 1,
"pixel_count": 60,
}
INFO_K1Y: dict[str, Any] = {
"product": "ninstrip",
"device_type": "ninstrip-k1y",
"fw_version": "0.1.0-12-g71a57",
"build_date": "2026-09-22",
"mac": MAC_K1Y,
"name": "",
"wifi": {"mode": "sta", "ssid": "ninIOT", "rssi": -68, "ip": HOST_K1Y, "error": None},
"sacn": {"enabled": True, "active": False, "universe": 1, "universes": 1, "multicast": True},
"uptime": 1459,
"free_heap": 156848,
"strip": {
"chipset": "sk6812_rgbw",
"color_order": "grb",
"data_pin": 19,
"pixel_count": 60,
"leds_per_pixel": 1,
"has_white": True,
"inverted": True,
"power_scale": 100,
"max_milliamps": 1800,
},
"render": {"fps": 50, "render_us": 900, "show_us": 1800, "dropped_frames": 0},
"last_ota_error": None,
}
# wifi.source "compiled": das Geraet kennt sein WLAN nur aus der Firmware.
SETTINGS_COMPILED: dict[str, Any] = {
"name": "",
"wifi": {"ssid": "ninIOT", "source": "compiled"},
"auth_all": False,
"sacn": {
"enabled": True,
"universe": 1,
"start_slot": 1,
"on_timeout": "release",
"channels_per_pixel": 3,
},
"strip": {
"chipset": "sk6812_rgbw",
"color_order": "grb",
"data_pin": 19,
"pixel_count": 60,
"leds_per_pixel": 1,
"max_milliamps": 1800,
"supply_volts": 12,
"inverted": True,
},
}
PRESETS_K1Y: dict[str, Any] = {
"presets": [
{"id": 0, "name": "Warmweiss", "used": True, "segment_count": 1},
{"id": 1, "name": "Kaltweiss", "used": True, "segment_count": 1},
{"id": 2, "name": "Regenbogen", "used": True, "segment_count": 1},
{"id": 3, "name": "Feuer", "used": True, "segment_count": 1},
{"id": 4, "name": "", "used": False, "segment_count": 0},
{"id": 5, "name": "", "used": False, "segment_count": 0},
{"id": 6, "name": "", "used": False, "segment_count": 0},
{"id": 7, "name": "", "used": False, "segment_count": 0},
],
"active": 2,
"modified": False,
}
# wifi.source "stored": ueber das Onboarding ins WLAN gebracht, also vom
# Abbild unabhaengig.
SETTINGS_STORED: dict[str, Any] = {
**SETTINGS_COMPILED,
"wifi": {"ssid": "ninIOT", "source": "stored"},
}
# Ein Segment ueber den ganzen Strip, warmweiss - so kommt ein Geraet aus dem
# Werkszustand. Farbe und Farbtemperatur stehen nur hier, nicht in state.
SEGMENTS_K1Y: dict[str, Any] = {
"segments": [
{
"id": 0,
"name": None,
"start": 0,
"end": 59,
"mode": "white",
"color_temp": 2700,
"brightness": 80,
}
]
}
# Die Effekttabelle der Firmware (nl_effects.c), gekuerzt auf drei Eintraege.
EFFECTS_K1Y: dict[str, Any] = {
"effects": [
{"id": "rainbow", "name": "Regenbogen", "params": ["speed", "palette"]},
{"id": "fire", "name": "Feuer", "params": ["speed"]},
{"id": "chase", "name": "Lauflicht", "params": ["speed", "intensity", "palette"]},
],
"palettes": ["rainbow", "warm", "cool"],
}