Audit Panel/iOS: sechs Befunde behoben, Zuendung aufs Trip-Signal (2026.8.31.5)

ZUENDUNG_SENSOR liegt jetzt auf dem Trip-Signal des FMM003 statt auf dem rohen,
prellenden Zuendungseingang. Damit kommt die Pausentoleranz vom Geraet - eine
Fahrt beginnt erst bei Zuendung UND Bewegung UND Start Speed.

MINDESTDAUER_S wandert nach verlauf.py und gilt jetzt auch im Livepfad. Vorher
verwarf nur der Import Zuendphasen unter 60 s; live entstanden daraus am 31.08.
elf Fahrten mit 0 km, zwei davon mit null Sekunden Dauer.

Das Panel erfand einen Literpreis von 0,00 EUR, wenn die Kosten noch nicht
feststanden (null/liter ist 0 in JavaScript) - neue Hilfsfunktion literpreis()
prueft beides, wie die App seit jeher. schnittpreis() teilte ohne Nennerpruefung
und konnte "NaN" oder "unendlich" anzeigen.

Der Setup-Dialog ist wirklich modal: die Tab-Leiste hatte einen eigenen Zuhoerer
vor der Sperre und liess einen Tabwechsel bei offenem Fenster zu.

Verwaister Code entfernt: drei Funktionen und vier Regeln im Panel, 20 Regeln in
der App.

Offen bleibt allein die leere Erstzulassung - eine Angabe, keine Aenderung.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-31 20:05:59 +02:00
co-authored by Claude Opus 5
parent 90efcc5b00
commit 9b0e390dfd
11 changed files with 183 additions and 215 deletions
@@ -26,7 +26,7 @@ from typing import TYPE_CHECKING
from . import screening
from .ablage import neue_id
from .veroeffentlichung import zustand_oder_none
from .verlauf import verlauf_lesen, zeit_normalisiert
from .verlauf import MINDESTDAUER_S, verlauf_lesen, zeit_normalisiert
if TYPE_CHECKING:
from .koordinator import Koordinator
@@ -170,6 +170,20 @@ async def _letztes_lebenszeichen(
async def fahrt_beenden(
k: Koordinator, start_ts: datetime.datetime, ende_ts: datetime.datetime
) -> None:
dauer_s = int((ende_ts - start_ts).total_seconds())
if dauer_s < MINDESTDAUER_S:
# Zündung an, aber nicht gefahren - oder ein prellender
# Zündungseingang. Der Import verwirft solche Fenster seit jeher;
# hier taten wir es nicht, und der Bestand füllte sich mit
# Nulleinträgen (siehe MINDESTDAUER_S in verlauf.py). Der laufende
# Start wird trotzdem zurückgesetzt, sonst hinge er für immer.
await k.fahrt_start_setzen(None)
_LOGGER.info(
"Zündung war nur %s s an - keine Fahrt angelegt (Grenze %s s)",
dauer_s,
MINDESTDAUER_S,
)
return
fahrt = leere_fahrt(start_ts, ende_ts, "ha")
await k.ablage.fahrt_anhaengen(fahrt)
await k.fahrt_start_setzen(None)