Rueckblick misst auf Meter, Streckenwahl gemeinsam (2026.9.1.14)
Der erste Wurf (2026.9.1.12) verwarf jedes Importfenster mit distanz == 0. Zu grob: seit der GNSS-Verfeinerung messen wir Meter, und eine Fahrt von 400 Metern steht im CAN-Wert als Null. Der Eigentuemer hat es auf den Punkt gebracht - "0,0 moechte ich nicht, ab 0,1 schon". Der Rueckblick liest jetzt ebenfalls den GNSS-Zaehler und entscheidet auf eine Nachkommastelle. Dabei stand die Toleranzlogik kurz doppelt im Code - in screening.py und in historienimport.py. Genau die Doppelung, die dieses Projekt bei UNPLAUSIBLE_KMH und MINDESTDAUER_S schon einmal teuer bezahlt hat. Sie liegt jetzt gemeinsam in verlauf.py: strecke_waehlen(grob, fein) - die feine Zahl gilt, solange sie in der Rundungsunschaerfe des Ankers liegt, oder wenn es keinen Anker gibt. ist_gefahren(distanz) - ab 0,1 km ja. Eine unbekannte Strecke gilt als gefahren; nur die gemessene Null ist ein Nein. VERIFIZIERT: 13 Faelle gegen beide Funktionen, darunter die zwei echten Fahrten, die 400-Meter-Fahrt, die 100-Meter-Untergrenze, 40 Meter, fehlender Anker, fehlender GNSS-Wert, gedrifteter Zaehler und beide Seiten der Grenze. Import live: 1 Fenster uebersprungen, null 0-km-Fahrten im Bestand. Livepfad live: vier alte Fahrten korrekt abgelehnt. NICHT live gezeigt: ein Fenster mit 0,1-0,9 km, das der Import nun behaelt - der Recorder enthaelt kein geschlossenes Fenster dieser Groesse. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -32,11 +32,11 @@ import logging
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from .verlauf import (
|
||||
GNSS_TOLERANZ_KM,
|
||||
UNPLAUSIBLE_KMH,
|
||||
durchschnitt_kmh,
|
||||
hoechstwert_im_fenster,
|
||||
strecke_aus_zaehler,
|
||||
strecke_waehlen,
|
||||
naechster_wert,
|
||||
route_aus_verlauf,
|
||||
verbrauch_aus_literstaenden,
|
||||
@@ -259,23 +259,22 @@ async def _gnss_verfeinern(k: Koordinator, gnss_sensor: str, fahrt: dict) -> Non
|
||||
|
||||
punkte = await verlauf_lesen(k.hass, gnss_sensor, start, ende)
|
||||
fein = strecke_aus_zaehler(punkte)
|
||||
if fein is None:
|
||||
gewaehlt, genommen = strecke_waehlen(grob, fein)
|
||||
if not genommen:
|
||||
if fein is not None:
|
||||
_LOGGER.info(
|
||||
"Fahrt %s: GNSS-Strecke %s km passt nicht zum Kilometerstand "
|
||||
"(%s km) - der Fahrzeugwert bleibt stehen",
|
||||
fahrt.get("trip_id"), fein, grob,
|
||||
)
|
||||
return
|
||||
|
||||
if abs(fein - grob) > GNSS_TOLERANZ_KM:
|
||||
_LOGGER.info(
|
||||
"Fahrt %s: GNSS-Strecke %s km weicht um mehr als %s km vom "
|
||||
"Kilometerstand (%s km) ab - der Fahrzeugwert bleibt stehen",
|
||||
fahrt.get("trip_id"), fein, GNSS_TOLERANZ_KM, grob,
|
||||
)
|
||||
return
|
||||
|
||||
aenderungen = {"distance_km": fein, "km_quelle": "odometer+gnss"}
|
||||
aenderungen = {"distance_km": gewaehlt, "km_quelle": "odometer+gnss"}
|
||||
await k.ablage.fahrt_aktualisieren(fahrt["trip_id"], aenderungen)
|
||||
fahrt.update(aenderungen)
|
||||
_LOGGER.info(
|
||||
"Fahrt %s: Strecke auf %s km verfeinert (Kilometerstand sagte %s km)",
|
||||
fahrt.get("trip_id"), fein, grob,
|
||||
fahrt.get("trip_id"), gewaehlt, grob,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user