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
@@ -116,11 +116,14 @@ async def fuellstand_geaendert(
# (siehe tankvolumen_geaendert) - genauer, weil ohne den Umweg über das im
# Fahrzeugprofil hinterlegte Tankvolumen. Beide gleichzeitig auswerten
# würde denselben Tankvorgang zweimal anlegen.
# Reihenfolge wie bei tankvolumen_geaendert() - erst der Tiefststand, dann
# das Anlegen, sonst legen zwei dicht aufeinanderfolgende Wechsel denselben
# Tankvorgang zweimal an.
await k.tiefststand_setzen(aktuell)
if not k.zuordnung.werte.TANK_LITER_SENSOR:
await _automatisch_anlegen(
k, f"Füllstandsanstieg {round(anstieg, 1)} Prozentpunkte", ereigniszeit=ereigniszeit
)
await k.tiefststand_setzen(aktuell)
async def tankvolumen_geaendert(
@@ -144,13 +147,22 @@ async def tankvolumen_geaendert(
if anstieg < LITER_SCHWELLE:
return
# Der Tiefststand wird VOR dem Anlegen gesetzt, nicht danach.
# _automatisch_anlegen() wartet auf Geraetezeit und Ablage; in dieser Zeit
# kommt der naechste Zustandswechsel dran und liest oben noch den ALTEN
# Tiefststand - beide legen denselben Tankvorgang an. Genau so entstanden
# am 04.09.2026 um 21:37:04 zwei Eintraege ueber 29,8 l und 29,7 l, als der
# Dongle einen gepufferten Schwung Datensaetze auf einmal ablieferte und
# can_fuel_volume in derselben Sekunde 36,8 und 36,7 meldete.
# tiefststand_liter_setzen() belegt das Feld als erste Anweisung, also
# bevor es selbst wartet - danach sieht der zweite Wechsel den neuen Wert.
await k.tiefststand_liter_setzen(aktuell)
await _automatisch_anlegen(
k,
f"Tankvolumenanstieg {round(anstieg, 1)} l",
liter_schaetzung=anstieg,
ereigniszeit=ereigniszeit,
)
await k.tiefststand_liter_setzen(aktuell)
async def distanz_seit_tankung(