Debug-Mode, eine Version-Kachel, Knoepfe nach HIG, Bilder ohne Verzoegerung (2026.9.4.11)

Debug-Mode: Zugaenge und Dongle stehen nicht mehr verstreut oben in den
Einstellungen, sondern zusammen hinter einem Schalter am Seitenende - dazu
neu der letzte Datensatz des Dongles (geraet.py). "Letzter Datensatz" heisst
dabei: alle Entitaeten des Geraets, deren Aktualisierung hoechstens zwei
Sekunden nach der juengsten liegt - die flespi-Integration setzt einen
Datensatz in Millisekunden. Angezeigt mit Ankunft, Geraetezeit und dem
Rueckstand zwischen beiden.

Beim Verifizieren gefunden: app_version_veroeffentlichen() lief nur beim
Start und nach einer Aktion, und beim Start haben die Entitaeten des Geraets
noch keinen Zustand - die Kachel waere dauerhaft leer geblieben. Laeuft
jetzt im Minutentakt mit, ohne Netzaufruf.

Ausserdem:
- "Version" und "Integration-Update" sind eine Kachel
- Speichern/Verwerfen als zwei gleich breite Knoepfe, der bestaetigende
  gefuellt und rechts; "Verwerfen" war in der App blosser Text
- Bilder werden nach dem ersten Zeichnen in der Leerlaufzeit vorgeladen UND
  dekodiert. Die Verzoegerung beim Seitenwechsel kam nicht vom Netz (31 Tage
  Cache), sondern vom asynchronen Dekodieren eines frisch erzeugten <img>.

214/214 Tests, Panel als Modul geparst, live gegen audi_ha_test geprueft.
This commit is contained in:
2026-09-04 12:15:33 +02:00
parent 63a45d4ee2
commit 4ab6b9fca5
14 changed files with 695 additions and 182 deletions
@@ -51,6 +51,7 @@ from . import (
batterie,
fahrterkennung,
flespi,
geraet,
identitaet,
reifen,
screening,
@@ -253,6 +254,12 @@ class Koordinator:
await self.profil_veroeffentlichen()
await self.fahrten_veroeffentlichen()
await self.tankvorgaenge_veroeffentlichen()
# Muss mitlaufen, seit dort der letzte Datensatz des Dongles steht:
# beim Start haben dessen Entitaeten noch gar keinen Zustand, die
# Angabe waere sonst dauerhaft leer. Kostet einen kleinen Dateilesevorgang
# (bundle.json) je Minute und KEINEN Netzaufruf - die Pruefung bei Gitea
# bleibt an ihrem Dienst, siehe Abschnitt J.
await self.app_version_veroeffentlichen()
async def _takt_batterie(self, _jetzt: datetime.datetime) -> None:
await batterie.pruefen(self)
@@ -636,6 +643,12 @@ class Koordinator:
"aktiv": flespi.zugang(self) is not None,
"stand": self.flespi_stand,
},
# Der letzte Datensatz des Dongles, wie er hier angekommen
# ist - fuer die Fehlersuche, siehe geraet.py. None, solange
# weder Meldezeit noch Fahrtsignal zugeordnet sind.
"letzter_datensatz": geraet.letzter_datensatz(
self.hass, self.zuordnung.werte
),
},
)