Batteriespannung: 8V-Plausibilitätsgrenze; Fahrten: echte Start-/Zielposition und Streckenlinie

Batteriespannung: Werte unter 8V (Sensor-/Verbindungsfehler, nicht physikalisch
plausibel für eine 12V-Bleibatterie) werden nicht mehr erfasst - live und beim
Import. "Neue Räder anlegen"-Knopf sitzt jetzt auf derselben Zeile wie "Montiert".

Fahrten: start_lat/-lon, end_lat/-lon und route wurden bisher nur beim
rückwirkenden Import befüllt, nie bei live erkannten Fahrten (dem Normalfall) -
Screening trägt sie jetzt aus dem GPS-Verlauf nach, unabhängig vom
Kilometerstand-Status. fakeTrack() (eine erfundene Linie) ist entfernt, die
Karte zeichnet jetzt die echte Route oder eine ehrliche Gerade zwischen den
bekannten Punkten. CARTOs anonyme Kartenkacheln verlangen inzwischen einen
API-Schlüssel ("API key required" auf jeder Karte in beiden Apps) - auf
schlüssellose OpenStreetMap-Kacheln umgestellt. Start/Ziel zeigen jetzt Datum
und Uhrzeit über der Adresse; die fehlerhafte "Status"-Zeile ist entfernt.
Batteriespannungs-Diagramm nutzt auf großen Bildschirmen die volle
Spaltenbreite statt einer festen 400px-Deckelung.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
2026-08-27 17:23:32 +02:00
co-authored by Claude Sonnet 5
parent 17149937a6
commit f337820fc8
13 changed files with 328 additions and 77 deletions
@@ -106,6 +106,34 @@ def wert_bei(
return davor
def route_aus_verlauf(
lat_verlauf: list[Verlaufspunkt],
lon_verlauf: list[Verlaufspunkt],
start: datetime.datetime,
ende: datetime.datetime,
) -> list[list[float]] | None:
"""Baut eine chronologische Liste von [lat, lon]-Punkten für die
Fahrt-Detailkarte, aus zwei getrennt geführten Sensor-Verläufen (die
FMM003 liefert Breiten-/Längengrad als zwei unabhängige Sensoren, siehe
STANDORT_LAT_SENSOR/STANDORT_LON_SENSOR). Jeder Breitengrad-Punkt im
Fenster [start, ende] bekommt den zeitlich nächstgelegenen Längengrad-Wert
zugeordnet - beide Sensoren aktualisieren unabhängig voneinander, exakt
gleiche Zeitstempel sind nicht garantiert. None bei weniger als zwei
Punkten (keine sinnvolle Linie)."""
punkte: list[list[float]] = []
for ts, wert in lat_verlauf:
if not (start <= ts <= ende):
continue
lat = zahl(wert)
if lat is None:
continue
lon = naechster_wert(ts, lon_verlauf)
if lon is None:
continue
punkte.append([lat, lon])
return punkte if len(punkte) >= 2 else None
def naechster_wert(
zielzeit: datetime.datetime, verlauf: list[Verlaufspunkt]
) -> float | None: