Files
ha-ninstrip/custom_components/ninstrip/strings.json
T
Michael Sauer 2c77b2d325 feat: update-Entitaet fuer die Firmware und das Testgeruest
Aufgebaut wie ha-ninlight: die Abbilder liegen unter ninstrip_firmware im
Konfigurationsverzeichnis, Home Assistant liefert sie selbst unter einer
einmaligen Adresse aus, und zwar genau die Bytes, die vorher geprueft
wurden. Dazu firmware.py (Anhaenger, Versionsreihenfolge, WLAN-Pruefung,
Katalog), http.py, urls.py und shared.py.

Drei Unterschiede zu ninlight, alle aus der Firmware heraus:

* Verglichen wird device_type - die Platine -, nicht product. Letzteres ist
  bei allen Platinen 'ninstrip'; die Abbilder unterscheiden sich aber hart,
  die K1Y invertiert das Datensignal und die KL-RGBC3 nicht. Firmware ohne
  dieses Feld bekommt gar kein Angebot.
* Die WLAN-Pruefung sucht die SSID unverpackt: ein ESP32-Abbild ist nicht
  gzip-verpackt wie das des W600. An einem mit sdkconfig.local gebauten
  Abbild gegengeprueft - die SSID steht genau einmal NUL-gerahmt drin.
* Der Fehlerschluessel heisst device_url_too_long statt lamp_url_too_long.

Dazu das Testgeruest, das es hier bisher gar nicht gab: 204 Tests in
tests_unit/ (ohne HA-Instanz) und tests/ (mit), Abdeckung 97 %, dazu
scripts/check.sh als Ersatz fuer die fehlende CI. Die Nutzdaten in
tests_unit/samples.py sind an der Stehlampe abgefragt.

Beim Gegenpruefen per Mutation fiel auf, dass die Platinenpruefung
unmittelbar vor dem Senden ungeprueft war - der Test dazu ist jetzt da und
faellt, wenn man die Pruefung entfernt.
2026-09-22 23:10:07 +02:00

160 lines
4.9 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"config": {
"step": {
"user": {
"title": "ninstrip hinzufügen",
"description": "Adresse und API-Token des Geräts. Im Auslieferungszustand und nach einem Werksreset gilt das Werks-Token, das bereits eingetragen ist. Wer ein eigenes gesetzt hat, trägt es hier ein.",
"data": {
"host": "Adresse",
"token": "API-Token"
}
},
"discovery_confirm": {
"title": "ninstrip gefunden",
"description": "{name} unter {host}. Bitte das API-Token eingeben.",
"data": {
"token": "API-Token"
}
},
"reauth_confirm": {
"title": "Token erneuern",
"description": "Das Gerät unter {host} weist das gespeicherte Token ab. Nach einem Werksreset gilt wieder das Werks-Token.",
"data": {
"token": "API-Token"
}
}
},
"error": {
"cannot_connect": "Gerät nicht erreichbar",
"invalid_auth": "Token abgelehnt",
"not_ninstrip": "Dort antwortet kein ninstrip",
"unknown": "Unerwarteter Fehler"
},
"abort": {
"already_configured": "Dieses Gerät ist bereits eingerichtet",
"reauth_successful": "Token erneuert"
}
},
"options": {
"step": {
"init": {
"title": "Einstellungen",
"data": {
"scan_interval": "Abfrageabstand (Sekunden)",
"device_base_url": "Adresse, unter der die Geräte Home Assistant erreichen"
},
"data_description": {
"device_base_url": "Nur für Firmware-Updates nötig, wenn die Geräte die interne Adresse von Home Assistant nicht über schlichtes http erreichen, z. B. http://192.168.1.50:8123"
}
}
},
"error": {
"invalid_base_url": "Es muss eine schlichte http://-Adresse mit Host und optionalem Port sein, ohne Pfad.",
"base_url_too_long": "Adresse zu lang – das Gerät nimmt für die ganze Firmware-Adresse höchstens 255 Zeichen."
}
},
"entity": {
"select": {
"preset": {
"name": "Szene"
},
"sacn_on_timeout": {
"name": "sACN nach Stromende",
"state": {
"release": "Zurück zum vorherigen Bild",
"hold": "Letztes Bild halten"
}
}
},
"button": {
"restart": {
"name": "Neu starten"
}
},
"sensor": {
"rssi": {
"name": "WLAN-Signal"
},
"uptime": {
"name": "Laufzeit"
},
"free_heap": {
"name": "Freier Speicher"
},
"power_scale": {
"name": "Leistungsbegrenzung"
}
},
"switch": {
"sacn_enabled": {
"name": "sACN-Empfang"
}
},
"number": {
"sacn_universe": {
"name": "sACN-Universe"
},
"sacn_start_slot": {
"name": "sACN-Startslot"
}
},
"binary_sensor": {
"sacn_active": {
"name": "sACN aktiv"
},
"sacn_multicast": {
"name": "sACN-Multicast beigetreten"
}
},
"update": {
"firmware": {
"name": "Firmware"
}
}
},
"exceptions": {
"auth_failed": {
"message": "Das Gerät hat das Token abgelehnt."
},
"device_busy": {
"message": "Das Gerät ist beschäftigt - vermutlich läuft eine Aktualisierung."
},
"request_failed": {
"message": "Das Gerät hat die Anfrage abgewiesen: {message}"
},
"cannot_connect": {
"message": "Das Gerät ist nicht erreichbar."
},
"update_busy": {
"message": "Auf dem Gerät läuft bereits eine Aktualisierung."
},
"no_update": {
"message": "Es steht keine neuere Firmware bereit."
},
"no_http_url": {
"message": "Die Geräte erreichen Home Assistant nur über schlichtes http. Die Adresse steht in den Einstellungen der Integration."
},
"device_url_too_long": {
"message": "Die Firmware-Adresse ist länger als die 255 Zeichen, die das Gerät annimmt."
},
"image_invalid": {
"message": "Die Firmware-Datei hat sich geändert oder ist nicht mehr gültig."
},
"wifi_guard": {
"message": "Diese Firmware enthält die WLAN-Zugangsdaten für {ssid} nicht; das Gerät verlöre seine Netzverbindung."
},
"update_failed": {
"message": "Die Aktualisierung ist fehlgeschlagen: {reason}"
},
"update_timeout": {
"message": "Das Gerät hat sich innerhalb von 12 Minuten nicht mit der neuen Firmware gemeldet."
}
},
"issues": {
"wifi_guard": {
"title": "Firmware für {name} wird nicht angeboten",
"description": "Im Firmware-Ordner liegt {version} für {device_type}, aber ohne WLAN-Zugangsdaten für {ssid}. Das Gerät kennt sein WLAN nur aus der Firmware und verlöre nach dieser Aktualisierung seine Netzverbindung. Deshalb wird sie nicht angeboten. Wer das Gerät stattdessen über das Onboarding ins WLAN gebracht hat, bekommt das Update ohne diesen Vorbehalt."
}
}
}