flespi: kein sleep_mode-Schreiben ohne bekannten Modus

Am laufenden System ausgeloest: nach einem "Jetzt lesen" - das leert flespis
Zwischenspeicher - kannte der Schreibweg das mode-Objekt nicht mehr und
schickte einen timeout ohne type. flespi lehnt das mit 400 ab (the following
properties are missing: type).

Der else-Zweig ist ersatzlos weg. Ist das mode-Objekt samt type unbekannt,
wird gar nicht geschrieben und der Grund gemeldet. Der zweite Grund wiegt
schwerer als der 400er: type IST der Schlafmodus (2 = Deep Sleep, 4 = Ultra
Deep Sleep). Ihn zu erraten hiesse, den Schlafmodus des Dongles zu verstellen
- das darf ohne ausdrueckliche Freigabe nie passieren.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 16:03:55 +02:00
parent 356a0bdf76
commit 8b213c540e
2 changed files with 20 additions and 6 deletions
+19 -5
View File
@@ -546,12 +546,26 @@ async def schlaf_timeout_schreiben(k: Koordinator, minuten: int) -> dict:
# Das ganze Objekt zurückschreiben, nur mit geändertem Feld: `type` und die
# übrigen Felder gehören dazu und dürfen beim Schreiben nicht verlorengehen.
#
# Kennen wir das Objekt nicht, wird NICHT geschrieben. Zwei Gründe, und der
# zweite wiegt schwerer:
#
# 1. flespi lehnt ein `mode` ohne `type` ab (400, "the following properties
# are missing: type"). Bis zum 05.09.2026 schickte der else-Zweig genau
# das - am laufenden System ausgelöst, weil "Jetzt lesen" den
# Zwischenspeicher leert und damit den vorigen Wert entfernt.
# 2. `type` IST der Schlafmodus (2 = Deep Sleep, 4 = Ultra Deep Sleep). Ihn
# zu erraten hiesse, den Schlafmodus des Geräts zu verstellen - das darf
# ohne ausdrückliche Freigabe des Eigentümers nie passieren. Lieber gar
# nicht schreiben und es sagen.
alt = (_roh(vorher_roh, SCHLAF_NAME) or {}).get(SCHLAF_OBJEKT)
neu = (
{**alt, SCHLAF_FELD: minuten}
if isinstance(alt, dict)
else {SCHLAF_FELD: minuten}
)
if not isinstance(alt, dict) or "type" not in alt:
raise FlespiFehler(
"Der Schlafmodus des Geräts ist gerade unbekannt - ohne ihn würde ein "
"Schreiben den Modus selbst verstellen. Erst \"Jetzt lesen\", sobald sich "
"der Dongle das nächste Mal meldet, dann erneut versuchen."
)
neu = {**alt, SCHLAF_FELD: minuten}
await _anfrage(
k.hass,
token,
@@ -1,7 +1,7 @@
{
"domain": "audi_dashboard",
"name": "Audi Dashboard",
"version": "2026.9.5.29",
"version": "2026.9.5.30",
"documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
"codeowners": [