From 2af5c469d62e6dd95806584e81bc803c403845f8 Mon Sep 17 00:00:00 2001 From: Tobi G Date: Wed, 2 Sep 2026 11:28:37 +0200 Subject: [PATCH] Ortsnamen aus dem Backend, Verbrauchsfaktor aus dem Tankbeleg, Radzaehler ueber Fahrten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- AGENTS.md | 435 +++++++++++++++++- companion-app/src/api/types.ts | 4 + companion-app/src/daten/geokodierung.ts | 50 -- companion-app/src/navigation.ts | 2 +- companion-app/src/screens/Einstellungen.tsx | 2 +- companion-app/src/screens/FahrtDetail.tsx | 50 +- companion-app/src/screens/Fahrten.tsx | 40 +- companion-app/src/screens/MeinAudi.tsx | 2 +- companion-app/src/screens/Reifen.tsx | 21 +- companion-app/src/screens/Uebersicht.tsx | 17 +- companion-app/src/stile/screens.css | 18 +- companion-app/src/symbole.tsx | 16 +- custom_components/audi_dashboard/belege.py | 87 +++- .../audi_dashboard/fahrterkennung.py | 33 +- .../audi_dashboard/frontend/app/bundle.json | 2 +- .../audi_dashboard/frontend/app/bundle.zip | Bin 266230 -> 265967 bytes .../frontend/audi-dashboard-app.js | 152 ++---- .../frontend/audi-dashboard.css | 23 +- .../audi_dashboard/geokodierung.py | 237 ++++++++++ .../audi_dashboard/historienimport.py | 6 +- .../audi_dashboard/koordinator.py | 37 +- .../audi_dashboard/manifest.json | 2 +- custom_components/audi_dashboard/reifen.py | 190 +++++--- custom_components/audi_dashboard/screening.py | 83 +++- .../audi_dashboard/tankerkennung.py | 23 +- .../audi_dashboard/verbrauchskorrektur.py | 368 +++++++++++++++ custom_components/audi_dashboard/verlauf.py | 27 ++ 27 files changed, 1575 insertions(+), 352 deletions(-) create mode 100644 custom_components/audi_dashboard/geokodierung.py create mode 100644 custom_components/audi_dashboard/verbrauchskorrektur.py diff --git a/AGENTS.md b/AGENTS.md index d22c51d..5cc87df 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,12 @@ # AGENTS.md — Project state, review findings, open items, and working rules -**Last updated: 2026-09-01** (Einzelfahrt: Orte aus den Koordinaten, Kleingedrucktes weg, „Min.", +**Last updated: 2026-09-02** (Null heisst unbekannt, Momentanwerte nur fuer +"jetzt", Uebersicht-Symbol vergroessert, `2026.9.2.3`, Abschnitt BN. +Davor: Verbrauchsfaktor aus dem Tankbeleg, `2026.9.1.32`, +Abschnitt BM. Davor: Reifenzaehler ohne Fahrzeugwechsel, „Raeder“ +statt „Reifen“, `2026.9.1.29`, Abschnitt BL. Davor: Ortsnamen aus dem Backend, Verbrauchseichung an +den Betankungen, Wertespalte ausgerichtet, `2026.9.1.27`, Abschnitt BK. +Davor: Einzelfahrt: Orte aus den Koordinaten, Kleingedrucktes weg, „Min.", `2026.9.1.23`, Abschnitt BJ - dazu Orte in der Fahrtenliste ohne Netzabruf. Davor: Strecken gestaffelt, Abschnitt BI. Davor: Audit ueber Panel, App und Backend, Abschnitt BH. Davor: Setup mit gruener Bestaetigung und Erwartungswert je Listenposition, Abschnitt BG. Davor: Rueckblick ohne Nullfahrten, Streckenwahl gemeinsam in `verlauf.py`, @@ -7097,6 +7103,433 @@ Geprüft: 7 Fälle gegen den Schnitt (mit/ohne Straße, benannter Platz, ohne PL `null`). Im Browser nachgesehen: `„Eichstätt → Adelschlag"` in der Liste, volle Anschrift auf der Einzelfahrt. +## BK. Der Ort kommt mit der Fahrt, und der Verbrauch wird an den Betankungen geeicht (2026.9.1.25-.27) + +### Die Wertespalte der Fahrtenliste stand nicht in einer Linie + +Gemeldet: km und l/100 km fluchten nicht, und bei langen Ortsnamen wird der +Abstand zu eng. Gemessen: die rechte Kante der Wertespalte lag je nach Zeile +bei 549px oder 520px, obwohl beide Zeilen gleich breit sind und an derselben +Stelle beginnen. + +Ursache war nicht die Breite, sondern die **Anzahl der Kinder**: eine `.leaf` +hat drei (Label, Werte, Pfeil), und `justify-content: space-between` verteilt +freien Raum ZWISCHEN allen dreien. Die Wertespalte stand damit in der Mitte, +ihre Lage abhaengig von der Laenge des Labels. Mit `flex: 1` am Label bleibt +kein freier Raum uebrig, Werte und Pfeil sitzen buendig rechts. + +`min-width: 0` gehoert dazu, sonst darf ein Flex-Kind nicht unter seine +Inhaltsbreite schrumpfen und `text-overflow` greift nie. + +Nachgewiesen: alle sechs Zeilen der Liste teilen sich jetzt 629/721 statt +zweier verschiedener Kanten. + +**Merkposten:** eine Zeile, deren Werte "mal so, mal so" stehen, ist fast nie +ein Breitenproblem - erst die Kinder zaehlen, dann messen. + +### Ortsnamen loest jetzt das Backend auf + +Bis hierher tat es jede Oberflaeche selbst und legte das Ergebnis in ihren +eigenen Zwischenspeicher. Drei Folgen, alle unnoetig: jedes Geraet fragte +dieselben Koordinaten erneut ab, ein frisch eingerichtetes Telefon zeigte fuer +alte Fahrten wieder "unbekannt", und ein geleerter Browserspeicher warf alles +weg. + +Neu `geokodierung.py` plus ein Screening-Schritt `_orte_screenen()`. Der Ort +steht jetzt in der Fahrt: `start_address`/`end_address` (volle Anschrift) und +`start_stadt`/`end_stadt` (nur der Ortsname, fuer die Liste). + +Nominatims Nutzungsbedingungen bestimmen fast jede Entscheidung darin: eine +Anfrage je Sekunde (`ABSTAND_S = 1.1`), hoechstens acht je Durchlauf +(`PRO_DURCHLAUF`, sonst waere ein Jahresrueckblick genau der Vorratsabruf, um +dessen Unterlassung gebeten wird), ein identifizierbarer User-Agent, und jedes +Ergebnis wird in `orte.json` gemerkt statt erneut abgefragt. + +**Zwei Sperren gegen das Ueberschreiben von Hand Eingetragenem**, absichtlich +beide: der Schritt fuellt nur ein LEERES Feld, und `fahrt_aktualisieren()` +laesst ohnehin jedes Feld in `edited_fields` unberuehrt. Der Ortsname wird +dagegen auch neben einer handischen Anschrift gesetzt - er beschreibt die +Koordinate, nicht die Eingabe. In der Liste sticht die handische Anschrift +trotzdem: beide Oberflaechen pruefen dafuer `edited_fields`. + +Ein Netz- oder Serverfehler wird NICHT gemerkt - sonst stuende eine +voruebergehend gedrosselte Antwort fuer immer als "kein Ort hier". Ein echtes +leeres Ergebnis dagegen schon. + +Beide Oberflaechen fragen jetzt gar nichts mehr ab; `ortAusCache()`, +`stadtAusCache()`, `stadtAusAnschrift()` und `fahrtOrteNachtragen()` sind +ersatzlos entfallen. + +Nachgewiesen: nach zwei Screening-Laeufen tragen 12 von 14 Fahrten einen Ort, +die beiden anderen haben gar keine Koordinaten. Die Liste zeigt +"Eichstaett -> Adelschlag"; damit ist auch der gemeldete Unterschied zwischen +Panel ("Adelschlag") und App ("Adelschlag -> Eichstaett") weg - er kam daher, +dass die beiden verschiedene Zwischenspeicher hatten. + +### Verbrauch: Rohwert, Faktor, Anzeigewert + +Der Anzeigewert einer bereits gespeicherten Fahrt wurde nie neu gerechnet - +die `wert_ab()`-Korrektur vom selben Tag erreichte die Altfahrten also nicht. +Das Auswahlkriterium haengt jetzt am ROHwert, nicht am Anzeigewert: die Fahrt +vom 01.09. ist damit von 11,4 auf **8,7 l/100 km** gewandert, genau auf den +Wert, den die Messung vorhergesagt hatte. + +Drei Felder statt einem: `verbrauch_roh_l_100km` (die reine Messung, damit die +Rechnung wiederholbar bleibt), `verbrauch_faktor`, und `verbrauch_l_100km` als +Produkt - der Wert, den die Oberflaechen anzeigen. Die brauchten deshalb keine +Aenderung. + +### Die Eichung an zwei Betankungen (verbrauchskorrektur.py) + +Vorschlag des Eigentuemers, und er ist besser als meiner: + + Faktor = (Tankstand nach A - Tankstand vor B) / Summe der Fahrtverbraeuche + +**Dafuer braucht es keinen Tankbeleg.** Zaehler und Nenner sind mit demselben +Geber gemessen; ein Massstabsfehler stuende in beiden und kuerzt sich heraus. +Damit taugt auch eine Teilbetankung - die Voll-zu-voll-Bedingung, die mein +erster Ansatz ("Verbrauch zwischen zwei Betankungen") gebraucht haette, +entfaellt. + +Ebenso entfaellt mein Nichtlinearitaets-Vorbehalt: `can_fuel_volume` kommt +schon als Liter, die Kennlinie des Schwimmers hat das Steuergeraet angewandt +(Hinweis des Eigentuemers). Was bleibt, ist die **Daempfung** - der gemeldete +Stand hinkt nach, auf sieben Kilometern anteilig weit mehr als auf +dreihundert. Genau die faengt der Faktor mit ab, weil sie Kraftstoff nur +zwischen Fahrten verschiebt und die Intervallsumme stimmt. + +Der Faktor enthaelt auch Verbrauch, der zu KEINER Fahrt gehoert (Standheizung, +nicht erkannte Fahrt, Rangieren unter 0,1 km). Entscheidung des Eigentuemers: +auf die Fahrten verteilen, damit deren Summe dem entspricht, was im Tank +fehlt - eine einzelne Fahrt traegt dafuer einen Anteil, den sie nicht selbst +verbraucht hat. + +**Schranke 0,7-1,5**, ausserhalb wird verworfen und protokolliert. Sie hat auf +echten Daten sofort gegriffen: das Intervall 15.08. bis 27.08. ergab **5,616** +- 45 l im Tank verbraucht, aber nur 8 l aus zwei Fahrten gerechnet. Das ist +kein Rechenfehler, sondern der Befund, dass in diesen zwoelf Tagen fast keine +Fahrt erkannt wurde (die Umsteckphase des Dongles). Ohne die Schranke haetten +beide Fahrten das Fuenffache angezeigt. + +Gerechnet werden nur Intervalle, in denen noch eine Fahrt ohne Faktor steht - +das Screening laeuft bei jeder Aenderung des Kilometerstands, und jedes +Intervall kostet eine eigene Abfrage des Tankverlaufs. + +Eine Fahrt, die ueber eine Betankung hinweggeht, bekommt keinen Faktor: sie +laesst sich keinem der beiden Intervalle zuordnen. + +**Noch offen:** in den vorhandenen Daten liefert kein Intervall einen +brauchbaren Faktor. Der Mechanismus ist nachgewiesen, seine Eichung nicht - +dafuer braucht es ein Intervall mit vollstaendig erkannten Fahrten. + +## BL. Der Radzaehler summiert Fahrten statt Tacho-Deltas; Raeder statt Reifen (2026.9.1.29) + +### 375.962 km auf Raedern eines Autos mit 61.823 km + +Gemeldet als "der Zaehler rechnet die Gesamtkilometer des Fahrzeugs auf die +Raeder". Nachgesehen: Sommerraeder 375.962 km, Tacho 61.823. + +`fortschreiben()` zaehlte jedes POSITIVE Delta zum zuletzt verarbeiteten +Kilometerstand. Ein Sprung nach unten fiel schon immer heraus - beim Umstecken +des Dongles zwischen zwei Fahrzeugen gibt es aber beide Richtungen, und +61.823 -> 209.177 ist ein positives Delta von 147.354 km. + +**Erster Ansatz, vom Eigentuemer verworfen:** ein Sprungschutz am Delta, der +nicht die Groesse pruefte, sondern die daraus folgende Geschwindigkeit +(`UNPLAUSIBLE_KMH`, wie bei den Fahrten) - noetig, weil der Modulkopf +verspricht, dass Kilometer aus einem HA-Ausfall noch mitzaehlen. Dafuer haette +das Profil den Zeitpunkt des Referenzstands mitfuehren muessen. Gebaut, an +sechs Faellen belegt, dann auf die Rueckfrage "warum so kompliziert? einfach +die Trip distance addieren?" wieder entfernt. + +### Der Radzaehler summiert jetzt Fahrten + +Die Rueckfrage war berechtigt, und die Messung stuetzt sie. Summe der +Fahrtstrecken gegen die Tacho-Spanne im selben Zeitraum, am echten Bestand: + +| Tacho-Spanne | Summe der Fahrten | erfasst | +|---|---|---| +| 61.816 -> 61.823 (7 km) | 6,9 km | 99 % | +| 209.156 -> 209.281 (125 km) | 125,0 km | 100 % | +| 21.188 -> 21.325 (137 km) | 141,0 km | 103 % | +| 20.500 -> 20.580 (80 km) | 205,0 km | 256 % | + +Der Ausreisser stammt aus dem Bestand von vor den Plausibilitaetspruefungen, +nicht aus dem Verfahren. In den sauberen Bereichen trifft die Fahrtsumme den +Tacho auf ein bis drei Prozent - und sie ist genauer, weil die Fahrten seit +der GNSS-Verfeinerung auf 100 m messen statt auf ganze Kilometer (6,9 gegen 7). + +Damit entfallen `referenz_odo_km`, die Delta-Buchhaltung und der eben erst +gebaute Sprungschutz: die Fahrten pruefen Rueckwaertssprunge, unmoegliches +Tempo und Mindestdauer laengst selbst. + +**Die Form hat der Eigentuemer festgelegt**, nachdem ich zuerst einen Sockel +mit Rueckrechnung vorgeschlagen hatte ("nein. Ich moechte: Manuell jederzeit +einen neuen Wert eintragen koennen und jeder gefahrene Kilometer wird einfach +dazuaddiert"). Also: `saetze..km` IST der Stand, von Hand direkt +gesetzt, und jede Fahrt legt ihre Strecke oben drauf. + +Zwei neue Felder an der Fahrt tragen das: + +* `reifensatz` - welcher Satz montiert war. Der Satz steht an der FAHRT, nicht + am Zeitpunkt; ein Satzwechsel braucht deshalb keine Sonderbehandlung. +* `reifen_gezaehlt_km` - wieviel davon schon gutgeschrieben ist. Verfeinert das + Screening die Strecke spaeter (7,0 -> 6,896 km ist real vorgekommen), wird + nur die Differenz nachgetragen. Ohne diesen Merker waere entweder jede + Korrektur verloren oder jede Fahrt doppelt gezaehlt. + +**Der Rueckblick stempelt bewusst KEINEN Radsatz.** Er rekonstruiert +Vergangenes, und das steckt im gespeicherten Radstand laengst drin - ein +erneuter Import schriebe dieselben Kilometer sonst ein zweites Mal auf die +Raeder. Gleiches gilt fuer den Altbestand: Fahrten ohne `reifensatz` zaehlen +nie mit, der gespeicherte Stand bleibt bei der Umstellung also unveraendert. + +**Was das kostet, vom Eigentuemer ausdruecklich akzeptiert:** was die +Fahrterkennung nicht sieht, landet nie auf den Raedern. Der Tacho ist die +Wahrheit des Fahrzeugs und holt sich alles zurueck, eine Fahrtsumme nicht. + +Live nachgewiesen in `audi_ha_test`: von Hand auf 1000 gesetzt -> 1000,0; +Fahrt ueber 12,3 km angelegt -> 1012,3; Screening erneut ausgeloest -> 1012,3 +(keine zweite Gutschrift). Protokollzeilen: `Laufleistung sommer von Hand auf +1000.0 km gesetzt` und `Fahrt t-bb1ca655...: 12.3 km auf sommer +gutgeschrieben, neuer Stand 1012.3 km`. + +**Der falsche Bestand bleibt stehen.** Die 375.962 km korrigiert der +Eigentuemer auf der realen Instanz selbst ueber den Stift, unabhaengig von der +Entwicklung. + +### Drei Oberflaechen-Aenderungen, beide Codebasen + +* **"Termin vereinbart" samt Schalter entfernt** (Wunsch des Eigentuemers). + Damit entfaellt auch der Zusatz "vereinbart" unter dem Datum auf "Mein + Audi". Das Feld `reifen.wechsel.vereinbart` selbst bleibt im Profil stehen - + es zu loeschen waere eine Datenaenderung, keine Anzeigeaenderung. +* **"Reifen" heisst "Raeder"** in allem Sichtbaren: Seitentitel, Kachel auf + "Mein Audi", Kalendereintrag ("Radwechsel auf ..."), Loeschabfrage im Archiv, + Backup-Beschreibung. NICHT umbenannt: Route, Profilschluessel, Dienstnamen, + Funktionsnamen - dieselbe Trennung wie bei "Servicebuch"/"Wartungsplan" + (Abschnitt AB). +* **Markenlogo 20 % groesser**, 16px -> 19,2px, an allen vier Stellen + (`.marke-logo img` und die eine feste Angabe im Panel, `.dm-marke img` und + `.dm-markenlogo` in der App). Gemessen: 19,19px im Browser, drei Logos auf + der Tanken-Seite. + +## BM. Der Verbrauchsfaktor kommt aus dem Tankbeleg, nicht aus dem Geber (2026.9.1.30) + +### Die Formel ist die des Eigentuemers + + Faktor = getankte Liter laut Beleg / Summe der Liter aus den Einzelfahrten + +Genau die Rechnung, die er ohnehin von Hand macht. Die Annahme dahinter ist +seine und traegt: die Ungenauigkeit des Gebers trifft jede Fahrt +gleichermassen, ist also ein Faktor und kein Summand. + +**Meine erste Fassung rechnete anders** - Tankstand nach A minus Tankstand vor +B, geteilt durch die Fahrtsumme. Die braucht keinen Beleg (der Maszstab steht +in Zaehler und Nenner und kuerzt sich heraus) und funktioniert auch bei +Teilbetankung. Sie korrigiert dafuer aber NUR die Verteilung, nicht den +absoluten Maszstab des Gebers. Die Belegvariante kann beides und ist deshalb +die richtige - der Preis ist die Voll-zu-Voll-Bedingung. + +### Drei Bedingungen, jede aus einem konkreten Fehler heraus + +1. **Volltankung an BEIDEN Enden.** Nur dann gilt "eingefuellte Liter = seit + dem letzten Mal verbrauchte Liter". Erkannt am Tankstand eine Minute nach + der Betankung: mindestens `VOLL_ANTEIL` (95 %) des `tankvolumen_liter` aus + dem Profil. Die eine Minute ist die Vorgabe des Eigentuemers; zu kurz zu + greifen ist die harmlose Richtung (der Stand faellt unter die Grenze, es + entsteht kein Faktor), zu lang die gefaehrliche - nach der Abfahrt sinkt der + Stand wieder und eine echte Volltankung saehe nachtraeglich unvoll aus. +2. **Die Liter muessen aus einem Beleg stammen.** Ein automatisch erkannter + Tankvorgang traegt in `liters` den vom GEBER gemessenen Anstieg. Den gegen + die ebenfalls aus dem Geber gerechneten Fahrten zu stellen, ist ein + Zirkelschluss und ergaebe immer ungefaehr 1,0 - der Faktor koennte gar + nichts korrigieren. `beleg_liter()` laesst deshalb nur durch, was einen + `receipt_key` hat, von Hand bearbeitet wurde oder `source == "manual"` + traegt. An fuenf Faellen geprueft. +3. **Die Fahrten muessen die gefahrene Strecke abdecken** (`DECKUNG_MIN`/ + `DECKUNG_MAX`, 90-110 %). Nicht der Faktor wird begrenzt, sondern der + Nenner geprueft - siehe unten. + +### Warum nicht der Faktor begrenzt wird + +Erst stand hier eine feste Schranke 0,7-1,5. Der Eigentuemer hat sie +hinterfragt ("unsere Rechnung ist gut genug"), und die Pruefung der Frage gab +ihm halb recht: + +* **Am Faktor** war sie tatsaechlich am falschen Ort. Die beiden Tore oben + sichern den Zaehler; ein echter Geberfehler liegt bei ein paar Prozent und + waere an 0,7-1,5 nie angeschlagen. Eine groessere, aber echte Abweichung + haette sie dagegen abgeklemmt. +* **Der Nenner** bleibt aber verwundbar: fehlt im Intervall eine Fahrt, ist + die Summe zu klein und der Faktor zu gross - und er multipliziert jede + Fahrt des Zeitraums mit. Genau das war der 5,616-Fall (45 l im Tank, zwei + erkannte Fahrten ueber zwoelf Tage); Beleg und Volltankung haetten dort + beide gestimmt. + +Geprueft wird deshalb die Vollstaendigkeit der Fahrtmenge, an einem Mass, das +beim Radzaehler-Umbau desselben Tages schon belegt wurde: + + Deckung = Summe der Fahrtstrecken / Tacho-Spanne des Intervalls + +Liegt sie bei 90-110 %, gilt der Faktor - ohne obere oder untere Klemme. +Sonst wird das Intervall uebersprungen und protokolliert. Die Grenze gilt in +BEIDE Richtungen: 256 % (Altbestand mit doppelten Fahrten) ist genauso ein +Zeichen fuer einen unbrauchbaren Nenner wie 15 %. + +An sechs Faellen mit den echten Zahlen geprueft, `_deckung()` direkt +aufgerufen: 100 % / 99 % / 103 % angewandt, 256 % und 15 % verworfen, ein +Rueckwaertssprung (Fahrzeugwechsel) als "nicht bestimmbar" behandelt statt +als Deckung 0. + +### Standlauf verzerrt den Faktor nicht + +Frage des Eigentuemers, und die Antwort ist beruhigend: laeuft der Motor im +Stand bei eingeschalteter Zuendung, bleibt die Fahrt offen. Der Verbrauch +steht damit in der Summe der Einzelfahrten UND in der getankten Menge - er +kuerzt sich heraus. Die betroffene Fahrt zeigt zu Recht einen hohen Verbrauch. + +Verzerrend ist nur Verbrauch OHNE offene Fahrt (Standheizung bei Zuendung +aus): der fehlt im Nenner und verteilt sich ueber den Faktor auf alle Fahrten +des Zeitraums - genau das, was der Eigentuemer bewusst so wollte. + +### Zwei Ausloeser, jeder mit eigenem Grund + +Der Eigentuemer hat den wunden Punkt benannt: der Faktor steht erst +rueckwirkend fest, eine Korrektur "nach einer Fahrt" kann nicht funktionieren. +Stimmt - und die Rechnung hielt sich schon daran (die Schleife laeuft ueber +PAARE aufeinanderfolgender Tankvorgaenge, das laufende Intervall hat kein +Gegenstueck). Die Frage legte aber eine echte Luecke frei: **ein Tankvorgang +loeste gar nichts aus.** Der einzige Aufruf hing am Screening, gerechnet wurde +also erst bei der naechsten Fahrt. + +| Ausloeser | wofuer | +|---|---| +| `koordinator.tankvorgang_nachbereiten()` | das Intervall schliesst sich - hier entsteht der Faktor | +| `screening.durchfuehren()` | eine Fahrt im Intervall bekommt ihren Rohwert erst spaeter | + +`tankvorgang_nachbereiten()` ersetzt `tankvorgaenge_veroeffentlichen()` an +allen sechs Schreibstellen (`belege.py` 4x, `tankerkennung.py`, +`historienimport.py`). Der 60-Sekunden-Takt ruft bewusst weiter nur +`tankvorgaenge_veroeffentlichen()`: dort aendert sich nichts, was einen neuen +Faktor ergeben koennte. +Gerechnet werden nur Intervalle, in denen noch eine Fahrt ohne Faktor steht - +sonst liefen dieselben Verlaufsabfragen bei jedem Fahrtende erneut. Die teure +Voll-Pruefung kommt zuletzt, nach den billigen Ausschluessen. + +**Noch nicht belegt:** in den Testdaten gibt es keinen Tankvorgang mit +Beleg-Litern, also auch kein gerechnetes Intervall. Der Mechanismus ist +geprueft, seine Anwendung auf echte Zahlen nicht. + +### Uebersicht/Zuletzt zeigt Ort -> Ort + +Die Zeile "Letzte Fahrt" zeigte die vollen Anschriften. Sie benutzt jetzt +dieselbe `strecke()` wie die Fahrtenliste - eine Quelle, damit die beiden +nicht auseinanderlaufen koennen; in der App dafuer aus `Fahrten.tsx` +exportiert statt ein zweites Mal gebaut. Dabei fielen in der App zwei +Abweichungen zum Panel auf und sind mitgezogen: die Strecke lief noch ueber +`de()` statt `streckeText()` (also ohne die gestaffelte Aufloesung), und im +Wertzusatz stand das Statuswort, das der Eigentuemer aus der Liste hatte +entfernen lassen - jetzt der Verbrauch wie im Panel. + +## BN. Null heisst unbekannt, und der Momentanwert gehoert nur zu "jetzt" (2026.9.2.1-.3) + +### Der Kilometerstand darf fehlen duerfen + +Wunsch des Eigentuemers: ein Weg, einen Tankvorgang ohne Kilometerstand +einzutragen - "eine 0 waere hilfreich, bzw. ein leeres Feld wenn alle Zahlen +geloescht werden". + +Beides geht jetzt, und beides landet als **None** im Datensatz, nicht als 0. +Das ist der eigentliche Punkt: **sechs Stellen** lesen `odometer_km` und +behandeln ausschliesslich None als unbekannt. Eine gespeicherte 0 waere fuer +sie ein Fahrzeug mit Tachostand null - `distanz_seit_letzter_tankung()` haette +den gesamten Tachostand als "Strecke seit der letzten Tankung" geliefert, und +der Langzeitverbrauch rechnete gegen eine Spanne, die es nie gab. + +`verlauf.als_kilometerstand()` faengt das an der Eingabe ab (0, leer, negativ, +unlesbar -> None). Eine Sonderbehandlung an sechs Lesestellen waere sechsmal +die Gelegenheit gewesen, sie zu vergessen. An acht Faellen geprueft. + +Beide Formulare senden bei geleertem Feld ohnehin schon `null` - geprueft, nicht +angenommen (`kmFeld === "" ? null : ...` im Panel, `Number.isFinite(kmZahl) && +km ? ... : null` in der App). + +### Ein Momentanwert gehoert zu dem Moment, in dem er gemessen wurde + +Beim Pruefen fiel ein aelterer Fehler auf, den die 0 sonst wirkungslos gemacht +haette: `tankvorgang_manuell()` ersetzte einen fehlenden Kilometerstand durch +den **aktuellen** Tacho - unabhaengig vom eingetragenen Zeitpunkt. Fuer eine +nachgetragene Tankung von vorgestern war das doppelt falsch: die gefahrene +Distanz wurde gegen einen zu hohen Stand gerechnet, und die neue +Datumspruefung haette das Intervall verworfen. + +`_km_aus_sensor_wenn_jetzt()` setzt den Sensorwert nur noch ein, wenn der +eingetragene Zeitpunkt hoechstens `SENSOR_ERSATZ_FENSTER` (2 h) von jetzt +entfernt liegt. Dasselbe gilt fuer `distance_km`: `distanz_seit_tankung()` +nimmt `TANK_DISTANZ_SENSOR` nur noch mit `jetzt=True` und faellt sonst auf die +Kilometerstand-Subtraktion zurueck, die zeitunabhaengig ist. + +Live nachgewiesen ueber den echten Dienst, beide Faelle in einem Durchgang: + +| Zeitpunkt | `km` eingegeben | gespeicherter Kilometerstand | +|---|---|---| +| jetzt | 0 (unbekannt) | **61.823** - vom Tacho, Normalfall ohne Tippen | +| vorgestern | 0 (unbekannt) | **leer** - der Tacho von heute passt nicht dazu | + +### Datum und Kilometerstand muessen zusammenpassen + +Die Fahrten werden ueber die ZEIT zugeordnet, nicht ueber den Tacho. Ein +falsch datierter Tankvorgang laesst die Liter deshalb auf den falschen Fahrten +landen - und die Deckungspruefung merkt es nicht, weil sie den Tacho zu +denselben verschobenen Zeitpunkten liest. + +`_datum_passt()` vergleicht deshalb den eigenen `odometer_km` des +Tankvorgangs mit dem Tacho zu seinem Zeitstempel, Toleranz +`ODOMETER_TOLERANZ_KM = 5.0` (Vorgabe des Eigentuemers). Ein automatisch +erkannter Tankvorgang besteht sie zwangslaeufig - beide Werte stammen aus +demselben Datensatz. Ohne Kilometerstand (die 0 von oben) gibt es nichts zu +vergleichen, dann gilt der Zeitpunkt wie eingetragen; der Waechter faellt fuer +diesen Tankvorgang aus, was unvermeidlich und immer noch besser ist, als eine +erfundene Zahl zu verlangen. An sechs Faellen geprueft. + +### Getippte Liter zaehlen als Beleg + +`beleg_liter()` liess nur `receipt_key`, `source == "manual"` oder einen +Vermerk in `edited_fields` durch. Ein automatisch erkannter Tankvorgang, dessen +Liter der Nutzer nachtippt, hatte nichts davon - die Zahl galt weiter als +Geberwert und wurde verworfen. `belege.tankvorgang_aktualisieren()` traegt +jetzt `"liters"` in `edited_fields` ein, wenn Liter hereinkommen. + +Das ist zuverlaessig, weil die automatische Erkennung Tankvorgaenge nur +ANLEGT und nie aktualisiert: was durch diese Funktion an Litern kommt, stammt +konstruktionsbedingt von einem Menschen (Formular oder bearbeitetes CSV). + +Nebenwirkung, bewusst: `edited_fields` schuetzt das Feld vor der Automatik. +Wird spaeter doch ein PDF zu demselben Tankvorgang hochgeladen, bleibt die +getippte Zahl stehen. + +Live nachgewiesen: getippte Liter akzeptiert, Korrektur lief in derselben +Millisekunde wie "Tankvorgang aktualisiert" (nicht erst bei der naechsten +Fahrt), und die Deckungspruefung verwarf das Intervall korrekt mit "0 % der +gefahrenen Strecke" - dort liegt ein Fahrzeugwechsel. + +### Das Uebersicht-Symbol war das kleinste der fuenf + +Gemeldet, live per `getBBox()` nachgemessen: 18,0 x 10,3 von 24 - **43 %** der +Hoehe, waehrend die vier Nachbarn zwischen 65 % (Tanken) und 89 % (Fahrten) +liegen. + +Auf volle Rasterbreite gezogen (Faktor 1,33, `stroke-width` 1,125 als +Ausgleich, damit die Strichstaerke gerendert wieder 1,5 betraegt): jetzt +23,9 x 13,7, also **57 %** - die Breite entspricht exakt "Mein Audi". + +**Bewusst nicht weiter:** das Symbol ist ein Halbkreis und damit bauartbedingt +halb so hoch wie breit. Fuer 72 % Hoehe braeuchte es Faktor 1,68 und waere mit +30 Einheiten breiter als das Raster. Wirklich gleich hoch wird es nur durch +Neuzeichnen des Bogens mit groesserem Winkel - dem Eigentuemer angeboten, +nicht unaufgefordert gemacht. + ## Working conventions (observed — keep them) - German is the project language: identifiers, comments, commits, UI texts. Exceptions: diff --git a/companion-app/src/api/types.ts b/companion-app/src/api/types.ts index e5eeaab..8ae3cc9 100644 --- a/companion-app/src/api/types.ts +++ b/companion-app/src/api/types.ts @@ -59,6 +59,10 @@ export interface Fahrt { end_lon?: number | null; start_address?: string | null; end_address?: string | null; + /* Nur der Ortsname, vom Backend aufgeloest (geokodierung.py). Die Liste + hat je Fahrt eine Zeile - zwei volle Anschriften passen dort nicht. */ + start_stadt?: string | null; + end_stadt?: string | null; route?: [number, number][] | null; /** Näherung aus der Literstand-Differenz (TANK_LITER_SENSOR) ÷ Distanz, kein * vom Fahrzeug selbst für diese eine Fahrt gemeldeter Wert - siehe diff --git a/companion-app/src/daten/geokodierung.ts b/companion-app/src/daten/geokodierung.ts index 59b89ff..a643aae 100644 --- a/companion-app/src/daten/geokodierung.ts +++ b/companion-app/src/daten/geokodierung.ts @@ -90,54 +90,6 @@ function cacheSchreiben(suche: string, treffer: Koordinate | null): void { * vierhundert Anfragen fuer einen Blick auf die Liste. * * Schluessel wie bei der Aufloesung: drei Nachkommastellen (~110 m). */ -/** Der Ortsname allein, fuer die Fahrtenliste. - * - * In der Liste steht eine Fahrt in einer Zeile neben Datum, Art, Strecke und - * Verbrauch. Zwei volle Anschriften passen dort nicht - "Schottenau, 85072 - * Eichstaett -> Am Anger 7a, 85111 Adelschlag" ist laenger als der Rest der - * Zeile zusammen. Auf der Einzelfahrt bleibt die vollstaendige Anschrift. - * - * Der Ort wird beim Aufloesen SEPARAT gemerkt (Schluessel "ort:"), nicht - * nachtraeglich aus der Anschrift geschnitten. Das Zerlegen der eigenen - * Ausgabe waere fast immer richtig und in einem Fall falsch: faellt Nominatim - * auf display_name zurueck, steht hinter dem letzten Komma das LAND. Dann - * stuende in der Liste "Deutschland -> Deutschland". */ -/** Der Ortsname aus einer bereits gespeicherten Anschrift. - * - * Rueckfall fuer alles, was VOR dem Merken des Ortsnamens aufgeloest wurde: - * dort liegt nur die volle Anschrift, und ein neuer Netzabruf, nur um den Ort - * zu erfahren, waere Verschwendung. - * - * Geschnitten wird ausschliesslich, wenn hinter dem letzten Komma eine - * Postleitzahl steht - unser eigenes Format ist ", ". - * Faellt Nominatim auf display_name zurueck, fehlt die PLZ und hinter dem - * letzten Komma stuende das LAND; dann lieber die volle Anschrift zeigen als - * "Deutschland". */ -export function stadtAusAnschrift(anschrift: string | null | undefined): string | null { - if (!anschrift) return null - const teil = String(anschrift).split(", ").pop()?.trim() ?? "" - const treffer = teil.match(/^\d{4,5}\s+(.+)$/) - return treffer && treffer[1] ? treffer[1].trim() : null -} - -export function stadtAusCache( - lat: number | null | undefined, - lon: number | null | undefined, -): string | null { - if (lat === null || lat === undefined || lon === null || lon === undefined) return null - const wert = cacheLesen()[`ort:${lat.toFixed(3)},${lon.toFixed(3)}`] - return typeof wert === "string" && wert ? wert : null -} - -export function ortAusCache( - lat: number | null | undefined, - lon: number | null | undefined, -): string | null { - if (lat === null || lat === undefined || lon === null || lon === undefined) return null - const wert = cacheLesen()[`rev:${lat.toFixed(3)},${lon.toFixed(3)}`] - return typeof wert === "string" ? wert : null -} - export async function koordinatenAufloesen(lat: number, lon: number): Promise { const schluessel = `rev:${lat.toFixed(3)},${lon.toFixed(3)}` const cache = cacheLesen() @@ -173,8 +125,6 @@ export async function koordinatenAufloesen(lat: number, lon: number): Promise = { service: "Service", werkstatt: "Autohaus", sbuch: "Eintrag", - reifen: "Reifen", + reifen: "Räder", vers: "Versicherung/Steuer", beitrag: "Beitrag anpassen", vertrag: "Vertrag", diff --git a/companion-app/src/screens/Einstellungen.tsx b/companion-app/src/screens/Einstellungen.tsx index a974ce8..01b1ec5 100644 --- a/companion-app/src/screens/Einstellungen.tsx +++ b/companion-app/src/screens/Einstellungen.tsx @@ -535,7 +535,7 @@ export function Einstellungen({ Fahrzeugprofil

