Fahrten, Statistik, Trip-Timer (2026.8.31.3)

Der 15-Minuten-Timer war doppelt: der FMM003 wartet laut Konfiguration
(Trip \ Odometer, Ignition OFF Timeout) selbst 900 s, die App noch einmal
15 Minuten. Zusammen eine halbe Stunde. Die Pausenregel ist damit entfallen -
in der Live-Erkennung, im Historienimport und in beiden Oberflaechen. Der
Schwellwert "ab wann ist es ein Parkplatz" hing an derselben Einstellung, hat
damit aber nichts zu tun und steht jetzt als eigene Zahl.

Hoechst- und Durchschnittsgeschwindigkeit je Fahrt. Der Durchschnitt folgt aus
Strecke und Dauer, vmax aus der neuen Rolle GESCHWINDIGKEIT_SENSOR - laut
Konfiguration liest das Geraet die Geschwindigkeit vom OBD/CAN. Es ist der
groesste gemeldete Wert, nicht die tatsaechliche Spitze: alle zehn Sekunden
ein Datensatz. So ist es auch beschriftet.

Der Langzeitverbrauch war um einen ganzen Tankinhalt zu hoch. Gemessen wird
die Strecke ZWISCHEN erstem und letztem Tankstop; verbraucht wurde darauf,
was ab dem ZWEITEN hineinkam - der erste fuellte die Strecke davor. Bei 13
Tankvorgaengen rund 8 Prozent, im Testfall 16,7 statt 8,3 l/100 km. Der Test
hatte die falsche Rechnung festgeschrieben und ist mitkorrigiert. Eine
negative Strecke (falscher Kilometerstand an einem Tankvorgang) gilt jetzt
als unplausibel statt als Null ohne Erklaerung.

Verbrauch je Fahrt bekommt Grenzen: am Sensor nachgemessen loest
can_fuel_volume 0,1 l auf, ein Schritt entspricht also 10/Strecke l/100 km
Fehler. Unter 3 km sagt die Differenz nichts mehr, ueber 60 l/100 km ist es
kein Verbrauch.

Statistik: zusaetzlich "Absolut", und die Einheit steht jetzt in eckigen
Klammern an der Rubrik statt vier Mal am Zeitraum. Fuenf Spalten passen auf
einem Telefon nicht nebeneinander, das Raster bricht um.

