Ortsnamen aus dem Backend, Verbrauchsfaktor aus dem Tankbeleg, Radzaehler ueber Fahrten
Ortsauflösung serverseitig (geokodierung.py): der Ort steht jetzt in der Fahrt statt im Zwischenspeicher jedes Geräts. Beide Oberflächen fragen nichts mehr ab. Verbrauchskorrektur (verbrauchskorrektur.py): Faktor = Beleg-Liter / Summe der Einzelfahrten, voll zu voll. Statt einer Schranke am Faktor wird der Nenner geprüft - decken die erkannten Fahrten 90-110 % der Tacho-Spanne ab? Ausgelöst beim Schreiben eines Tankvorgangs, nicht erst bei der nächsten Fahrt. Radzähler: summiert die Fahrten des montierten Satzes statt Tacho-Deltas. Der alte Weg hatte Fahrzeugwechsel als gefahrene Strecke verbucht (375.962 km bei einem Tacho von 61.823). Null heißt unbekannt: ein Kilometerstand von 0 oder ein leeres Feld werden zu None normalisiert, statt an sechs Lesestellen als "Tachostand null" zu gelten. Momentanwerte der Sensoren gelten nur für einen Tankvorgang von jetzt. Oberfläche, beide Codebasen: Wertespalte der Fahrtenliste ausgerichtet, Ort -> Ort in "Zuletzt", "Räder" statt "Reifen", "Termin vereinbart" entfernt, Markenlogo 20 % größer, Übersicht-Symbol auf volle Rasterbreite. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -23,7 +23,7 @@ import datetime
|
||||
import logging
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from . import screening
|
||||
from . import reifen, screening
|
||||
from .ablage import neue_id
|
||||
from .veroeffentlichung import zustand_oder_none
|
||||
from .verlauf import (
|
||||
@@ -73,7 +73,12 @@ NACHLAUF_S = 900
|
||||
NACHLAUF_TOLERANZ_S = 120
|
||||
|
||||
|
||||
def leere_fahrt(start_ts: datetime.datetime, ende_ts: datetime.datetime, quelle: str) -> dict:
|
||||
def leere_fahrt(
|
||||
start_ts: datetime.datetime,
|
||||
ende_ts: datetime.datetime,
|
||||
quelle: str,
|
||||
reifensatz: str | None = None,
|
||||
) -> dict:
|
||||
"""Das vollständige Fahrt-Schema mit allem, was noch nicht bekannt ist,
|
||||
auf None. Bewusst alle Felder ausgeschrieben: die Oberfläche darf sich auf
|
||||
ihre Existenz verlassen, und ein fehlendes Feld wäre schwerer zu finden
|
||||
@@ -89,6 +94,11 @@ def leere_fahrt(start_ts: datetime.datetime, ende_ts: datetime.datetime, quelle:
|
||||
"odo_end": None,
|
||||
"avg_speed_kmh": None,
|
||||
"vmax_kmh": None,
|
||||
# Die reine Messung, unangetastet - damit die Eichung an den
|
||||
# Betankungen wiederholbar bleibt (verbrauchskorrektur.py).
|
||||
"verbrauch_roh_l_100km": None,
|
||||
"verbrauch_faktor": None,
|
||||
# Was angezeigt wird: roh mal Faktor, oder roh allein.
|
||||
"verbrauch_l_100km": None,
|
||||
"start_lat": None,
|
||||
"start_lon": None,
|
||||
@@ -96,7 +106,20 @@ def leere_fahrt(start_ts: datetime.datetime, ende_ts: datetime.datetime, quelle:
|
||||
"end_lon": None,
|
||||
"start_address": None,
|
||||
"end_address": None,
|
||||
# Nur der Ortsname, fuer die Fahrtenliste. Zwei volle Anschriften
|
||||
# passen dort nicht in eine Zeile. Er wird beim Aufloesen SEPARAT
|
||||
# gemerkt, nicht nachtraeglich aus der Anschrift geschnitten -
|
||||
# Begruendung in geokodierung.anschrift_bauen().
|
||||
"start_stadt": None,
|
||||
"end_stadt": None,
|
||||
"art": "privat",
|
||||
# Welcher Radsatz montiert war. Der Radzaehler summiert danach - siehe
|
||||
# reifen.py. None heisst "zaehlt fuer keinen Satz": so bleiben Fahrten
|
||||
# aus der Zeit vor der Umstellung dem Sockel ueberlassen, statt dort
|
||||
# ein zweites Mal aufzutauchen.
|
||||
"reifensatz": reifensatz,
|
||||
# Wieviel von dieser Fahrt dem Radsatz bereits gutgeschrieben ist.
|
||||
"reifen_gezaehlt_km": None,
|
||||
"route": None,
|
||||
"pausen": [],
|
||||
"source": quelle,
|
||||
@@ -341,7 +364,7 @@ async def fahrt_beenden(
|
||||
MINDESTDAUER_S,
|
||||
)
|
||||
return
|
||||
fahrt = leere_fahrt(start_ts, ende_ts, "ha")
|
||||
fahrt = leere_fahrt(start_ts, ende_ts, "ha", reifen.aktiver_satz(await k.ablage.profil_lesen()))
|
||||
await k.ablage.fahrt_anhaengen(fahrt)
|
||||
await k.fahrt_start_setzen(None)
|
||||
await k.fahrten_veroeffentlichen()
|
||||
@@ -394,7 +417,9 @@ async def manuell_anlegen(k: Koordinator, daten: dict) -> None:
|
||||
daten.get("odo_start"), daten.get("odo_end"), daten.get("distanz"),
|
||||
)
|
||||
|
||||
fahrt = leere_fahrt(start_ts, ende_ts, "manual")
|
||||
fahrt = leere_fahrt(
|
||||
start_ts, ende_ts, "manual", reifen.aktiver_satz(await k.ablage.profil_lesen())
|
||||
)
|
||||
fahrt["art"] = daten.get("art") or "privat"
|
||||
fahrt.update(hand)
|
||||
fahrt["edited_fields"] = sorted(hand)
|
||||
|
||||
Reference in New Issue
Block a user