Alles Fahrzeugspezifische liegt in einer einzigen Datei: Stammdaten, technische Daten, - Ausstattung, Reifen, Versicherung, Steuer und Werkstatt. Fahrten, Tankvorgänge und der + Ausstattung, Räder, Versicherung, Steuer und Werkstatt. Fahrten, Tankvorgänge und der Wartungsplan lassen sich einzeln als CSV sichern und bearbeitet wieder einspielen — eine Zeile mit bekannter ID aktualisiert nur ihre eigenen Spalten, alles andere bleibt unangetastet. diff --git a/companion-app/src/screens/FahrtDetail.tsx b/companion-app/src/screens/FahrtDetail.tsx index 779a16a..543a6d0 100644 --- a/companion-app/src/screens/FahrtDetail.tsx +++ b/companion-app/src/screens/FahrtDetail.tsx @@ -15,7 +15,6 @@ import { ActionButton, Feld, Fig, Pill, Tile } from "@audi-dash/ui" import type { Fahrt } from "../api" import { useDaten } from "../daten/DatenKontext" -import { koordinatenAufloesen } from "../daten/geokodierung" import { datum, dauer, de, streckeTeile, uhrzeit } from "../format" import type { SeitenName } from "../navigation" import { Leerzustand, Wertzeile, Werteliste, bestaetigen } from "./bausteine" @@ -42,50 +41,23 @@ export function FahrtDetail({ id, geheZu }: { id: string | undefined; geheZu: (n // render()). const [artVorgriff, setzeArtVorgriff] = useState<"privat" | "arbeitsweg" | null>(null) - /* Ortsangaben zu Start und Ziel. + /* Ortsangaben zu Start und Ziel - beide kommen mit der Fahrt. - Das Backend fuellt start_address/end_address NIE von selbst - sie stehen in - HANDFELDER und kommen nur aus einer von Hand angelegten oder bearbeiteten - Fahrt. Die Koordinaten dagegen traegt das Screening ein. Deshalb stand hier - bisher "unbekannt", obwohl die Position bekannt war (vom Eigentuemer - gemeldet, 01.09.2026). - - Aufgeloest wird erst beim Oeffnen der Fahrt und ueber denselben Cache wie - die Standortansicht - ein Abruf je Ort, danach nie wieder. Ein Vorratsabruf - fuer alle Fahrten der Liste waere genau das, worum Nominatim in seinen - Nutzungsbedingungen bittet, es nicht zu tun. */ - const [orte, setzeOrte] = useState<{ start: string | null; ziel: string | null }>({ - start: null, - ziel: null, - }) - const startLat = fahrt?.start_lat - const startLon = fahrt?.start_lon - const endLat = fahrt?.end_lat - const endLon = fahrt?.end_lon - useEffect(() => { - let abgemeldet = false - setzeOrte({ start: null, ziel: null }) - const holen = async (lat?: number | null, lon?: number | null) => - lat == null || lon == null ? null : await koordinatenAufloesen(lat, lon) - void (async () => { - const start = await holen(startLat, startLon) - if (!abgemeldet) setzeOrte((o) => ({ ...o, start })) - const ziel = await holen(endLat, endLon) - if (!abgemeldet) setzeOrte((o) => ({ ...o, ziel })) - })() - return () => { - abgemeldet = true - } - }, [startLat, startLon, endLat, endLon]) + Bis zum 01.09.2026 loeste dieser Bildschirm die Koordinaten selbst auf und + legte sie in seinen eigenen Zwischenspeicher. Jetzt macht das Backend es + einmal (geokodierung.py) und speichert das Ergebnis in der Fahrt: jedes + Geraet zeigt denselben Ort, ein frisch eingerichtetes Telefon zeigt ihn + sofort, und ein geleerter Speicher wirft nichts weg. + "wird ermittelt …" heisst: die Koordinaten stehen, der Ort noch nicht - + das naechste Screening traegt ihn nach. */ const ortText = ( adresse: string | null | undefined, - aufgeloest: string | null, lat?: number | null, lon?: number | null, - ) => adresse ?? aufgeloest ?? (lat == null || lon == null ? "unbekannt" : "wird ermittelt …") - const startOrt = ortText(fahrt?.start_address, orte.start, startLat, startLon) - const zielOrt = ortText(fahrt?.end_address, orte.ziel, endLat, endLon) + ) => adresse ?? (lat == null || lon == null ? "unbekannt" : "wird ermittelt …") + const startOrt = ortText(fahrt?.start_address, fahrt?.start_lat, fahrt?.start_lon) + const zielOrt = ortText(fahrt?.end_address, fahrt?.end_lat, fahrt?.end_lon) // Faellt der Vorgriff mit dem echten Wert zusammen, wird er ueberfluessig. // Bleibt er stehen, wuerde eine spaetere Aenderung von aussen (Panel, diff --git a/companion-app/src/screens/Fahrten.tsx b/companion-app/src/screens/Fahrten.tsx index f03092a..6ddb56e 100644 --- a/companion-app/src/screens/Fahrten.tsx +++ b/companion-app/src/screens/Fahrten.tsx @@ -9,7 +9,6 @@ import { Accordion, ActionButton, Feld, Tile } from "@audi-dash/ui" import { useDaten } from "../daten/DatenKontext" import { nachJahrUndMonat } from "../daten/statistik" -import { ortAusCache, stadtAusAnschrift, stadtAusCache } from "../daten/geokodierung" import { datum, de, streckeText, summe } from "../format" import type { SeitenName } from "../navigation" import { Blattzeile, Leerzustand } from "./bausteine" @@ -21,31 +20,28 @@ import { Zeilenmenue } from "./Zeilenmenue" "Fahrt ohne Ortsangabe". Trug bisher in der Liste hier gar nichts bei (nur auf der Einzelfahrt-Seite sichtbar) - im Panel ist das die führende Information jeder Fahrtzeile. */ -function strecke(fahrt: { +export function strecke(fahrt: { start_address?: string | null end_address?: string | null - start_lat?: number | null - start_lon?: number | null - end_lat?: number | null - end_lon?: number | null + start_stadt?: string | null + end_stadt?: string | null + edited_fields?: string[] | null }): string | null { - // Was die Einzelfahrt schon einmal aufgeloest hat, zeigt die Liste umsonst - // mit - siehe ortAusCache(), kein zusaetzlicher Abruf. - // Ortsname bevorzugt; ohne ihn die volle Anschrift, damit eine vor dieser - // Aenderung aufgeloeste Fahrt nicht ploetzlich wieder ortlos dasteht. - const ortsname = ( - adresse: string | null | undefined, - lat: number | null | undefined, - lon: number | null | undefined, - ): string | null => { - if (adresse) return adresse - const gemerkt = stadtAusCache(lat, lon) - if (gemerkt) return gemerkt - const voll = ortAusCache(lat, lon) - return stadtAusAnschrift(voll) ?? voll + // Der Ortsname kommt mit der Fahrt (start_stadt), aufgeloest im Backend - + // kein Abruf, kein Zwischenspeicher, auf jedem Geraet derselbe Wert. + // + // Eine VON HAND eingetragene Anschrift sticht ihn: wer "Zuhause" eintraegt, + // will das auch in der Liste lesen und nicht den Ortsnamen dazu. Erkennbar + // an edited_fields - genau dafuer fuehrt das Backend die Liste. + const handisch = new Set(fahrt.edited_fields ?? []) + const ortsname = (seite: "start" | "end"): string | null => { + const adresse = seite === "start" ? fahrt.start_address : fahrt.end_address + if (adresse && handisch.has(`${seite}_address`)) return adresse + const stadt = seite === "start" ? fahrt.start_stadt : fahrt.end_stadt + return stadt ?? adresse ?? null } - const a = ortsname(fahrt.start_address, fahrt.start_lat, fahrt.start_lon) - const b = ortsname(fahrt.end_address, fahrt.end_lat, fahrt.end_lon) + const a = ortsname("start") + const b = ortsname("end") if (!a && !b) return "Fahrt ohne Ortsangabe" if (!b) return a ?? null if (!a) return b diff --git a/companion-app/src/screens/MeinAudi.tsx b/companion-app/src/screens/MeinAudi.tsx index 5237aa0..ff4fa6a 100644 --- a/companion-app/src/screens/MeinAudi.tsx +++ b/companion-app/src/screens/MeinAudi.tsx @@ -233,7 +233,7 @@ export function MeinAudi({ geheZu }: { geheZu: (name: SeitenName, id?: string) = geheZu("reifen")}> - Reifen + Räder diff --git a/companion-app/src/screens/Reifen.tsx b/companion-app/src/screens/Reifen.tsx index 2976ba5..c3a994b 100644 --- a/companion-app/src/screens/Reifen.tsx +++ b/companion-app/src/screens/Reifen.tsx @@ -9,7 +9,7 @@ import { useState } from "react" -import { Accordion, ActionButton, Feld, IconButton, Switch, Tile } from "@audi-dash/ui" +import { Accordion, ActionButton, Feld, IconButton, Tile } from "@audi-dash/ui" import { DIENST_DOMAIN } from "../api" import { useDaten } from "../daten/DatenKontext" @@ -30,17 +30,15 @@ export function Reifen() { const [kmOffen, setzeKmOffen] = useState(null) const [kmEntwurf, setzeKmEntwurf] = useState("") const [wechselDatum, setzeWechselDatum] = useState(null) - const [wechselVereinbart, setzeWechselVereinbart] = useState(null) if (!fahrzeug) return null const aktiv = fahrzeug.reifen.aktiv - const wechsel = fahrzeug.reifen.wechsel as { datum?: string; vereinbart?: boolean } + const wechsel = fahrzeug.reifen.wechsel as { datum?: string } // Lokaler Entwurf, solange der Nutzer nichts geändert hat - Panel- - // Verhalten: Datum/Häkchen speichern erst beim Klick auf "In den Kalender - // übernehmen" (data-ics="reifen" liest #rfDat/#rfOk erst dort aus). + // Verhalten: das Datum wird erst beim Klick auf "In den Kalender + // übernehmen" gespeichert (data-ics="reifen" liest #rfDat erst dort aus). const wechselDatumAnzeige = wechselDatum ?? wechsel.datum ?? "" - const wechselVereinbartAnzeige = wechselVereinbart ?? wechsel.vereinbart ?? false // Deckungsgleich mit data-nmspeichern im Panel: normales Profilfeld, kein // eigener Dienst (anders als der Kilometerstand unten). @@ -56,7 +54,7 @@ export function Reifen() { await profilSpeichern({ fahrzeug: { ...fahrzeug, - reifen: { ...fahrzeug.reifen, wechsel: { ...wechsel, datum: wechselDatumAnzeige, vereinbart: wechselVereinbartAnzeige } }, + reifen: { ...fahrzeug.reifen, wechsel: { ...wechsel, datum: wechselDatumAnzeige } }, }, }) const ziel = aktiv === "Sommer" ? "Winter" : "Sommer" @@ -303,16 +301,9 @@ export function Reifen() { Wechseltermin - + - - setzeWechselVereinbart(checked)} - aria-label="Termin vereinbart" - /> -

void kalenderUebernehmen()} disabled={!wechselDatumAnzeige}> In den Kalender übernehmen diff --git a/companion-app/src/screens/Uebersicht.tsx b/companion-app/src/screens/Uebersicht.tsx index 88fa034..bc4bef5 100644 --- a/companion-app/src/screens/Uebersicht.tsx +++ b/companion-app/src/screens/Uebersicht.tsx @@ -10,10 +10,13 @@ import { Fig, ProgressBar, StatusRow, Tile } from "@audi-dash/ui" import { useDaten } from "../daten/DatenKontext" import { naechsterService } from "../daten/service" -import { datum, de, deOderStrich, eur } from "../format" +import { datum, de, deOderStrich, eur, streckeText } from "../format" import type { SeitenName } from "../navigation" import { BILDPLAETZE, bildInfo } from "./bilder" import { Blattzeile, Leerzustand } from "./bausteine" +// Dieselbe Ortsangabe wie in der Fahrtenliste - eine Quelle, damit "Zuletzt" +// und die Liste nicht auseinanderlaufen koennen. +import { strecke } from "./Fahrten" import { Bild } from "./Bild" import type { ServicebuchEintrag } from "./Service" import { StandortVorschau } from "./Standort" @@ -236,13 +239,13 @@ export function Uebersicht({ geheZu }: { geheZu: (name: SeitenName, id?: string) {letzteFahrt && ( geheZu("trip", letzteFahrt.trip_id)} letzte={!letzteTankung} /> diff --git a/companion-app/src/stile/screens.css b/companion-app/src/stile/screens.css index 562f489..e4c8409 100644 --- a/companion-app/src/stile/screens.css +++ b/companion-app/src/stile/screens.css @@ -1003,8 +1003,12 @@ button.dm-blatt:active { `1 1 auto` (dem Wert, den das Panel nur für die Zuletzt-Kachel setzt) brach „Fahrt ohne Ortsangabe" hier auf zwei Zeilen um, obwohl es im Panel einzeilig steht. */ +/* flex:1 statt 0 1: das Label nimmt den freien Platz, damit space-between + keinen Raum ZWISCHEN Label, Werten und Pfeil verteilt - sonst stuende die + Wertespalte in der Mitte und ihre Lage haenge an der Laenge des Ortsnamens + (im Panel gemessen: 549px gegen 520px rechte Kante). */ .dm-blatt__k { - flex: 0 1 auto; + flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; @@ -1013,14 +1017,16 @@ button.dm-blatt:active { line-height: 1.35; color: var(--fg); } +/* Ein Flex-Kind darf nur mit min-width:0 unter seine Inhaltsbreite schrumpfen - + ohne das greift text-overflow nie und ein langer Ortsname draengt die Werte. */ +.dm-blatt__k > * { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Feste Mindestbreite, damit Strecke und Verbrauch ueber alle Zeilen hinweg in einer Spalte stehen. Ohne sie waechst der Kasten mit dem Inhalt - im Panel gemessen 86px bei "11,4 l/100 km" gegen 37px bei einer Zeile ohne Werte, und die Zahlen standen entsprechend versetzt. */ .dm-blatt__v { - flex: 0 0 auto; - min-width: 104px; + flex: 0 0 104px; display: flex; flex-direction: column; gap: 3px; @@ -1714,8 +1720,8 @@ button.dm-listenzeile { } .dm-marke img { - /* Auf Zeilenhoehe, siehe .dm-markenlogo weiter unten. */ - height: 16px; + /* Siehe .dm-markenlogo weiter unten. */ + height: 19.2px; width: auto; } @@ -1779,7 +1785,7 @@ button.dm-listenzeile { 16px, siehe .ads-feld label. Mit 14px wirkte es neben "SmartDeal aktiv" zu klein (gemeldet vom Eigentuemer, 2026-08-31). */ .dm-markenlogo { - height: 16px; + height: 19.2px; width: auto; vertical-align: middle; } diff --git a/companion-app/src/symbole.tsx b/companion-app/src/symbole.tsx index 85c1cae..9706ee0 100644 --- a/companion-app/src/symbole.tsx +++ b/companion-app/src/symbole.tsx @@ -44,7 +44,21 @@ export function SymbolUebersicht({ groesse }: SymbolProps) { + /* Auf die volle Rasterbreite gezogen. Live gemessen (getBBox, 01.09./02.09.2026) + fuellte das Symbol nur 18,0 x 10,3 von 24 - 43 % der Hoehe, waehrend die + vier Nachbarn zwischen 65 % (Tanken) und 89 % (Fahrten) liegen. In einer + Reihe liest sich das als "zu klein", und genau so wurde es gemeldet. + + Es ist bewusst NUR ein Faktor 1,33 (18 -> 24 Breite, Hoehe 10,3 -> 13,7) + und keine Angleichung auf 72 %: das Symbol ist ein Halbkreis, also + bauartbedingt halb so hoch wie breit. Fuer 72 % Hoehe braeuchte es Faktor + 1,68 und waere mit 30 Einheiten breiter als das Raster. Wer es wirklich + gleich hoch will, muss den Bogen neu zeichnen (groesserer Winkel als 180 + Grad), nicht skalieren. + + stroke-width am gleicht die Skalierung aus: 1,5 / 1,33 = 1,125, damit + die Strichstaerke gerendert wieder 1,5 betraegt wie bei den Nachbarn. */ + diff --git a/custom_components/audi_dashboard/belege.py b/custom_components/audi_dashboard/belege.py index 081f124..3ab1f97 100644 --- a/custom_components/audi_dashboard/belege.py +++ b/custom_components/audi_dashboard/belege.py @@ -36,7 +36,7 @@ from . import shell_beleg_parser from . import tankerkennung from .tankerkennung import leerer_tankvorgang from .veroeffentlichung import zustand_oder_none -from .verlauf import zeit_normalisiert +from .verlauf import als_kilometerstand, zeit_normalisiert if TYPE_CHECKING: from .koordinator import Koordinator @@ -169,7 +169,7 @@ async def _nachtragen( aenderungen = dict(beleg_felder) aenderungen["status"] = "vollständig" if await k.ablage.tankvorgang_aktualisieren(tank_id, aenderungen): - await k.tankvorgaenge_veroeffentlichen() + await k.tankvorgang_nachbereiten() await k.beleg_ergebnis_veroeffentlichen({"erfolg": True, "tank_id": tank_id}) _LOGGER.info("Beleg %s in Tankvorgang %s nachgetragen", receipt_key, tank_id) else: @@ -192,17 +192,23 @@ async def tankvorgang_manuell(k: Koordinator, daten: dict) -> None: _LOGGER.warning("liter und kosten sind Pflichtfelder") return - km = daten.get("km") - odometer_km = km if km is not None else _km_aus_sensor(k) + ts_roh = daten.get("ts") + ts = zeit_normalisiert(ts_roh) if ts_roh else datetime.datetime.now(datetime.UTC) + + # Eine 0 oder ein geleertes Feld heissen "kenne ich nicht" - siehe + # als_kilometerstand(). + odometer_km = als_kilometerstand(daten.get("km")) + if odometer_km is None: + odometer_km = _km_aus_sensor_wenn_jetzt(k, ts) distanz = daten.get("distanz") if distanz is None: # Vorschlag aus TANK_DISTANZ_SENSOR oder, ohne ihn, der Differenz zum # letzten Tankvorgang - aber wie odometer_km selbst frei # überschreibbar, ein übergebener Wert hat deshalb immer Vorrang. - distanz = await tankerkennung.distanz_seit_tankung(k, odometer_km) + distanz = await tankerkennung.distanz_seit_tankung( + k, odometer_km, jetzt=_ist_jetzt(ts) + ) - ts_roh = daten.get("ts") - ts = zeit_normalisiert(ts_roh) if ts_roh else datetime.datetime.now(datetime.UTC) receipt_key = daten.get("receipt_key") tankvorgang = leerer_tankvorgang( ts.isoformat(), @@ -223,10 +229,15 @@ async def tankvorgang_manuell(k: Koordinator, daten: dict) -> None: }) await k.ablage.tankvorgang_anhaengen(tankvorgang) - await k.tankvorgaenge_veroeffentlichen() + await k.tankvorgang_nachbereiten() _LOGGER.info("Tankvorgang %s angelegt", tankvorgang["tank_id"]) +# Wie nah der eingetragene Zeitpunkt an "jetzt" liegen muss, damit der +# aktuelle Tachostand als Ersatz taugt. +SENSOR_ERSATZ_FENSTER = datetime.timedelta(hours=2) + + def _km_aus_sensor(k: Koordinator) -> float | None: wert = zustand_oder_none(k.hass, k.zuordnung.werte.KM_SENSOR) try: @@ -235,6 +246,39 @@ def _km_aus_sensor(k: Koordinator) -> float | None: return None +def _ist_jetzt(ts: datetime.datetime | None) -> bool: + """Liegt der eingetragene Zeitpunkt nah genug an jetzt, dass die + Momentanwerte der Sensoren zu ihm passen?""" + if ts is None: + return False + jetzt = datetime.datetime.now(datetime.UTC) + return abs((jetzt - ts).total_seconds()) <= SENSOR_ERSATZ_FENSTER.total_seconds() + + +def _km_aus_sensor_wenn_jetzt( + k: Koordinator, ts: datetime.datetime | None +) -> float | None: + """Der aktuelle Tachostand - aber nur fuer einen Tankvorgang von jetzt. + + Der Sensor kennt genau einen Wert: den von diesem Augenblick. Fuer eine + Tankung, die gerade passiert ist, ist das der richtige Ersatz und der + Normalfall - der Nutzer muss nichts eintippen. + + Fuer eine nachgetragene Tankung von vorgestern ist es der falsche Wert, + und er richtet zweifachen Schaden an: die gefahrene Distanz wird gegen + einen zu hohen Stand gerechnet, und die Datumspruefung der + Verbrauchskorrektur verwirft das Intervall, weil der gespeicherte Stand + nicht zum Tacho des eingetragenen Zeitpunkts passt. Dann lieber gar kein + Kilometerstand - genau das, was eine 0 im Formular ausdruecken soll.""" + if not _ist_jetzt(ts): + _LOGGER.info( + "Tankvorgang auf %s datiert - der aktuelle Tachostand passt dazu " + "nicht und wird nicht eingesetzt", ts.isoformat(), + ) + return None + return _km_aus_sensor(k) + + async def tankvorgang_aktualisieren(k: Koordinator, daten: dict) -> None: """Bearbeitet einen bestehenden Tankvorgang (Einzelbeleg-Seite, egal ob ursprünglich per Beleg oder manuell angelegt). @@ -252,6 +296,12 @@ async def tankvorgang_aktualisieren(k: Koordinator, daten: dict) -> None: _LOGGER.warning("tankvorgang_aktualisieren ohne tank_id aufgerufen") return + # edited_fields fortschreiben statt ersetzen: was frueher von Hand gesetzt + # wurde, bleibt geschuetzt. + vorhanden = await k.ablage.tankvorgaenge_lesen() + alt = next((t for t in vorhanden if t.get("tank_id") == tank_id), None) + hand = set((alt or {}).get("edited_fields") or []) + aenderungen: dict = {} if "ts" in daten: ts_normalisiert = zeit_normalisiert(daten.get("ts")) @@ -262,8 +312,20 @@ async def tankvorgang_aktualisieren(k: Koordinator, daten: dict) -> None: aenderungen["liters"] = liter aenderungen["fuel_total_eur"] = kosten aenderungen["price_per_l"] = preis_je_liter(kosten, liter) + if liter is not None: + # Von Hand eingetippte Liter sind der Beleg, nur ohne PDF - und + # damit dieselbe Wahrheit wie ein geparster Beleg. Ohne diesen + # Vermerk haelt verbrauchskorrektur.beleg_liter() sie fuer den + # Anstieg des Gebers und verwirft sie als Zirkelschluss; der + # Verbrauchsfaktor entstuende nie. + # + # Nebenwirkung, bewusst in Kauf genommen: edited_fields schuetzt + # das Feld vor der Automatik. Wird spaeter doch noch ein PDF zu + # demselben Tankvorgang hochgeladen, bleibt die getippte Zahl + # stehen - der Mensch hatte den Beleg in der Hand. + hand.add("liters") if "km" in daten: - aenderungen["odometer_km"] = daten.get("km") + aenderungen["odometer_km"] = als_kilometerstand(daten.get("km")) if "ersparnis" in daten: aenderungen["discount"] = daten.get("ersparnis") if "station" in daten: @@ -277,8 +339,11 @@ async def tankvorgang_aktualisieren(k: Koordinator, daten: dict) -> None: aenderungen["receipt_file"] = daten.get("receipt_file") aenderungen["source"] = "beleg" + if hand: + aenderungen["edited_fields"] = sorted(hand) + if await k.ablage.tankvorgang_aktualisieren(tank_id, aenderungen): - await k.tankvorgaenge_veroeffentlichen() + await k.tankvorgang_nachbereiten() _LOGGER.info("Tankvorgang %s aktualisiert", tank_id) else: _LOGGER.warning("Tankvorgang %s nicht gefunden", tank_id) @@ -289,7 +354,7 @@ async def tankvorgang_loeschen(k: Koordinator, tank_id: str | None) -> None: _LOGGER.warning("tankvorgang_loeschen ohne tank_id aufgerufen") return if await k.ablage.tankvorgang_loeschen(tank_id): - await k.tankvorgaenge_veroeffentlichen() + await k.tankvorgang_nachbereiten() _LOGGER.info("Tankvorgang %s gelöscht", tank_id) else: _LOGGER.warning("Tankvorgang %s nicht gefunden", tank_id) diff --git a/custom_components/audi_dashboard/fahrterkennung.py b/custom_components/audi_dashboard/fahrterkennung.py index 5953314..ded7f63 100644 --- a/custom_components/audi_dashboard/fahrterkennung.py +++ b/custom_components/audi_dashboard/fahrterkennung.py @@ -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) diff --git a/custom_components/audi_dashboard/frontend/app/bundle.json b/custom_components/audi_dashboard/frontend/app/bundle.json index 9aad6ff..55733e3 100644 --- a/custom_components/audi_dashboard/frontend/app/bundle.json +++ b/custom_components/audi_dashboard/frontend/app/bundle.json @@ -1 +1 @@ -{"version":"2026.9.1.24","sha256":"1d08e5fe05d30095db34e6eaaf5f9765dad94c8e14fbc1a501cfe3e5daec572a","bytes":266230,"gebaut":"2026-09-01T19:12:38Z"} \ No newline at end of file +{"version":"2026.9.2.3","sha256":"dc96144b41112aae8af2c211111aaff2723bc21eeaefb3bf4af72d2914012bc2","bytes":265967,"gebaut":"2026-09-02T09:26:58Z"} \ No newline at end of file diff --git a/custom_components/audi_dashboard/frontend/app/bundle.zip b/custom_components/audi_dashboard/frontend/app/bundle.zip index 62ec6b5fb490f9a2587e97aef190a0265687b988..080b58bfc2fdea94452dac6b11a5b676e7546808 100644 GIT binary patch delta 135757 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

tULrl1J<{BU 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 z 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%0Dx8c~&Rv?e_8S~1U)u(GR)R+0mFGUR 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 ${t ? `` : ""} ${f ? `

`; } @@ -2971,7 +2951,7 @@ function vEinst() {
Kraftstoff-Rabatt
+ Shell SmartDeal aktiv
${CAR.smartdeal.aktiv ? `
@@ -2992,7 +2972,7 @@ function vEinst() { Alles Fahrzeugspezifische liegt in einer einzigen Datei: Stammdaten, technische Daten, - Ausstattung, Reifen, Versicherung, Steuer und Werkstatt. Fahrten, Tankvorgänge und der + Ausstattung, Räder, Versicherung, Steuer und Werkstatt. Fahrten, Tankvorgänge und der Wartungsplan lassen sich einzeln als CSV sichern und bearbeitet wieder einspielen — eine Zeile mit bekannter ID aktualisiert nur ihre eigenen Spalten, alles andere bleibt unangetastet. @@ -3432,10 +3412,8 @@ function vReifen() {
` : ""}
Wechseltermin -
+
-
-
${satz("sommer")} @@ -3725,74 +3703,20 @@ function istNachtZeit(ts) { } /* D3: Die Strecke führt die Zeile, das Datum steht darunter. Umbruch nur zwischen den Orten, nie am Pfeil. */ -/* Ein bereits aufgeloester Ort aus dem Zwischenspeicher - OHNE Netzabruf. - - Die Einzelfahrt loest Koordinaten bei Bedarf auf und legt das Ergebnis im - selben Fach ab wie die Standortansicht. Was einmal dort steht, kann die - Liste umsonst mitbenutzen: kein zusaetzlicher Abruf, keine Wartezeit, kein - Flackern beim Zeichnen. - - Bewusst NUR aus dem Speicher. Ein Abruf je Zeile waere genau der - Vorratsabruf, um dessen Unterlassung Nominatim in seinen - Nutzungsbedingungen bittet - bei zweihundert Fahrten waeren das - vierhundert Anfragen fuer einen Blick auf die Liste. - - Schluessel wie bei der Aufloesung: drei Nachkommastellen (~110 m). */ -function ortAusCache(lat, lon) { - if (lat == null || lon == null) return null; - const wert = geoCacheLesen()["rev:" + lat.toFixed(3) + "," + lon.toFixed(3)]; - return typeof wert === "string" ? wert : null; -} - -/* Der Ortsname allein, fuer die Fahrtenliste. - - In der Liste steht eine Fahrt in einer Zeile neben Datum, Art, Strecke und - Verbrauch. Zwei volle Anschriften passen dort nicht - "Schottenau, 85072 - Eichstaett -> Am Anger 7a, 85111 Adelschlag" ist laenger als der Rest der - Zeile zusammen. Auf der Einzelfahrt bleibt die vollstaendige Anschrift. - - Der Ort wird beim Aufloesen SEPARAT gemerkt (Schluessel "ort:"), nicht - nachtraeglich aus der Anschrift geschnitten. Das Zerlegen der eigenen - Ausgabe waere fast immer richtig und in einem Fall falsch: faellt Nominatim - auf display_name zurueck, steht hinter dem letzten Komma das LAND. Dann - stuende in der Liste "Deutschland -> Deutschland". */ -/* Der Ortsname aus einer bereits gespeicherten Anschrift. - - Rueckfall fuer alles, was VOR dem Merken des Ortsnamens aufgeloest wurde: - dort liegt nur die volle Anschrift, und ein neuer Netzabruf, nur um den Ort - zu erfahren, waere Verschwendung. - - Geschnitten wird ausschliesslich, wenn hinter dem letzten Komma eine - Postleitzahl steht - unser eigenes Format ist ", ". - Faellt Nominatim auf display_name zurueck, fehlt die PLZ und hinter dem - letzten Komma stuende das LAND; dann lieber die volle Anschrift zeigen als - "Deutschland". */ -function stadtAusAnschrift(anschrift) { - if (!anschrift) return null; - const teil = String(anschrift).split(", ").pop().trim(); - const treffer = teil.match(/^\d{4,5}\s+(.+)$/); - return treffer ? treffer[1].trim() : null; -} - -function stadtAusCache(lat, lon) { - if (lat == null || lon == null) return null; - const wert = geoCacheLesen()["ort:" + lat.toFixed(3) + "," + lon.toFixed(3)]; - return typeof wert === "string" && wert ? wert : null; -} - function strecke(t) { - // Ortsname bevorzugt; ohne ihn die volle Anschrift, damit eine vor dieser - // Aenderung aufgeloeste Fahrt nicht ploetzlich wieder ortlos dasteht. - const ortsname = (adresse, lat, lon) => { - if (adresse) return adresse; - const gemerkt = stadtAusCache(lat, lon); - if (gemerkt) return gemerkt; - const voll = ortAusCache(lat, lon); - return stadtAusAnschrift(voll) || voll; + // Der Ortsname kommt mit der Fahrt (start_stadt), aufgeloest im Backend. + // + // Eine VON HAND eingetragene Anschrift sticht ihn: wer "Zuhause" eintraegt, + // will das auch in der Liste lesen und nicht den Ortsnamen dazu. Erkennbar + // an edited_fields - genau dafuer fuehrt das Backend die Liste. + const handisch = new Set(t.edited_fields || []); + const ortsname = (seite) => { + const adresse = t[seite + "_address"]; + if (adresse && handisch.has(seite + "_address")) return adresse; + return t[seite + "_stadt"] || adresse || null; }; - const a = ortsname(t.start_address, t.start_lat, t.start_lon); - const b = ortsname(t.end_address, t.end_lat, t.end_lon); - if (!a && !b) return "Fahrt ohne Ortsangabe"; + const a = ortsname("start"); + const b = ortsname("end"); if (!a && !b) return "Fahrt ohne Ortsangabe"; if (!b) return esc(a); if (!a) return esc(b); return `${esc(a)} → ${esc(b)}`; @@ -4253,7 +4177,21 @@ function vFill(id) { /* ---------------------------------------------------------- Steuerung */ const ICONS = { - home: '', + /* Auf die volle Rasterbreite gezogen. Live gemessen (getBBox, 01.09./02.09.2026) + fuellte das Symbol nur 18,0 x 10,3 von 24 - 43 % der Hoehe, waehrend die + vier Nachbarn zwischen 65 % (Tanken) und 89 % (Fahrten) liegen. In einer + Reihe liest sich das als "zu klein", und genau so wurde es gemeldet. + + Es ist bewusst NUR ein Faktor 1,33 (18 -> 24 Breite, Hoehe 10,3 -> 13,7) + und keine Angleichung auf 72 %: das Symbol ist ein Halbkreis, also + bauartbedingt halb so hoch wie breit. Fuer 72 % Hoehe braeuchte es Faktor + 1,68 und waere mit 30 Einheiten breiter als das Raster. Wer es wirklich + gleich hoch will, muss den Bogen neu zeichnen (groesserer Winkel als 180 + Grad), nicht skalieren. + + stroke-width am gleicht die Skalierung aus: 1,5 / 1,33 = 1,125, damit + die Strichstaerke gerendert wieder 1,5 betraegt wie bei den Nachbarn. */ + home: '', /* Wagen von vorn - dasselbe Symbol wie in der myAudi-App (Audi-Symbolsatz, assets/icons/car.svg). Flaeche statt Kontur, deshalb die Klasse "voll". */ audi: '', @@ -4828,11 +4766,10 @@ function render() { else if (route.name === "trip") { head = ["Fahrt", "Einzelfahrt"]; v.innerHTML = vTrip(route.id); const t = TRIPS.find((x) => x.trip_id === route.id); - if (t) fahrtOrteNachtragen(t); } else if (route.name === "fill") { head = ["Tankvorgang", "Einzelbeleg"]; v.innerHTML = vFill(route.id); } else if (route.name === "service") { head = ["Wartung", "Service"]; v.innerHTML = vService(); } - else if (route.name === "reifen") { head = ["Fahrzeug", "Reifen"]; v.innerHTML = vReifen(); } + else if (route.name === "reifen") { head = ["Fahrzeug", "Räder"]; v.innerHTML = vReifen(); } else if (route.name === "einst") { head = ["App", "Einstellungen"]; v.innerHTML = vEinst(); } else if (route.name === "ident") { head = ["Fahrzeug", "Identität und Technik"]; v.innerHTML = vIdent(); } else if (route.name === "sicherheit") { head = ["Fahrzeug", "Fahrzeugstatus"]; v.innerHTML = vSicherheit(); } @@ -5757,7 +5694,7 @@ function ereignisseVerdrahten() { const rfArchDel = e.target.closest("[data-reifenarchivloeschen]"); if (rfArchDel) { const id = rfArchDel.dataset.reifenarchivloeschen; - bestaetigen("Archivierten Reifensatz löschen?", + bestaetigen("Archivierten Radsatz löschen?", "Das lässt sich nicht widerrufen.", "Löschen", () => { serviceRufen("reifen_archiv_loeschen", { id }); CAR.reifen.archiv = CAR.reifen.archiv.filter((a) => a.id !== id); @@ -5778,10 +5715,9 @@ function ereignisseVerdrahten() { } else { const datum = $("#rfDat").value; CAR.reifen.wechsel.datum = datum; - CAR.reifen.wechsel.vereinbart = $("#rfOk").checked; profilSpeichern(); const ziel = CAR.reifen.aktiv === "Sommer" ? "Winter" : "Sommer"; - ics(`${CONFIG.fahrzeugtitel}: Reifenwechsel auf ${ziel}`, datum, CAR.service.autohaus.name, `Umstellung des Zählers auf den ${ziel}satz nicht vergessen`); + ics(`${CONFIG.fahrzeugtitel}: Radwechsel auf ${ziel}`, datum, CAR.service.autohaus.name, `Umstellung des Zählers auf den ${ziel}satz nicht vergessen`); } return; } diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard.css b/custom_components/audi_dashboard/frontend/audi-dashboard.css index ff2c1f8..5de67ee 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard.css +++ b/custom_components/audi_dashboard/frontend/audi-dashboard.css @@ -459,14 +459,26 @@ button.sicherheitszeile:active { background: var(--tile-2); } border-bottom: 1px solid var(--line); color: inherit; } -.leaf .k { font-size: 14px; color: var(--fg); display: flex; flex-direction: column; gap: 3px; line-height: 1.35; } +/* Das Label nimmt den freien Platz und kuerzt bei Bedarf mit Auslassung. + + Ohne flex:1 blieb in der Zeile freier Raum, und weil sie DREI Kinder hat + (Label, Werte, Pfeil), verteilte space-between ihn ZWISCHEN alle drei - die + Wertespalte stand damit in der Mitte, ihre Lage abhaengig von der Laenge des + Ortsnamens. Gemessen: rechte Kante bei 549px in der einen Zeile, 520px in + der naechsten. Mit flex:1 bleibt kein freier Raum uebrig, Werte und Pfeil + sitzen buendig rechts. + + min-width:0 ist noetig, damit ein Flex-Kind ueberhaupt unter seine + Inhaltsbreite schrumpfen darf - ohne das greift text-overflow nie. */ +.leaf .k { font-size: 14px; color: var(--fg); display: flex; flex-direction: column; gap: 3px; line-height: 1.35; flex: 1 1 auto; min-width: 0; } +.leaf .k > * { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .leaf .k small { font-size: 12.5px; color: var(--fg3); } /* Feste Mindestbreite, damit Strecke und Verbrauch ueber alle Zeilen hinweg in einer Spalte stehen. Ohne sie waechst der Kasten mit dem Inhalt: gemessen 86px bei "11,4 l/100 km" gegen 37px bei einer Zeile ohne Werte, und die Zahlen standen entsprechend versetzt. 92px traegt die laengste Form ("11,4 l/100 km") ohne Umbruch. */ -.leaf .v { font-size: 13px; color: var(--fg2); text-align: right; display: flex; flex-direction: column; gap: 3px; flex: 0 0 auto; min-width: 92px; } +.leaf .v { font-size: 13px; color: var(--fg2); text-align: right; display: flex; flex-direction: column; gap: 3px; flex: 0 0 92px; } .leaf .v small { font-size: 12.5px; color: var(--fg3); } /* .teaser (die "Zuletzt"-Kachel auf der Übersicht, teaser()): genau zwei Zeilen mit sehr unterschiedlich breiten Werten ("offen" vs. "51,59 l") - @@ -665,9 +677,10 @@ img.carfix.klein { aspect-ratio: auto; height: auto; } .marke { display: inline-flex; align-items: center; gap: 6px; } .marke-logo { display: inline-flex; align-items: center; } -/* Auf Zeilenhoehe (16px) statt 13px: das Markenlogo stand neben Text - derselben Zeile und wirkte daneben zu klein. */ -.marke-logo img { height: 16px; width: auto; } +/* 19,2px = 16px + 20%. Der Eigentuemer wollte das Markenlogo in JEDER + Darstellung um ein Fuenftel groesser; es steht ueberall neben Text der + Zeilenhoehe 16px, also hier eine Zahl statt mehrerer Sondergroessen. */ +.marke-logo img { height: 19.2px; width: auto; } .marke-logo .ph { display: none; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--fg3); } .marke-logo.logo-fehlt img { display: none; } .marke-logo.logo-fehlt .ph { display: inline; } diff --git a/custom_components/audi_dashboard/geokodierung.py b/custom_components/audi_dashboard/geokodierung.py new file mode 100644 index 0000000..db2365d --- /dev/null +++ b/custom_components/audi_dashboard/geokodierung.py @@ -0,0 +1,237 @@ +"""Koordinaten zu Ortsnamen - einmal im Backend, nicht in jedem Geraet. + +Bis zum 01.09.2026 loeste jede Oberflaeche die Fahrtkoordinaten selbst auf und +legte das Ergebnis in ihren eigenen Zwischenspeicher (localStorage im Panel, +derselbe Mechanismus in der App). Drei Folgen, alle drei unnoetig: + +* Jedes Geraet fragte dieselben Koordinaten erneut ab. Bei zwei Telefonen und + dem Panel also dreimal - fuer einen Ort, der sich nie wieder aendert. +* Ein frisch eingerichtetes Geraet zeigte fuer Monate alte Fahrten wieder + "unbekannt", bis jemand jede einzelne Fahrt geoeffnet hatte. +* Ein geleerter Browserspeicher warf alles weg. + +Jetzt steht der Ort in der Fahrt selbst. Er wird genau einmal aufgeloest und +danach von jedem Geraet gelesen wie jedes andere Feld auch. + +NOMINATIMS NUTZUNGSBEDINGUNGEN sind der Grund fuer fast jede Entscheidung +hier: hoechstens eine Anfrage je Sekunde, kein Vorratsabruf, ein +aussagekraeftiger User-Agent, und Ergebnisse sind zu speichern statt erneut +abzurufen. Daher die Sperre zwischen zwei Anfragen, daher die Obergrenze je +Durchlauf, und daher der Zwischenspeicher auf der Platte. +""" + +from __future__ import annotations + +import asyncio +import json +import logging +import os +import time + +from homeassistant.core import HomeAssistant +from homeassistant.helpers.aiohttp_client import async_get_clientsession + +_LOGGER = logging.getLogger(__name__) + +DIENST = "https://nominatim.openstreetmap.org/reverse" + +# Nominatim bittet um hoechstens eine Anfrage je Sekunde. 1,1 s laesst Luft +# fuer Ungenauigkeiten der Uhr, ohne spuerbar laenger zu dauern. +ABSTAND_S = 1.1 + +# Wie viele Orte ein einzelner Screening-Durchlauf hoechstens aufloest. Ein +# Rueckblick ueber ein Jahr braechte sonst Hunderte Anfragen am Stueck - genau +# der Vorratsabruf, um dessen Unterlassung Nominatim bittet. Der Rest kommt +# beim naechsten Durchlauf dran; die laufen haeufig genug. +PRO_DURCHLAUF = 8 + +# Drei Nachkommastellen sind rund 110 m. Feiner aufzuloesen braechte fuer eine +# Anschrift nichts und wuerde den Zwischenspeicher unbrauchbar machen: jede +# Fahrt endete auf einem eigenen Schluessel. Dieselbe Rundung wie bisher in +# beiden Oberflaechen, damit deren Altbestand weiter passt. +STELLEN = 3 + +ZEITSPERRE_S = 8 + +# Ein benannter Ort sagt mehr als die naechstgelegene Hausnummer - aber nur, +# wenn er wirklich ein Ziel ist. Ohne diese Pruefung verdraengte jedes +# zufaellig benannte Gebaeude die Anschrift. +BENANNTE_ARTEN = { + "parking", + "parking_space", + "parking_entrance", + "bicycle_parking", + "motorcycle_parking", + "rest_area", + "services", + "fuel", + "charging_station", +} + + +def schluessel(lat: float, lon: float) -> str: + return f"{round(lat, STELLEN):.{STELLEN}f},{round(lon, STELLEN):.{STELLEN}f}" + + +def anschrift_bauen(daten: dict) -> tuple[str | None, str | None]: + """(Anschrift, Ort) aus Nominatims Antwort. + + Das Format ist bewusst dasselbe, das die Oberflaechen bisher selbst + gebaut haben - " , " -, damit bereits + gespeicherte Anschriften und neue nicht unterschiedlich aussehen. + + Der Ort wird SEPARAT zurueckgegeben, nicht spaeter aus der Anschrift + geschnitten: faellt Nominatim auf display_name zurueck, stuende hinter dem + letzten Komma das Land, und in der Fahrtenliste stuende dann + "Deutschland -> Deutschland". + """ + a = daten.get("address") or {} + stadt = ( + a.get("city") + or a.get("town") + or a.get("village") + or a.get("municipality") + or a.get("suburb") + or "" + ).strip() + + name = (daten.get("name") or "").strip() + art = daten.get("type") or daten.get("category") or "" + if name and art in BENANNTE_ARTEN: + vorn = name + else: + strasse = (a.get("road") or a.get("pedestrian") or "").strip() + nummer = (a.get("house_number") or "").strip() + vorn = " ".join(t for t in (strasse, nummer) if t) + + plz = (a.get("postcode") or "").strip() + hinten = " ".join(t for t in (plz, stadt) if t) + anschrift = ", ".join(t for t in (vorn, hinten) if t) + + if not anschrift: + anschrift = (daten.get("display_name") or "").strip() + + return (anschrift or None), (stadt or None) + + +class Geokodierung: + """Loest Koordinaten auf und merkt sich jedes Ergebnis auf der Platte.""" + + def __init__(self, hass: HomeAssistant, basis: str) -> None: + self._hass = hass + self._pfad = os.path.join(basis, "orte.json") + self._speicher: dict[str, dict] | None = None + self._sperre = asyncio.Lock() + self._zuletzt = 0.0 + self.rest = PRO_DURCHLAUF + + def durchlauf_beginnen(self) -> None: + """Setzt das Anfragenbudget fuer einen Screening-Lauf zurueck.""" + self.rest = PRO_DURCHLAUF + + # ------------------------------------------------------ Zwischenspeicher + + def _laden(self) -> dict: + if not os.path.exists(self._pfad): + return {} + try: + with open(self._pfad, encoding="utf-8") as datei: + inhalt = json.load(datei) + return inhalt if isinstance(inhalt, dict) else {} + except (OSError, ValueError): + # Eine beschaedigte Datei darf das Screening nicht anhalten - im + # schlimmsten Fall wird noch einmal abgefragt. + _LOGGER.warning("Ortsspeicher unlesbar, wird neu aufgebaut: %s", self._pfad) + return {} + + def _sichern(self, inhalt: dict) -> None: + tmp = self._pfad + ".tmp" + with open(tmp, "w", encoding="utf-8") as datei: + json.dump(inhalt, datei, ensure_ascii=False, indent=1) + os.replace(tmp, self._pfad) + + async def _speicher_holen(self) -> dict: + if self._speicher is None: + self._speicher = await self._hass.async_add_executor_job(self._laden) + return self._speicher + + # ---------------------------------------------------------- Aufloesung + + async def aufloesen(self, lat: float | None, lon: float | None) -> dict | None: + """{"anschrift": ..., "stadt": ...} oder None. + + None heisst "noch nicht bekannt und diesmal nicht abgefragt" - entweder + weil das Budget aufgebraucht ist oder weil der Abruf scheiterte. Beides + wird beim naechsten Durchlauf erneut versucht. + + Ein Ergebnis OHNE Anschrift ({"anschrift": None}) heisst dagegen "dort + ist wirklich nichts" und wird gemerkt, nicht erneut abgefragt. + """ + if lat is None or lon is None: + return None + + try: + key = schluessel(float(lat), float(lon)) + except (TypeError, ValueError): + return None + + speicher = await self._speicher_holen() + if key in speicher: + return speicher[key] + + if self.rest <= 0: + return None + + async with self._sperre: + # Erneut pruefen: waehrend des Wartens kann ein anderer Aufruf + # dieselbe Koordinate bereits aufgeloest haben. + if key in speicher: + return speicher[key] + abstand = time.monotonic() - self._zuletzt + if abstand < ABSTAND_S: + await asyncio.sleep(ABSTAND_S - abstand) + ergebnis = await self._abfragen(float(lat), float(lon)) + self._zuletzt = time.monotonic() + self.rest -= 1 + + if ergebnis is None: + # Netz- oder Serverfehler: NICHT merken. Sonst stuende ein + # voruebergehend gedrosselter Abruf fuer immer als "kein Ort hier". + return None + + speicher[key] = ergebnis + await self._hass.async_add_executor_job(self._sichern, dict(speicher)) + return ergebnis + + async def _abfragen(self, lat: float, lon: float) -> dict | None: + session = async_get_clientsession(self._hass) + try: + antwort = await session.get( + DIENST, + params={ + "lat": f"{lat}", + "lon": f"{lon}", + "format": "jsonv2", + "zoom": "18", + "addressdetails": "1", + }, + headers={ + # Nominatim verlangt eine identifizierbare Anwendung und + # sperrt anonyme Aufrufer. + "User-Agent": "audi-dashboard (Home Assistant Integration)", + "Accept-Language": "de", + }, + timeout=ZEITSPERRE_S, + ) + if antwort.status != 200: + _LOGGER.debug("Nominatim antwortete mit %s", antwort.status) + return None + daten = await antwort.json(content_type=None) + except Exception as fehler: # Netzfehler, Zeitueberschreitung, kaputtes JSON + _LOGGER.debug("Ortsabfrage fehlgeschlagen: %s", fehler) + return None + + if not isinstance(daten, dict) or daten.get("error"): + return {"anschrift": None, "stadt": None} + anschrift, stadt = anschrift_bauen(daten) + return {"anschrift": anschrift, "stadt": stadt} diff --git a/custom_components/audi_dashboard/historienimport.py b/custom_components/audi_dashboard/historienimport.py index 297b414..6ecfd88 100644 --- a/custom_components/audi_dashboard/historienimport.py +++ b/custom_components/audi_dashboard/historienimport.py @@ -235,6 +235,10 @@ async def _fahrten_importieren(k: Koordinator, verlaeufe: dict) -> dict: odo_start = odo_end = None durchschnitt = None + # Bewusst OHNE Radsatz: der Rueckblick rekonstruiert Vergangenes, und + # das steckt im gespeicherten Radstand laengst drin. Wuerde er hier + # stempeln, schriebe ein erneuter Import dieselben Kilometer ein + # zweites Mal auf die Raeder. fahrt = leere_fahrt(f_start, f_ende, "import") fahrt.update({ "distance_km": distanz, @@ -517,7 +521,7 @@ async def importieren(k: Koordinator, start: object, ende: object) -> None: batterie = await _batterie_importieren(k, verlaeufe) await k.fahrten_veroeffentlichen() - await k.tankvorgaenge_veroeffentlichen() + await k.tankvorgang_nachbereiten() await k.batterieverlauf_veroeffentlichen() ergebnis = { diff --git a/custom_components/audi_dashboard/koordinator.py b/custom_components/audi_dashboard/koordinator.py index bc392de..c3493f1 100644 --- a/custom_components/audi_dashboard/koordinator.py +++ b/custom_components/audi_dashboard/koordinator.py @@ -53,11 +53,13 @@ from . import ( identitaet, reifen, screening, + verbrauchskorrektur, sicherung, tankerkennung, verlauf, ) from .ablage import Ablage +from .geokodierung import Geokodierung from .const import ( BUENDEL_INFO, BUENDEL_ORDNER, @@ -116,6 +118,9 @@ class Koordinator: self.version = version self.ablage = Ablage(hass, hass.config.path("audi_dashboard")) self.zuordnung = Zuordnung(self.ablage) + # Ortsnamen werden einmal hier aufgeloest und mit der Fahrt + # gespeichert, statt in jedem Geraet erneut - siehe geokodierung.py. + self.geokodierung = Geokodierung(hass, self.ablage.basis) # Was die Entitäten anzeigen: Schlüssel -> (Zustand, Nutzlast). self.werte: dict[str, tuple[str, dict | list | None]] = {} @@ -159,10 +164,10 @@ class Koordinator: # Veröffentlichung den vorgeladenen Wert trägt. spannung_cache_vorladen(await self.ablage.batterieverlauf_lesen()) await self.alles_veroeffentlichen() - # Der Reifenzähler schreibt beim Start einmal fort: Kilometer, die - # während eines HA-Ausfalls gefahren wurden, gehören noch dem damals - # aktiven Satz (siehe reifen.py). - await reifen.fortschreiben(self, reifen.aktueller_km(self)) + # Der Radzähler hängt an den Fahrten, nicht am Kilometerstand - was + # während eines Ausfalls gefahren wurde, kommt über die dabei + # erkannten Fahrten herein (siehe reifen.py). + await reifen.nachtragen(self) self._takte_anmelden() await self.trigger_neu_binden() # Erst wenn Home Assistant vollständig oben ist: bis dahin haben die @@ -312,7 +317,8 @@ class Koordinator: neu, alt = self._zustaende(ereignis) if neu is None or alt is None: return - await reifen.fortschreiben(self, reifen.aktueller_km(self)) + # Der Radzaehler haengt nicht mehr am Kilometerstand, sondern an den + # Fahrten - das Screening rechnet ihn am Ende selbst nach. await screening.durchfuehren(self) async def _tankfuellstand_geaendert(self, ereignis: Event[EventStateChangedData]) -> None: @@ -477,6 +483,27 @@ class Koordinator: async def tankvorgaenge_veroeffentlichen(self) -> None: self.setzen(E_TANKVORGAENGE, "aktuell", await self.ablage.tankvorgaenge_lesen()) + async def tankvorgang_nachbereiten(self) -> None: + """Nach jedem Schreiben eines Tankvorgangs: veroeffentlichen und den + Verbrauchsfaktor rechnen lassen. + + Eine Betankung ist der Moment, in dem sich ein Intervall SCHLIESST - + vorher gibt es kein Paar aus zwei Tankvorgaengen und damit keinen + Faktor. Bis hierher haing die Korrektur allein am Screening, das bei + jeder Aenderung des Kilometerstands laeuft: gerechnet wurde also erst + bei der naechsten Fahrt, nicht beim Tanken. + + Der Aufruf im Screening bleibt trotzdem bestehen, und zwar aus dem + umgekehrten Grund: eine Fahrt im Intervall kann ihren Rohverbrauch + erst NACH der Betankung bekommen (der Tankstand-Verlauf trifft + verzoegert ein), und dann muss der Faktor sie noch einholen. + + Der 60-Sekunden-Takt ruft bewusst weiter nur + tankvorgaenge_veroeffentlichen() - dort aendert sich nichts, was einen + neuen Faktor ergeben koennte.""" + await self.tankvorgaenge_veroeffentlichen() + await verbrauchskorrektur.anwenden(self) + async def batterieverlauf_veroeffentlichen(self) -> None: self.setzen(E_BATTERIEVERLAUF, "aktuell", await self.ablage.batterieverlauf_lesen()) diff --git a/custom_components/audi_dashboard/manifest.json b/custom_components/audi_dashboard/manifest.json index 2cbefaf..8f2b5ff 100644 --- a/custom_components/audi_dashboard/manifest.json +++ b/custom_components/audi_dashboard/manifest.json @@ -1,7 +1,7 @@ { "domain": "audi_dashboard", "name": "Audi Dashboard", - "version": "2026.9.1.24", + "version": "2026.9.2.3", "documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md", "issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues", "codeowners": ["@paul"], diff --git a/custom_components/audi_dashboard/reifen.py b/custom_components/audi_dashboard/reifen.py index 6943ce5..66647e9 100644 --- a/custom_components/audi_dashboard/reifen.py +++ b/custom_components/audi_dashboard/reifen.py @@ -1,21 +1,42 @@ -"""Reifenzähler: jeder gefahrene Kilometer wird dem Satz zugerechnet, der zum -Zeitpunkt der Fahrt aktiv war. +"""Radzaehler: der eingetragene Stand, und jeder gefahrene Kilometer kommt +dazu. -Früher war der Zähler = aktueller Kilometerstand minus fester Startwert je -Satz. Das war falsch, sobald einmal zwischen Sommer und Winter umgeschaltet -wurde: die Differenz zum Startwert zählt dann alle seither gefahrenen -Kilometer mit, auch die auf dem jeweils anderen Satz. Jetzt führt -reifen.saetze..km selbst den fortlaufenden Gesamtstand, und -reifen.referenz_odo_km hält den zuletzt verarbeiteten Kilometerstand fest, -gegen den die nächste Änderung als Delta gemessen wird. +DIE VORGESCHICHTE, weil sie erklaert, warum es jetzt so einfach aussieht. +Erst war der Zaehler "aktueller Kilometerstand minus fester Startwert je +Satz" - falsch, sobald einmal umgeschaltet wurde, weil dann alle seither +gefahrenen Kilometer mitzaehlten, auch die auf dem anderen Satz. Danach fuehrte +das Profil einen eigenen Zaehler fort und `referenz_odo_km` hielt den zuletzt +verarbeiteten Kilometerstand, gegen den das naechste Delta gemessen wurde. -Keine Abhängigkeit von total_increasing oder utility_meter: die Fortschreibung -braucht nur den zuletzt bekannten Absolutwert des Kilometerstand-Sensors. Ein -zeitweise "unavailable" Quellsensor verliert dadurch nichts - referenz_odo_km -bleibt einfach stehen, bis wieder ein gültiger Wert kommt, und das nächste -Delta wird dann gegen diesen alten Stand berechnet. Auch Kilometer, die -während eines HA-Ausfalls gefahren wurden, werden so noch dem damals aktiven -Satz zugerechnet. +Auch das war falsch, nur unauffaelliger: gezaehlt wurde jedes POSITIVE Delta. +Ein Sprung nach unten fiel heraus, einer nach oben nicht - und beim Umstecken +des Geraets zwischen zwei Fahrzeugen gibt es beide Richtungen. Am 01.09.2026 +standen deshalb **375.962 km** auf den Sommerraedern, bei einem Tacho von +61.823: der Sprung 61.823 -> 209.177 war als gefahrene Strecke verbucht. + +WARUM JETZT DIE FAHRTEN UND NICHT DER TACHO. Ein Sprungschutz am Delta waere +moeglich gewesen (und war kurz gebaut), aber die Fahrten pruefen laengst genau +das - Rueckwaertssprunge, unmoegliches Tempo, Mindestdauer -, und sie messen +seit der GNSS-Verfeinerung auf 100 m statt auf ganze Kilometer. Am echten +Bestand nachgemessen: in den sauberen Bereichen trifft die Fahrtsumme die +Tacho-Spanne auf 99 bis 103 %, bei einer Fahrt 6,9 gegen 7 km. + +WAS DAS KOSTET, und der Eigentuemer hat es am 01.09.2026 ausdruecklich +akzeptiert: was die Fahrterkennung nicht sieht, landet nie auf den Raedern. +Der Tacho ist die Wahrheit des Fahrzeugs und holt sich alles zurueck, eine +Fahrtsumme nicht. + +WIE GERECHNET WIRD, in genau der Form, die der Eigentuemer verlangt hat: +`saetze..km` IST der Stand. Von Hand eingetragen wird er direkt - kein +Umweg, kein Sockel, keine Rueckrechnung. Jede Fahrt legt ihre Strecke oben +drauf, sobald sie feststeht. + +Damit keine Fahrt zweimal zaehlt, merkt sie sich selbst, was von ihr bereits +gutgeschrieben wurde (`reifen_gezaehlt_km`). Verfeinert das Screening die +Strecke spaeter noch (7,0 -> 6,896 km ist real vorgekommen), wird nur die +Differenz nachgetragen. Fahrten aus der Zeit vor dieser Umstellung tragen +keinen Radsatz und bleiben deshalb unberuecksichtigt - ihre Kilometer stecken +laengst im gespeicherten Stand. """ from __future__ import annotations @@ -25,7 +46,6 @@ import logging from typing import TYPE_CHECKING from .ablage import neue_id -from .veroeffentlichung import zustand_oder_none if TYPE_CHECKING: from .koordinator import Koordinator @@ -40,77 +60,120 @@ SAETZE = ("sommer", "winter") _UEBERNOMMENE_FELDER = ("bild", "mass", "druck_vorne", "druck_hinten") -def aktueller_km(k: Koordinator) -> float | None: - try: - return float(zustand_oder_none(k.hass, k.zuordnung.werte.KM_SENSOR)) # type: ignore[arg-type] - except (TypeError, ValueError): - return None +def aktiver_satz(profil: dict | None) -> str: + """Welcher Satz gerade montiert ist - der Stempel fuer eine neue Fahrt. + + Kleingeschrieben, weil das Profil den Wert historisch mal so und mal + grossgeschrieben fuehrt ("Sommer"), die Schluessel in `saetze` aber immer + klein sind. + """ + satz = str((profil or {}).get("reifen", {}).get("aktiv") or "sommer").lower() + return satz if satz in SAETZE else "sommer" -async def fortschreiben(k: Koordinator, neuer_km: float | None, neuer_aktiv: str | None = None) -> None: - """Rechnet zuerst mit dem bisher aktiven Satz ab (Delta seit - referenz_odo_km), trägt danach optional einen Satzwechsel ein - in dieser - Reihenfolge, damit beim Wechseln selbst keine Kilometer dem neuen Satz - zugerechnet werden, die eigentlich noch auf dem alten gefahren wurden.""" - profil = await k.ablage.profil_lesen() - if profil is None: +def _aufraeumen(reifen: dict) -> bool: + """Reste der frueheren Delta-Buchhaltung wegwerfen. Sie werden nicht mehr + gelesen; stehen zu bleiben waere nur eine Falle fuer den naechsten Leser.""" + geaendert = False + for veraltet in ("referenz_odo_km", "referenz_odo_zeit"): + if veraltet in reifen: + del reifen[veraltet] + geaendert = True + return geaendert + + +async def nachtragen(k: Koordinator, profil: dict | None = None) -> None: + """Schreibt jeder Fahrt ihre Strecke dem montierten Satz gut - genau einmal. + + Der Radsatz steht an der Fahrt selbst, nicht am Zeitpunkt. Ein Satzwechsel + braucht deshalb keine Sonderbehandlung: eine Fahrt zaehlt fuer den Satz, + der WAEHREND ihr montiert war, auch wenn danach umgeschaltet wurde. + + `reifen_gezaehlt_km` haelt fest, wieviel von dieser Fahrt schon + gutgeschrieben ist. Verfeinert das Screening die Strecke spaeter noch, + wird nur die Differenz nachgetragen statt der ganzen Fahrt ein zweites + Mal. Ohne diesen Merker waere entweder jede Korrektur verloren oder jede + Fahrt doppelt gezaehlt.""" + fahrten = await k.ablage.fahrten_lesen() + offen = [] + for f in fahrten: + satz = f.get("reifensatz") + strecke = f.get("distance_km") + if satz not in SAETZE or strecke is None: + continue + gezaehlt = float(f.get("reifen_gezaehlt_km") or 0) + delta = round(float(strecke) - gezaehlt, 1) + if delta: + offen.append((f, satz, delta, round(float(strecke), 1))) + if not offen: return + if profil is None: + profil = await k.ablage.profil_lesen() + if profil is None: + return reifen = profil.setdefault("reifen", {}) saetze = reifen.setdefault("saetze", {}) - aktiv = reifen.get("aktiv", "sommer") - referenz = reifen.get("referenz_odo_km") + _aufraeumen(reifen) - if referenz is not None and neuer_km is not None: - delta = round(neuer_km - referenz, 1) - if delta > 0: - satz = saetze.setdefault(aktiv, {}) - satz["km"] = round((satz.get("km") or 0) + delta, 1) - if neuer_km is not None: - reifen["referenz_odo_km"] = neuer_km - if neuer_aktiv is not None: - reifen["aktiv"] = neuer_aktiv + for fahrt, satz, delta, strecke in offen: + eintrag = saetze.setdefault(satz, {}) + eintrag["km"] = round(float(eintrag.get("km") or 0) + delta, 1) + await k.ablage.fahrt_aktualisieren(fahrt["trip_id"], {"reifen_gezaehlt_km": strecke}) + fahrt["reifen_gezaehlt_km"] = strecke + _LOGGER.info( + "Fahrt %s: %s km auf %s gutgeschrieben, neuer Stand %s km", + fahrt["trip_id"], delta, satz, eintrag["km"], + ) await k.ablage.profil_schreiben(profil) await k.profil_veroeffentlichen(profil) async def wechseln(k: Koordinator, satz: str | None) -> None: + """Umschalten auf den anderen Radsatz. + + Braucht keine Abrechnung vorher: jede Fahrt traegt ihren eigenen Satz, es + kann also nichts dem falschen gutgeschrieben werden.""" if satz not in SAETZE: - _LOGGER.warning("Ungültiger Reifensatz '%s'", satz) + _LOGGER.warning("Ungültiger Radsatz %s", satz) return - await fortschreiben(k, aktueller_km(k), neuer_aktiv=satz) - _LOGGER.info("Aktiver Reifensatz auf '%s' umgeschaltet", satz) + profil = await k.ablage.profil_lesen() + if profil is None: + return + profil.setdefault("reifen", {})["aktiv"] = satz + await k.ablage.profil_schreiben(profil) + await k.profil_veroeffentlichen(profil) + _LOGGER.info("Aktiver Radsatz auf %s umgeschaltet", satz) async def km_setzen(k: Koordinator, satz: str | None, km: object) -> None: - """Manuelle Korrektur des gefahrenen Kilometerstands eines Reifensatzes. + """Laufleistung eines Radsatzes von Hand setzen. - Überschreibt nur den gespeicherten Zähler selbst - referenz_odo_km (der - zuletzt verarbeitete Fahrzeug-Kilometerstand) bleibt unverändert, damit - die nächste Fortschreibung weiterhin korrekt von hier aus weiterzählt, - statt auf den neuen Wert erneut ein Delta seit dem alten Stand - aufzuschlagen.""" + Der eingetragene Wert IST ab sofort der Stand; jeder weitere gefahrene + Kilometer kommt oben drauf. Bereits gutgeschriebene Fahrten tauchen nicht + erneut auf - sie tragen ihren Merker.""" if satz not in SAETZE: - _LOGGER.warning("Ungültiger Reifensatz '%s'", satz) + _LOGGER.warning("Ungültiger Radsatz %s", satz) return try: wert = round(float(km), 1) # type: ignore[arg-type] except (TypeError, ValueError): - _LOGGER.warning("Ungültiger km-Wert '%s'", km) + _LOGGER.warning("Ungültiger km-Wert %s", km) return if wert < 0: - _LOGGER.warning("Negativer km-Wert '%s' abgelehnt", wert) + _LOGGER.warning("Negativer km-Wert %s abgelehnt", wert) return profil = await k.ablage.profil_lesen() if profil is None: return reifen = profil.setdefault("reifen", {}) + _aufraeumen(reifen) reifen.setdefault("saetze", {}).setdefault(satz, {})["km"] = wert await k.ablage.profil_schreiben(profil) await k.profil_veroeffentlichen(profil) - _LOGGER.info("km-Stand '%s' manuell auf %s gesetzt", satz, wert) + _LOGGER.info("Laufleistung %s von Hand auf %s km gesetzt", satz, wert) async def archivieren(k: Koordinator, satz: str | None) -> None: @@ -118,15 +181,19 @@ async def archivieren(k: Koordinator, satz: str | None) -> None: Modell, DOT, Kommentar) als Übersichtszeile ins Archiv und setzt den laufenden Satz auf einen frischen Stand zurück - km auf 0, Marke/Modell/ DOT/Kommentar leer (galten für den alten, jetzt ersetzten Reifen), Größe - und Solldruck unverändert übernommen (siehe _UEBERNOMMENE_FELDER).""" + und Solldruck unverändert übernommen (siehe _UEBERNOMMENE_FELDER). + + Die Fahrten des alten Satzes tragen ihren Merker und werden dem frischen + Satz nicht noch einmal gutgeschrieben.""" if satz not in SAETZE: - _LOGGER.warning("Ungültiger Reifensatz '%s'", satz) + _LOGGER.warning("Ungültiger Radsatz %s", satz) return profil = await k.ablage.profil_lesen() if profil is None: return reifen = profil.setdefault("reifen", {}) + _aufraeumen(reifen) saetze = reifen.setdefault("saetze", {}) alt = dict(saetze.get(satz, {})) @@ -152,12 +219,11 @@ async def archivieren(k: Koordinator, satz: str | None) -> None: await k.ablage.profil_schreiben(profil) await k.profil_veroeffentlichen(profil) - _LOGGER.info("Reifensatz '%s' archiviert (%s km), neuer Satz angelegt", satz, archiv[0]["km"]) - + _LOGGER.info("Radsatz %s archiviert (%s km), neuer Satz angelegt", satz, archiv[0]["km"]) async def archiv_aktualisieren(k: Koordinator, id_: str | None, daten: dict) -> None: """Bearbeitet einen archivierten Reifensatz-Eintrag (Übersichtszeile auf - der Reifen-Seite, aufgeklappt -> "Bearbeiten").""" + der Räder-Seite, aufgeklappt -> "Bearbeiten").""" if not id_: _LOGGER.warning("reifen_archiv_aktualisieren ohne id aufgerufen") return @@ -167,7 +233,7 @@ async def archiv_aktualisieren(k: Koordinator, id_: str | None, daten: dict) -> archiv = profil.setdefault("reifen", {}).setdefault("archiv", []) eintrag = next((e for e in archiv if e.get("id") == id_), None) if eintrag is None: - _LOGGER.warning("Archivierter Reifensatz '%s' nicht gefunden", id_) + _LOGGER.warning("Archivierter Radsatz '%s' nicht gefunden", id_) return erlaubte_felder = ( @@ -180,7 +246,7 @@ async def archiv_aktualisieren(k: Koordinator, id_: str | None, daten: dict) -> await k.ablage.profil_schreiben(profil) await k.profil_veroeffentlichen(profil) - _LOGGER.info("Archivierter Reifensatz '%s' aktualisiert", id_) + _LOGGER.info("Archivierter Radsatz '%s' aktualisiert", id_) async def archiv_loeschen(k: Koordinator, id_: str | None) -> None: @@ -194,12 +260,12 @@ async def archiv_loeschen(k: Koordinator, id_: str | None) -> None: archiv = reifen.get("archiv", []) uebrig = [e for e in archiv if e.get("id") != id_] if len(uebrig) == len(archiv): - _LOGGER.warning("Archivierter Reifensatz '%s' nicht gefunden", id_) + _LOGGER.warning("Archivierter Radsatz '%s' nicht gefunden", id_) return reifen["archiv"] = uebrig await k.ablage.profil_schreiben(profil) await k.profil_veroeffentlichen(profil) - _LOGGER.info("Archivierter Reifensatz '%s' gelöscht", id_) + _LOGGER.info("Archivierter Radsatz '%s' gelöscht", id_) def zustaende(profil: dict | None) -> dict[str, object]: diff --git a/custom_components/audi_dashboard/screening.py b/custom_components/audi_dashboard/screening.py index 135e840..e56fc8e 100644 --- a/custom_components/audi_dashboard/screening.py +++ b/custom_components/audi_dashboard/screening.py @@ -31,6 +31,7 @@ import datetime import logging from typing import TYPE_CHECKING +from . import reifen, verbrauchskorrektur from .verlauf import ( UNPLAUSIBLE_KMH, durchschnitt_kmh, @@ -148,6 +149,24 @@ async def durchfuehren(k: Koordinator) -> None: for fahrt in ohne_position: await _position_screenen(k, lat_sensor, lon_sensor, fahrt) + # Erst NACH der Positionsermittlung: eine Fahrt, die gerade eben ihre + # Koordinaten bekommen hat, soll im selben Durchlauf auch ihren Ort + # bekommen und nicht erst beim naechsten. + k.geokodierung.durchlauf_beginnen() + ohne_ort = [ + f + for f in fahrten + if (f.get("start_lat") is not None and not f.get("start_stadt")) + or (f.get("end_lat") is not None and not f.get("end_stadt")) + ] + # Neueste zuerst: die sieht der Nutzer als naechstes. Ist das Budget + # aufgebraucht, warten die alten auf den naechsten Durchlauf. + ohne_ort.sort(key=lambda f: f.get("ts_start") or "", reverse=True) + for fahrt in ohne_ort: + if k.geokodierung.rest <= 0: + break + await _orte_screenen(k, fahrt) + # Durchschnitt braucht keinen Sensor - er folgt aus Strecke und Dauer, # die beide schon dastehen. Deshalb vor dem Geschwindigkeitssensor und # unabhaengig davon, ob einer zugeordnet ist. @@ -180,11 +199,19 @@ async def durchfuehren(k: Koordinator) -> None: if tank_liter_sensor: ohne_verbrauch = [ f for f in fahrten - if f.get("verbrauch_l_100km") is None and f.get("distance_km") + if f.get("verbrauch_roh_l_100km") is None and f.get("distance_km") ] for fahrt in ohne_verbrauch: await _verbrauch_screenen(k, tank_liter_sensor, fahrt) + # Zuletzt: die Eichung braucht die Rohwerte aller Fahrten eines + # Betankungsintervalls und ist damit auf alle Schritte davor angewiesen. + await verbrauchskorrektur.anwenden(k) + + # Die Laufleistung der Raeder ist die Summe der Fahrten - sie muss also + # nachziehen, sobald eine Strecke dazukommt oder sich aendert. + await reifen.nachtragen(k) + await _lueckenlos_verketten(k) await k.fahrten_veroeffentlichen() @@ -324,6 +351,44 @@ async def _position_screenen( fahrt.update(aenderungen) +async def _orte_screenen(k: Koordinator, fahrt: dict) -> None: + """Traegt Start- und Zielort nach, sobald die Koordinaten dastehen. + + Der Ort gehoert zu den Fahrtdaten, nicht in den Zwischenspeicher jedes + einzelnen Geraets - Begruendung im Kopf von geokodierung.py. + + start_address/end_address stehen in fahrterkennung.HANDFELDER: eine von + Hand eingetragene Anschrift ("Zuhause") darf hier nie ueberschrieben + werden. Zwei Sperren dagegen, absichtlich beide: hier wird nur ein + LEERES Feld gefuellt, und fahrt_aktualisieren() laesst ohnehin jedes + Feld in edited_fields unberuehrt. + + Der Ortsname (start_stadt) wird auch dann gesetzt, wenn die Anschrift + von Hand stammt - er beschreibt die Koordinate, nicht die Eingabe, und + die Liste braucht ihn zum Ausrichten der Spalten.""" + enden = ( + ("start", fahrt.get("start_lat"), fahrt.get("start_lon")), + ("end", fahrt.get("end_lat"), fahrt.get("end_lon")), + ) + aenderungen: dict = {} + for seite, lat, lon in enden: + if lat is None or lon is None: + continue + if fahrt.get(f"{seite}_address") and fahrt.get(f"{seite}_stadt"): + continue + ort = await k.geokodierung.aufloesen(lat, lon) + if ort is None: + continue + if not fahrt.get(f"{seite}_address") and ort.get("anschrift"): + aenderungen[f"{seite}_address"] = ort["anschrift"] + if not fahrt.get(f"{seite}_stadt") and ort.get("stadt"): + aenderungen[f"{seite}_stadt"] = ort["stadt"] + + if aenderungen: + await k.ablage.fahrt_aktualisieren(fahrt["trip_id"], aenderungen) + fahrt.update(aenderungen) + + async def _verbrauch_screenen( k: Koordinator, tank_liter_sensor: str, fahrt: dict ) -> None: @@ -346,9 +411,19 @@ async def _verbrauch_screenen( verbrauch = verbrauch_aus_literstaenden( wert_ab(verlauf, start), wert_bei(verlauf, ende), fahrt.get("distance_km") ) - if verbrauch is not None: - await k.ablage.fahrt_aktualisieren(fahrt["trip_id"], {"verbrauch_l_100km": verbrauch}) - fahrt["verbrauch_l_100km"] = verbrauch + if verbrauch is None: + return + + # Der Rohwert wird immer geschrieben, der Anzeigewert nur, solange noch + # kein Faktor vorliegt - sonst ueberschriebe das Screening eine bereits + # an den Betankungen geeichte Zahl mit der ungeeichten. + aenderungen = {"verbrauch_roh_l_100km": verbrauch} + faktor = fahrt.get("verbrauch_faktor") + aenderungen["verbrauch_l_100km"] = ( + round(verbrauch * float(faktor), 1) if faktor else verbrauch + ) + await k.ablage.fahrt_aktualisieren(fahrt["trip_id"], aenderungen) + fahrt.update(aenderungen) async def _vmax_screenen(k: Koordinator, tempo_sensor: str, fahrt: dict) -> None: diff --git a/custom_components/audi_dashboard/tankerkennung.py b/custom_components/audi_dashboard/tankerkennung.py index 1e6cca8..ba48791 100644 --- a/custom_components/audi_dashboard/tankerkennung.py +++ b/custom_components/audi_dashboard/tankerkennung.py @@ -153,14 +153,25 @@ async def tankvolumen_geaendert( await k.tiefststand_liter_setzen(aktuell) -async def distanz_seit_tankung(k: Koordinator, odometer_km: float | None) -> float | None: +async def distanz_seit_tankung( + k: Koordinator, odometer_km: float | None, jetzt: bool = True +) -> float | None: """Bevorzugt TANK_DISTANZ_SENSOR (vom Fahrzeug selbst berechnet), fällt ohne ihn auf die eigene Kilometerstand-Subtraktion zurück - dieselbe "Sensor bevorzugt, Berechnung als Rückfall"-Präferenz wie bei - TANK_LITER_SENSOR gegenüber TANK_SENSOR oben.""" - sensor = _als_zahl(zustand_oder_none(k.hass, k.zuordnung.werte.TANK_DISTANZ_SENSOR)) - if sensor is not None: - return sensor + TANK_LITER_SENSOR gegenüber TANK_SENSOR oben. + + `jetzt=False` fuer einen nachgetragenen Tankvorgang: der Sensor kennt nur + seinen aktuellen Stand, und der gehoert nicht zu einer Tankung von + vorgestern. Die Kilometerstand-Subtraktion dagegen vergleicht mit dem + vorherigen Tankvorgang und ist damit zeitunabhaengig - sie bleibt auch + dann richtig.""" + if jetzt: + sensor = _als_zahl( + zustand_oder_none(k.hass, k.zuordnung.werte.TANK_DISTANZ_SENSOR) + ) + if sensor is not None: + return sensor return await k.ablage.distanz_seit_letzter_tankung(odometer_km) @@ -193,7 +204,7 @@ async def _automatisch_anlegen( tankvorgang["liters"] = round(liter_schaetzung, 1) await k.ablage.tankvorgang_anhaengen(tankvorgang) - await k.tankvorgaenge_veroeffentlichen() + await k.tankvorgang_nachbereiten() _LOGGER.info( "Tankvorgang %s automatisch erkannt (%s)", tankvorgang["tank_id"], anlass ) diff --git a/custom_components/audi_dashboard/verbrauchskorrektur.py b/custom_components/audi_dashboard/verbrauchskorrektur.py new file mode 100644 index 0000000..b7a1905 --- /dev/null +++ b/custom_components/audi_dashboard/verbrauchskorrektur.py @@ -0,0 +1,368 @@ +"""Der Verbrauch einer Fahrt, korrigiert an den Tankbelegen. + +DAS PROBLEM. Der Verbrauch einer einzelnen Fahrt entsteht aus der Differenz +zweier Tankstaende. Der Geber liefert zwar Liter (das Steuergeraet hat seine +Kennlinie schon angewandt), aber er rundet, und er ist stark gedaempft - sonst +zappelte die Anzeige im Cockpit bei jeder Kurve. Auf einer Fahrt von sieben +Kilometern faellt dieser Verzug anteilig weit staerker ins Gewicht als auf +dreihundert. + +DIE RECHNUNG, so wie der Eigentuemer sie ohnehin von Hand macht: + + Faktor = getankte Liter laut Beleg / Summe der Liter aus den Einzelfahrten + +Die Annahme dahinter ist seine: die Ungenauigkeit des Gebers trifft jede Fahrt +gleichermassen, ist also ein Faktor und kein Summand. Beide Seiten decken +denselben Zeitraum ab; was der Faktor korrigiert, ist genau der Unterschied +zwischen dem, was der Geber gemeldet hat, und dem, was wirklich in den Tank +gelaufen ist. + +WARUM NUR VON VOLLTANKUNG ZU VOLLTANKUNG. Nur dann gilt "eingefuellte Liter = +seit dem letzten Mal verbrauchte Liter": eine Betankung, die den Tank wieder +bis zum selben Punkt fuellt, ersetzt genau das, was seither entnommen wurde. +Nach einer Teilbetankung waere der Zaehler eine beliebige Zahl und der Faktor +falsch. Als voll gilt ein Tankvorgang, wenn der Stand danach mindestens +VOLL_ANTEIL des Tankvolumens erreicht (aus dem Fahrzeugprofil). + +DIE LITER MUESSEN AUS DEM BELEG STAMMEN, nicht aus dem Geber. Ein automatisch +erkannter Tankvorgang traegt in `liters` den vom Geber gemessenen Anstieg - +den gegen die ebenfalls vom Geber gerechneten Fahrten zu stellen, waere ein +Zirkelschluss und ergaebe immer ungefaehr 1,0. Gezaehlt wird deshalb nur, was +aus einem Beleg geparst oder von Hand eingetragen wurde. + +STANDLAUF IM STILLSTAND stoert die Rechnung nicht: laeuft der Motor bei +eingeschalteter Zuendung, bleibt die Fahrt offen, der Verbrauch steht also in +der Summe der Einzelfahrten UND in der getankten Menge und kuerzt sich heraus. +Die betroffene Fahrt zeigt dann zu Recht einen hohen Verbrauch. Verzerrend ist +nur Verbrauch ohne offene Fahrt - Standheizung bei Zuendung aus; der fehlt im +Nenner und verteilt sich ueber den Faktor auf alle Fahrten des Zeitraums. Der +Eigentuemer hat das am 01.09.2026 ausdruecklich so gewollt. + +WAS GEPRUEFT WIRD, UND WARUM NICHT DER FAKTOR SELBST. Die beiden Tore oben +sichern den ZAEHLER: die Liter stammen aus einem Beleg, und voll zu voll +heisst, dass sie dem Verbrauch entsprechen. Verwundbar bleibt der NENNER - +fehlt im Intervall eine Fahrt (Dongle offline, HA unten, Erkennung +ausgesetzt), ist die Summe zu klein und der Faktor zu gross. Er multipliziert +dann jede Fahrt des Zeitraums mit. + +Eine feste Ober- und Untergrenze am Faktor (erst 0,7 bis 1,5) traf das +Symptom, nicht die Ursache - und haette einen echten, groesseren Geberfehler +mit abgeklemmt. Geprueft wird deshalb, ob der Nenner ueberhaupt vollstaendig +ist: die Summe der Fahrtstrecken gegen die Tacho-Spanne desselben Intervalls. + + Deckung = Summe der Fahrtstrecken / (Kilometerstand bis - Kilometerstand von) + +Das Mass ist belegt: beim Umbau des Radzaehlers am 01.09.2026 lag es in den +sauberen Bereichen bei 99 bis 103 %. Liegt es dort, ist der Faktor +vertrauenswuerdig - egal wie er ausfaellt, ohne obere oder untere Klemme. +Liegt es daneben, beschreibt der Faktor fehlende Daten und nicht den Geber, +und das Intervall wird uebersprungen und protokolliert. + +WAS GESPEICHERT WIRD. verbrauch_roh_l_100km ist die reine Messung und bleibt +unangetastet, damit die Rechnung wiederholbar ist. verbrauch_faktor ist der +angewandte Faktor. verbrauch_l_100km ist das Produkt aus beiden - der Wert, +den die Oberflaechen anzeigen; die brauchen von alldem nichts zu wissen. +""" + +from __future__ import annotations + +import datetime +import logging +from typing import TYPE_CHECKING + +from .tankerkennung import STANDARD_TANKVOLUMEN_LITER +from .verlauf import verlauf_lesen, wert_bei + +if TYPE_CHECKING: + from .koordinator import Koordinator + +_LOGGER = logging.getLogger(__name__) + +# Wie vollstaendig die erkannten Fahrten die tatsaechlich gefahrene Strecke +# des Intervalls abdecken muessen. Der Wert sollte per Definition bei 1,0 +# liegen; eine Abweichung in BEIDE Richtungen heisst, dass die Fahrtmenge +# nicht zur Wirklichkeit passt - zu wenig (fehlende Fahrten) ebenso wie zu +# viel (doppelte oder falsch vermessene Fahrten, im Altbestand real +# vorgekommen: 256 %). +DECKUNG_MIN = 0.90 +DECKUNG_MAX = 1.10 + +# Wie weit der Kilometerstand eines Tankvorgangs vom Tacho zu seinem eigenen +# Zeitstempel abweichen darf. Der Tacho springt in ganzen Kilometern, und +# zwischen Zapfsaeule und dem Datensatz, den das Geraet danach schickt, liegen +# selten mehr als ein paar - siehe _datum_passt(). +ODOMETER_TOLERANZ_KM = 5.0 + +# Ab welchem Anteil des Tankvolumens ein Tankvorgang als Volltankung gilt. +# 95 % laesst Luft fuer die Ungenauigkeit des Gebers und fuer den Umstand, dass +# "voll" an der Zapfsaeule nicht auf den Liter reproduzierbar ist. +VOLL_ANTEIL = 0.95 + +# Der gedaempfte Tankstand steht nach dem Tanken nicht sofort. Eine Minute ist +# die Vorgabe des Eigentuemers (01.09.2026). +# +# Zu kurz zu greifen ist hier die harmlose Richtung: liest die Pruefung einen +# noch nicht ganz nachgezogenen Stand, faellt er unter die 95-%-Grenze und das +# Intervall gilt als "nicht voll" - es entsteht dann kein Faktor. Zu lang zu +# warten waere die gefaehrliche Richtung, denn nach der Abfahrt sinkt der Stand +# wieder und eine echte Volltankung saehe nachtraeglich unvoll aus. +SETZZEIT = datetime.timedelta(minutes=1) + +# Wie weit ueber die Intervallgrenzen hinaus der Verlauf geholt wird, damit +# wert_bei() links vom Fensterrand einen Anker findet. +PUFFER = datetime.timedelta(hours=6) + + +def _zeit(wert: str | None) -> datetime.datetime | None: + if not wert: + return None + try: + gelesen = datetime.datetime.fromisoformat(str(wert)) + except ValueError: + return None + if gelesen.tzinfo is None: + gelesen = gelesen.replace(tzinfo=datetime.UTC) + return gelesen + + +def beleg_liter(tankvorgang: dict) -> float | None: + """Die getankte Menge, aber nur wenn sie NICHT vom Geber stammt. + + Ein automatisch erkannter Tankvorgang traegt in `liters` den gemessenen + Anstieg des Tankstands. Den gegen die ebenfalls aus dem Tankstand + gerechneten Fahrten zu stellen, ergaebe zwangslaeufig ungefaehr 1,0 - der + Faktor koennte gar nichts korrigieren. + """ + liter = tankvorgang.get("liters") + if liter is None: + return None + aus_beleg = bool(tankvorgang.get("receipt_key")) + von_hand = "liters" in (tankvorgang.get("edited_fields") or []) + manuell = tankvorgang.get("source") == "manual" + if not (aus_beleg or von_hand or manuell): + return None + try: + return float(liter) + except (TypeError, ValueError): + return None + + +def _liter_der_fahrt(fahrt: dict) -> float | None: + """Was diese Fahrt laut Messung verbraucht hat, in Litern.""" + roh = fahrt.get("verbrauch_roh_l_100km") + strecke = fahrt.get("distance_km") + if roh is None or not strecke or strecke <= 0: + return None + return float(roh) / 100.0 * float(strecke) + + +async def _tacho_spanne( + k: Koordinator, + km_sensor: str, + von: datetime.datetime, + bis: datetime.datetime, +) -> tuple[float, float] | None: + """Die Tachostaende zu Beginn und Ende des Intervalls, oder None. + + Zwei Dinge haengen daran: die Deckungspruefung (passt die Fahrtmenge zur + gefahrenen Strecke?) und die Datumspruefung (passt der eingetragene + Zeitpunkt eines Tankvorgangs zu seinem eigenen Kilometerstand?). + + Der Kilometerstand ist der Tacho des Fahrzeugs: er zaehlt jeden Kilometer, + auch die einer nicht erkannten Fahrt. Genau deshalb taugt er als Mass + dafuer, ob die Fahrtmenge vollstaendig ist.""" + verlauf = await verlauf_lesen(k.hass, km_sensor, von - PUFFER, bis + PUFFER) + if not verlauf: + return None + odo_von = wert_bei(verlauf, von) + odo_bis = wert_bei(verlauf, bis) + if odo_von is None or odo_bis is None: + return None + if odo_bis - odo_von <= 0: + # Kein Fortschritt oder ein Rueckwaertssprung (Fahrzeugwechsel) - der + # Tacho taugt hier nicht als Mass. + return None + return odo_von, odo_bis + + +def _datum_passt(tankvorgang: dict, tacho: float) -> bool: + """Passt der eingetragene Zeitpunkt zum Kilometerstand des Tankvorgangs? + + Die Fahrten werden ueber die ZEIT zugeordnet, nicht ueber den Tacho. Traegt + jemand die Tankung von Dienstag am Freitag mit "jetzt" ein, wandern die + Liter auf die Fahrten von Mittwoch bis Freitag - und die Deckungspruefung + merkt es nicht, weil sie den Tacho zu denselben verschobenen Zeitpunkten + liest: Zaehler und Nenner sind konsistent verschoben. + + Der Tankvorgang traegt aber einen zweiten, unabhaengigen Anker: seinen + eigenen Kilometerstand. Weicht der stark vom Tacho zum eingetragenen + Zeitpunkt ab, passen Datum und Kilometerstand nicht zusammen. + + Ist kein Kilometerstand hinterlegt (der Nutzer kannte ihn nicht, siehe + verlauf.als_kilometerstand()), gibt es nichts zu vergleichen - dann gilt + der Zeitpunkt, wie er eingetragen wurde. Ein automatisch erkannter + Tankvorgang besteht die Pruefung ohnehin immer: sein Kilometerstand und + sein Zeitstempel stammen aus demselben Datensatz.""" + eigener = tankvorgang.get("odometer_km") + if eigener is None: + return True + return abs(float(eigener) - tacho) <= ODOMETER_TOLERANZ_KM + + +async def _ist_voll(k: Koordinator, tank_sensor: str, zeitpunkt: datetime.datetime, + volumen: float) -> bool: + """Stand der Tank nach dieser Betankung (nahezu) voll? + + Gemessen SETZZEIT nach dem Zeitpunkt des Tankvorgangs - siehe dort, warum + die Zahl lieber knapp als grosszuegig ist.""" + verlauf = await verlauf_lesen( + k.hass, tank_sensor, zeitpunkt - PUFFER, zeitpunkt + SETZZEIT + PUFFER + ) + if not verlauf: + return False + stand = wert_bei(verlauf, zeitpunkt + SETZZEIT) + return stand is not None and stand >= volumen * VOLL_ANTEIL + + +async def anwenden(k: Koordinator) -> None: + """Rechnet jedes noch unbewertete Voll-zu-Voll-Intervall durch. + + Bewusst nur die unbewerteten: das Screening laeuft bei jeder Aenderung des + Kilometerstands, und jedes Intervall braucht eigene Abfragen des + Tankverlaufs. Ohne diese Einschraenkung liefen bei dreizehn Betankungen + dieselben Abfragen bei jedem Fahrtende erneut. + """ + tank_sensor = k.zuordnung.werte.TANK_LITER_SENSOR + if not tank_sensor: + return + km_sensor = k.zuordnung.werte.KM_SENSOR + if not km_sensor: + # Ohne Tacho laesst sich nicht pruefen, ob die Fahrtmenge vollstaendig + # ist - siehe Modulkopf. Lieber kein Faktor als ein ungepruefter. + _LOGGER.debug("Kein Kilometerstand-Sensor zugeordnet - keine Verbrauchskorrektur") + return + + profil = await k.ablage.profil_lesen() + volumen = float( + (profil or {}).get("fahrzeug", {}).get("tankvolumen_liter") + or STANDARD_TANKVOLUMEN_LITER + ) + + tankvorgaenge = [t for t in await k.ablage.tankvorgaenge_lesen() if _zeit(t.get("ts"))] + if len(tankvorgaenge) < 2: + return + tankvorgaenge.sort(key=lambda t: t["ts"]) + + fahrten = await k.ablage.fahrten_lesen() + voll_bekannt: dict[str, bool] = {} + + for vorher, nachher in zip(tankvorgaenge, tankvorgaenge[1:]): + von = _zeit(vorher.get("ts")) + bis = _zeit(nachher.get("ts")) + if von is None or bis is None or bis <= von: + continue + + # Der Beleg der SPAETEREN Betankung nennt, was seit der frueheren + # verbraucht wurde - er ist der Zaehler. + getankt = beleg_liter(nachher) + if getankt is None or getankt <= 0: + continue + + # Nur Fahrten, die GANZ im Intervall liegen. Eine Fahrt, die ueber + # eine Betankung hinweggeht, laesst sich keinem der beiden Intervalle + # zuordnen - sie bleibt ohne Faktor, was richtig ist. + im_fenster = [] + for f in fahrten: + start = _zeit(f.get("ts_start")) + ende = _zeit(f.get("ts_end")) + if start is None or ende is None: + continue + if start >= von and ende <= bis: + im_fenster.append(f) + + mit_messung = [f for f in im_fenster if _liter_der_fahrt(f) is not None] + if not mit_messung: + continue + if all(f.get("verbrauch_faktor") is not None for f in mit_messung): + continue + + # Deckt die Fahrtmenge die tatsaechlich gefahrene Strecke ab? Das ist + # die Pruefung des NENNERS und kommt vor der teuren Voll-Pruefung, weil + # eine Luecke in den Fahrten der haeufigere Fall ist. + strecke_fahrten = sum( + float(f["distance_km"]) for f in im_fenster if f.get("distance_km") + ) + spanne = await _tacho_spanne(k, km_sensor, von, bis) + if spanne is None: + _LOGGER.debug( + "Tachospanne fuer %s bis %s nicht bestimmbar - keine Korrektur", + von.isoformat(), bis.isoformat(), + ) + continue + odo_von, odo_bis = spanne + + # Passt das eingetragene Datum zum Kilometerstand? Nur bei Handeingabe + # kann es auseinanderfallen - siehe _datum_passt(). + schief = [ + (v, t) for v, t in ((vorher, odo_von), (nachher, odo_bis)) + if not _datum_passt(v, t) + ] + if schief: + vorgang, tacho = schief[0] + _LOGGER.warning( + "Tankvorgang %s nennt %s km, der Tacho stand zu seinem Zeitpunkt " + "(%s) aber bei %s km - Datum und Kilometerstand passen nicht " + "zusammen, deshalb keine Korrektur", + vorgang.get("tank_id"), vorgang.get("odometer_km"), + vorgang.get("ts"), round(tacho, 1), + ) + continue + + deckung = strecke_fahrten / (odo_bis - odo_von) + if not DECKUNG_MIN <= deckung <= DECKUNG_MAX: + _LOGGER.warning( + "Die erkannten Fahrten decken %.0f %% der gefahrenen Strecke zwischen " + "%s und %s ab (%.1f km aus %d Fahrten) - ausserhalb von %.0f-%.0f %%. " + "Der Verbrauchsfaktor wuerde fehlende Daten beschreiben und nicht den " + "Geber, deshalb keine Korrektur", + deckung * 100, von.isoformat(), bis.isoformat(), + strecke_fahrten, len(im_fenster), DECKUNG_MIN * 100, DECKUNG_MAX * 100, + ) + continue + + # Erst jetzt der teure Teil: beide Enden muessen Volltankungen sein. + for vorgang, zeitpunkt in ((vorher, von), (nachher, bis)): + kennung = str(vorgang.get("tank_id")) + if kennung not in voll_bekannt: + voll_bekannt[kennung] = await _ist_voll(k, tank_sensor, zeitpunkt, volumen) + if not (voll_bekannt[str(vorher.get("tank_id"))] + and voll_bekannt[str(nachher.get("tank_id"))]): + _LOGGER.debug( + "Kein Voll-zu-Voll-Intervall zwischen %s und %s - keine Korrektur", + von.isoformat(), bis.isoformat(), + ) + continue + + gerechnet = sum(_liter_der_fahrt(f) or 0.0 for f in mit_messung) + if gerechnet <= 0: + continue + + # Kein Ober- oder Unterwert am Faktor: der Nenner ist oben geprueft, + # der Zaehler durch Beleg und Volltankung. Was jetzt herauskommt, ist + # die Messung. + gerundet = round(getankt / gerechnet, 4) + for f in mit_messung: + roh = float(f["verbrauch_roh_l_100km"]) + aenderungen = { + "verbrauch_faktor": gerundet, + "verbrauch_l_100km": round(roh * gerundet, 1), + } + await k.ablage.fahrt_aktualisieren(f["trip_id"], aenderungen) + f.update(aenderungen) + + _LOGGER.info( + "Verbrauchsfaktor %.3f auf %d Fahrten zwischen %s und %s angewandt " + "(%.1f l laut Beleg, %.1f l gerechnet, Streckendeckung %.0f %%)", + gerundet, len(mit_messung), von.isoformat(), bis.isoformat(), + getankt, gerechnet, deckung * 100, + ) diff --git a/custom_components/audi_dashboard/verlauf.py b/custom_components/audi_dashboard/verlauf.py index 2b608b2..7657618 100644 --- a/custom_components/audi_dashboard/verlauf.py +++ b/custom_components/audi_dashboard/verlauf.py @@ -93,6 +93,33 @@ def fahrtsignal(werte: object) -> str: return getattr(werte, "TRIP_SENSOR", "") or getattr(werte, "ZUENDUNG_SENSOR", "") +def als_kilometerstand(wert: object) -> float | None: + """Ein eingegebener Kilometerstand, oder None wenn er unbekannt ist. + + **Null heisst unbekannt.** Der Eigentuemer wollte einen Weg, einen + Tankvorgang ohne Kilometerstand einzutragen, und eine 0 im Zahlenfeld ist + dafuer die naheliegende Geste (01.09.2026). + + Sie wird deshalb hier abgefangen und NICHT gespeichert. Sechs Stellen im + Projekt lesen `odometer_km` und behandeln ausschliesslich None als + unbekannt - eine echte 0 waere fuer sie ein Fahrzeug mit Tachostand null: + die "gefahrene Distanz seit der letzten Tankung" waere der gesamte + Tachostand, und der Langzeitverbrauch rechnete gegen eine Spanne, die es + nie gab. Eine Sonderbehandlung an sechs Lesestellen waere sechsmal die + Gelegenheit, sie zu vergessen; eine Normalisierung an der Eingabe ist + einmal. + + Negative Werte fallen aus demselben Grund heraus - ein Tacho zaehlt nicht + rueckwaerts.""" + if wert is None or wert == "": + return None + try: + zahl = float(wert) # type: ignore[arg-type] + except (TypeError, ValueError): + return None + return zahl if zahl > 0 else None + + def zeit_normalisiert(wert: object) -> datetime.datetime | None: """Akzeptiert ISO-Zeit mit oder ohne Zeitzone und normalisiert auf UTC.