Das Ende einer verschlafenen Fahrt richtig bestimmen
Drei Fehler, die zusammen eine 5-Minuten-Fahrt als 15 Stunden mit 0,1 km/h im Bestand stehen liessen: - nach_neustart_fortsetzen() schloss eine laufende Fahrt bei ALLEM ausser "on" - auch bei Funkstille. Jetzt nur noch bei ausdruecklichem "off". - _letztes_lebenszeichen() las nur die Zuendungsentitaet, die nur bei einem Wechsel schreibt. Zusaetzliche Quelle ist die Meldezeit-Entitaet, deren Werte die Geraetezeit jedes Datensatzes sind. - Strecke und Dauer decken bei einer Luecke verschiedene Zeitraeume ab: der Durchschnitt entfaellt, und die Plausibilitaetspruefung rechnet ohne die verschlafenen Kilometer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -115,13 +115,20 @@ def _vollstaendig(aenderungen: dict, fahrt: dict) -> dict:
|
||||
aenderungen["odo_start"] = None
|
||||
aenderungen["odo_end"] = None
|
||||
return aenderungen
|
||||
geschwindigkeit = durchschnitt_kmh(distanz, fahrt.get("duration_s"))
|
||||
# Nur der aufgezeichnete Teil darf gegen die Dauer geprueft werden.
|
||||
# Die verschlafenen Kilometer sind zwar gefahren worden, aber in einer
|
||||
# Zeit, die NICHT in duration_s steckt - der Beginn liegt ja erst dort,
|
||||
# wo das Geraet aufgewacht ist. Beides zusammen ergaebe eine
|
||||
# Phantomgeschwindigkeit; am 06.09.2026 hat genau das eine Fahrt aus
|
||||
# der Testphase verworfen (siehe _aufzeichnungsluecken_schliessen).
|
||||
gemessen = round(distanz - (fahrt.get("luecke_km") or 0), 1)
|
||||
geschwindigkeit = durchschnitt_kmh(gemessen, fahrt.get("duration_s"))
|
||||
if geschwindigkeit is not None and geschwindigkeit > UNPLAUSIBLE_KMH:
|
||||
_LOGGER.warning(
|
||||
"Fahrt %s: Kilometerstand verworfen - unmögliche %s km/h im "
|
||||
"Schnitt (%s km in %s s), vermutlich ein Ausreißer im "
|
||||
"Verlauf oder eine falsch abgegrenzte Fahrt.",
|
||||
fahrt.get("trip_id"), geschwindigkeit, distanz, fahrt.get("duration_s"),
|
||||
fahrt.get("trip_id"), geschwindigkeit, gemessen, fahrt.get("duration_s"),
|
||||
)
|
||||
aenderungen["odo_start"] = None
|
||||
aenderungen["odo_end"] = None
|
||||
@@ -180,6 +187,18 @@ async def durchfuehren(k: Koordinator) -> None:
|
||||
# die beide schon dastehen. Deshalb vor dem Geschwindigkeitssensor und
|
||||
# unabhaengig davon, ob einer zugeordnet ist.
|
||||
for fahrt in fahrten:
|
||||
if fahrt.get("luecke_km"):
|
||||
# Strecke und Dauer decken hier verschiedene Zeitraeume ab: die
|
||||
# Strecke enthaelt die verschlafenen Kilometer, die Dauer nicht.
|
||||
# Ein Quotient daraus waere eine Zahl ohne Bedeutung - die Fahrt
|
||||
# vom 05.09.2026 kaeme auf 92 km/h fuer eine 33-km/h-Fahrt.
|
||||
# "Liegt nicht vor" ist die einzige ehrliche Angabe.
|
||||
if fahrt.get("avg_speed_kmh") is not None:
|
||||
await k.ablage.fahrt_aktualisieren(
|
||||
fahrt["trip_id"], {"avg_speed_kmh": None}
|
||||
)
|
||||
fahrt["avg_speed_kmh"] = None
|
||||
continue
|
||||
if fahrt.get("avg_speed_kmh") is not None:
|
||||
continue
|
||||
schnitt = durchschnitt_kmh(fahrt.get("distance_km"), fahrt.get("duration_s"))
|
||||
|
||||
Reference in New Issue
Block a user