Radfoto in Reifen war ein reines <Bild> - Ersetzen und Loeschen von dort aus
gar nicht erreichbar. Jetzt BildMitMenue wie im Panel.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-31 15:03:28 +02:00
parent 17dc42e645
commit 4af38d7e65
23 changed files with 379 additions and 129 deletions
+66
View File
@@ -6223,3 +6223,69 @@ Was zwangslaeufig manuell bleibt: die App-Gruppe und die App-ID `app.datametric3
Apple-Portal (einmalig), das Keychain-„Immer erlauben" beim ersten Signieren (einmalig pro
Schluesselbund; der nicht-interaktive Weg verlangt das Anmeldepasswort auf der Kommandozeile und
scheidet damit aus), und `git push` der fertigen `.ipa`, weil das Telefon sie aus dem Repo laedt.
## AS. Fahrten, Statistik und der Trip-Timer des FMM003 (2026.8.31.3)
### Der 15-Minuten-Timer war doppelt
Die App wartete nach „Zündung aus" 15 Minuten, bevor sie eine Fahrt beendete — und der FMM003 tut
dasselbe: in seiner Konfiguration steht unter **Trip \ Odometer** ein **Ignition OFF Timeout von
900 s**. Zusammen eine halbe Stunde. Entfallen sind deshalb `pausenzeit_sekunden()`, die abbrechbare
Wartezeit in `zuendung_geaendert()`, `_ende_bestaetigen()`, die Verschmelzung in
`historienimport._fahrtfenster()` und die Einstellung in beiden Oberflächen.
**Zurückholen**, falls die Erkennung je wieder ohne das Gerät auskommen muss: eine abbrechbare
Wartezeit vor `fahrt_beenden()` legen (`k.warte_ende_ab` / `k.warte_ende_ab_abbrechen` sind dafür
noch da) und `fahrten_pausenzeit_min` wieder anbieten. Der Schwellwert „ab wann ist es ein
Parkplatz" hing an derselben Einstellung, hat damit aber nichts zu tun und steht jetzt als eigene
Zahl (`PARKPLATZ_AB_MIN = 15`) in beiden Codebasen.
### Höchst- und Durchschnittsgeschwindigkeit
- **Durchschnitt** braucht keinen Sensor: Strecke ÷ Dauer, `durchschnitt_kmh()` gab es schon.
`avg_speed_kmh` war seit jeher im Schema und wurde nie gefüllt — jetzt in `screening.durchfuehren()`
für jede Fahrt mit Strecke und Dauer.
- **vmax** braucht einen: neue Rolle `GESCHWINDIGKEIT_SENSOR`. Laut Konfiguration liest der FMM003
die Geschwindigkeit vom **OBD/CAN**, nicht aus GPS (System → Speed Source) — Beispielname im
Katalog entsprechend `vehicle_speed_read_from_can`.
- Es ist der **größte gemeldete** Wert, nicht die tatsächliche Spitze: das Gerät schreibt während
der Fahrt alle zehn Sekunden einen Datensatz (Data Acquisition → Moving → Min Period = 10 s). So
ist es auch beschriftet.
### Der Langzeitverbrauch war um einen ganzen Tankinhalt zu hoch
Gerechnet wurde `alle Liter ÷ (odo_letzter odo_erster)`. Die Strecke liegt aber **zwischen**
erstem und letztem Tankstop, und verbraucht wurde darauf genau das, was ab dem **zweiten** Tankstop
hineinkam — der erste füllte die Strecke davor. Bei 13 Tankvorgängen sind das rund 8 % zu viel; im
Testfall 16,7 statt 8,3 l/100 km. Korrigiert in beiden Codebasen, der Test hatte die falsche
Rechnung festgeschrieben und ist mitkorrigiert (plus zwei neue Fälle).
Dazu zwei Absicherungen: eine **negative Strecke** (falscher Kilometerstand an einem Tankvorgang,
in diesem Projekt schon vorgekommen — Abschnitt AF) wird auf 0 gesetzt statt als Zahl angezeigt, und
sie gilt jetzt als *unplausibel*, damit statt eines kommentarlosen „0 km / " der erklärende Hinweis
erscheint.
### Verbrauch je Fahrt: Grenzen statt Vertrauen
`verbrauch_aus_literstaenden()` hatte weder Unter- noch Obergrenze. Am echten Sensor nachgemessen:
`can_fuel_volume` löst **0,1 l** auf — ein Quantisierungsschritt entspricht also 10/Strecke l/100 km
Fehler. Unter **3 km** (±3,3) sagt die Differenz nichts mehr, über **60 l/100 km** ist es kein
Verbrauch, sondern ein Messfehler. Beides jetzt als benannte Konstante mit dieser Herleitung.
### Statistik: „Absolut" und Einheiten in eckigen Klammern
Die Einheit stand vier Mal am Zeitraum („Jahr h", „Monat €") und fehlte in der Überschrift, die man
zuerst liest. Jetzt an der Rubrik: **Gefahrene Distanz [km]**, **Fahrzeit [h]**, **Getankte Liter
[l]**, **Kraftstoffkosten [€]**, **Näherung je Fahrt, je Zeitraum [l/100 km]**. Die Zeiträume heißen
nur noch Jahr / Monat / Woche / Tag / **Absolut**.
Fünf Spalten passen auf einem Telefon nicht nebeneinander: bei rund 300 px Innenbreite blieben je
51 px, und „209.177" braucht bei 16 px Audi Type Wide etwa 60. Das Raster bricht deshalb um
(`auto-fit, minmax(84px, 1fr)`) — auf dem Telefon drei plus zwei, auf einem breiten Bildschirm alle
fünf in einer Reihe.
### Radfoto war nicht antippbar
In `Reifen.tsx` stand ein reines `<Bild>`; das Panel hat an derselben Stelle seit jeher
`data-bildklick`. Ersetzen und Löschen waren von dort aus gar nicht erreichbar — jetzt
`BildMitMenue`.