Ein Update-Knopf, Modell als Auswahlfeld, abgestellt schliesst fahrend aus

- Die Update-Kachel hat genau einen Knopf am Ende. Er traegt in jedem
  Zustand den naechsten faelligen Schritt (suchen, installieren, Neustart,
  Neuladen); Beschriftung und Fuellung wechseln mit. Die Abschnitte
  darueber behalten ihre Werte und verlieren nur ihre Knoepfe.
- Abstand unter der Trennlinie von 28 auf 16 px: das padding-top verhindert
  das Kollabieren des margin der Werteliste, also zaehlt jetzt nur noch das
  padding.
- Modell ist in der App ein Auswahlfeld statt eines Textfelds, wie im
  Panel. Die Liste liegt als Zweitschrift in daten/fahrzeugmodelle.ts;
  fahrzeugmodelle.test.ts liest die Panel-Quelle ein und vergleicht sie
  Eintrag fuer Eintrag, damit die beiden nicht auseinanderlaufen.
- Faehrt der Wagen, sagen Uebersicht und Sicherheitsseite das, statt
  "sicher abgestellt" zu behaupten. Die Zuendung meldet der Dongle in
  Sekunden, Tuer- und Schlossmeldungen kommen verzoegert - die schnellere
  Quelle hat Vorrang, weil sonst das Wort nicht stimmt.
- tankerkennung: der Tiefststand wird vor dem Anlegen gesetzt. Ein
  gepufferter Schwung Datensaetze legte sonst denselben Tankvorgang
  zweimal an, weil der zweite Zustandswechsel waehrend des Wartens noch
  den alten Tiefststand las (04.09.2026, 29,8 l und 29,7 l).
- flespi: nach dem Leeren des Zwischenspeichers wird nur abgeglichen, wenn
  ein Geraetewert vorliegt. Sonst ueberschrieb der Waechterfehler den
  frisch gelesenen Stand in der Kachel.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-05 17:12:51 +02:00
co-authored by Claude Opus 5
parent 1838ab0401
commit 255a593b50
14 changed files with 469 additions and 73 deletions
+27 -1
View File
@@ -678,4 +678,30 @@ async def jetzt_lesen(k: Koordinator) -> None:
await k.flespi_stand_setzen(stand)
# Ein frischer Stand kann eine Abweichung erst sichtbar machen - dann gehört
# sie gleich behoben, statt bis zum nächsten Speichern zu warten.
await wunsch_uebernehmen(k)
#
# ABER nur, wenn nach dem Leeren überhaupt schon ein Gerätewert
# zurückgekommen ist. Schläft der Dongle, ist der Wert nicht abweichend,
# sondern schlicht unbekannt - ein Schreibversuch scheitert dann am Schutz
# in schlaf_timeout_schreiben() und ersetzte den eben gelesenen Stand durch
# eine Fehlermeldung. Am 05.09.2026 genau so passiert: nach "Jetzt lesen"
# stand in der Kachel nur noch "Der Schlafmodus des Geräts ist gerade
# unbekannt", statt der Werte.
if _schlafwert_bekannt(stand):
await wunsch_uebernehmen(k)
else:
_LOGGER.debug(
"Nach dem Leeren liegt noch kein Gerätewert vor - kein Abgleich,"
" bis der Dongle sich meldet."
)
def _schlafwert_bekannt(stand: dict) -> bool:
"""Ob der Anzeigestand einen Schlaf-Timeout vom Gerät kennt.
Ein ausstehender Wert (`offen`) zählt mit: er ist unterwegs, und das
dazugehörige `mode`-Objekt liegt dann in flespi vor."""
for zeile in stand.get("werte", []):
if zeile.get("schluessel") != SCHLAF_SCHLUESSEL:
continue
return zeile.get("geraet") is not None or zeile.get("offen") is not None
return False