Audit nach dem Dongle-Umbau: vier Befunde (2026.9.3.13)

1. profil_schreiben awaitete wunsch_uebernehmen und damit bis zu drei
   HTTP-Runden zu flespi - bei 39 Aufrufstellen von profilSpeichern() im Panel
   je Feldaenderung. Laeuft jetzt als eigene Aufgabe.
2. Ein gescheiterter Schreibversuch wurde bei jedem Speichern wiederholt, weil
   der Fehlerstand kein "werte" hat. Er merkt sich jetzt unter "versucht", was
   gescheitert ist. Dazu: kein zweites Schreiben, wenn der Wert schon als
   pending bereitliegt.
3. buendelPasst() versprach im Kommentar, ein aelteres Buendel abzulehnen,
   pruefte aber nur Ungleichheit - deshalb meldete die App "diese Fassung
   aendert auch Natives", obwohl nur das Buendel nach einem Versionssprung
   nicht neu gebaut war. Vergleicht jetzt gegen die Serverfassung, drei
   Regressionstests (der entscheidende gegen den alten Stand rot). Der Text
   behauptet keine Ursache mehr, die die App nicht kennen kann.
4. Das Regler-Minimum ging heute von 0 auf 1, ein bereits gespeicherter Wert
   darunter lief ungeprueft durch. Beide Oberflaechen klemmen jetzt auf 1-60.

182/182 Tests, 28 Backend-Dateien py_compile, beide Frontends als Modul
geparst, Dienst- und Katalog-Konsistenz in beide Richtungen geprueft, Buendel
auf derselben Fassung wie das Manifest.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-03 21:03:17 +02:00
parent d4ba3bce7a
commit 2736c3d6e0
12 changed files with 148 additions and 22 deletions
+8 -4
View File
@@ -242,11 +242,15 @@ def registrieren(hass: HomeAssistant, k: Koordinator) -> None:
await identitaet.fin_ableiten_und_uebernehmen(k.hass, k.zuordnung, k.ablage)
await k.profil_veroeffentlichen()
# Die Reglerstellung "Fahrt beenden" ist zugleich der Sollwert für den
# Schlaf-Timeout des Dongles (103). Vorgemerkt statt geschrieben:
# schreiben geht nur bei wachem Gerät, siehe flespi.py. Muss NACH
# profil_veroeffentlichen() stehen - erst dort liest der Koordinator
# Schlaf-Timeout des Dongles (103) - siehe flespi.py. Muss NACH
# profil_veroeffentlichen() stehen: erst dort liest der Koordinator
# die neue Reglerstellung mit.
await flespi.wunsch_uebernehmen(k)
#
# Als eigene Aufgabe und ausdrücklich NICHT abgewartet: an diesem
# Dienst hängen ~40 Aufrufstellen im Panel, eine je Feldänderung, und
# jede würde sonst auf bis zu drei HTTP-Runden zu flespi warten. Das
# Speichern selbst ist zu diesem Zeitpunkt längst erledigt.
k.hass.async_create_task(flespi.wunsch_uebernehmen(k))
async def dongle_lesen(_aufruf: ServiceCall) -> None:
"""Liest die Konfiguration des Dongles - auf ausdrücklichen Knopfdruck.