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.
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
"""Diagnosedaten zum Herunterladen, fuer Fehlermeldungen."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from homeassistant.components.diagnostics import async_redact_data
|
|
from homeassistant.const import CONF_HOST, CONF_TOKEN
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from .coordinator import NinstripConfigEntry
|
|
from .shared import DATA_SHARED
|
|
|
|
# Token, Adressen und Kennungen fliegen raus: so eine Datei landet schnell in
|
|
# einem Fehlerbericht.
|
|
TO_REDACT = {CONF_TOKEN, CONF_HOST, "ssid", "mac", "ip"}
|
|
|
|
|
|
async def async_get_config_entry_diagnostics(
|
|
hass: HomeAssistant, entry: NinstripConfigEntry
|
|
) -> dict[str, Any]:
|
|
coordinator = entry.runtime_data
|
|
device_type = coordinator.data.info.get("device_type")
|
|
shared = hass.data.get(DATA_SHARED)
|
|
abbilder = (
|
|
[]
|
|
if shared is None
|
|
else [
|
|
{"file": image.path.name, "device_type": image.device_type, "version": image.version}
|
|
for image in shared.catalog.images
|
|
if image.device_type == device_type
|
|
]
|
|
)
|
|
return {
|
|
**async_redact_data(
|
|
{
|
|
"entry": {"data": dict(entry.data), "options": dict(entry.options)},
|
|
"state": coordinator.data.state,
|
|
"info": coordinator.data.info,
|
|
"segments": coordinator.data.segments,
|
|
"settings": coordinator.data.settings,
|
|
},
|
|
TO_REDACT,
|
|
),
|
|
"firmware_images": abbilder,
|
|
}
|