Standort-Kachel: Live-Fahrzeugposition auf der Übersicht
Neue Kachel oberhalb von "Zuletzt" mit echter Leaflet-Mini-Karte, öffnet per Klick eine Vollbild-Standortansicht (Kartendarstellung wählen, auf Fahrzeug/User zentrieren, beide zeigen) mit einem ausziehbaren myAudi-Stil-Menü: Distanz zum Gerät, Adresse (Reverse- Geocoding via Nominatim), fährt/steht/Letzter-Parkplatz-Status, Tankfüllstand/Reichweite, Route- und Teilen-Aktionen. Backend: STANDORT_TRACKER-Einstellung (device_tracker-Entity) plus _standort()-Veröffentlichung, bewusst leer gelassen bis eine echte GPS-Quelle (FMM003/flespi) angebunden ist - Kachel zeigt bis dahin "kein GPS-Signal". Verifiziert in audi_ha_test mit einer manuell gesetzten Test-Position. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -100,6 +100,14 @@ OELWECHSEL_STRECKE_SENSOR = "sensor.audi_rs_4_avant_oil_change_distance"
|
||||
NAECHSTE_INSPEKTION_SENSOR = "sensor.audi_rs_4_avant_inspection_due"
|
||||
INSPEKTION_STRECKE_SENSOR = "sensor.audi_rs_4_avant_inspection_distance"
|
||||
|
||||
# Live-GPS-Position des Fahrzeugs (Übersicht -> Standort-Kachel). Erwartet
|
||||
# eine device_tracker.*-Entity mit "latitude"/"longitude"-Attributen (HA-
|
||||
# Konvention, siehe _standort() in frontend_veroeffentlichung.py) - bleibt
|
||||
# leer, solange keine Quelle angebunden ist (siehe AGENTS.md Abschnitt B,
|
||||
# FMM003/flespi offen); die Oberfläche zeigt dann "kein GPS-Signal" statt
|
||||
# eines falschen Werts, genau wie bei BATTERIE_SENSOR oben.
|
||||
STANDORT_TRACKER = ""
|
||||
|
||||
# Update-Funktion (Einstellungen -> "Update suchen", siehe
|
||||
# updateverwaltung.py): Git-Repository, in das dieses Projekt gepflegt wird -
|
||||
# z. B. ein privates GitHub-Repo, genau wie für die HACS-Integration bereits
|
||||
|
||||
@@ -77,6 +77,40 @@ def _abs_zahl(wert):
|
||||
return None if zahl is None else abs(zahl)
|
||||
|
||||
|
||||
def _standort():
|
||||
"""Live-GPS-Position des Fahrzeugs (Übersicht -> Standort-Kachel) - liest
|
||||
latitude/longitude/gps_accuracy von der in STANDORT_TRACKER hinterlegten
|
||||
device_tracker-Entity (HA-Konvention). Fehlt die Entity-ID oder ist sie
|
||||
(noch) nicht verfügbar, liefert diese Funktion durchgehend None statt
|
||||
eines geratenen Werts - genau das zustand_oder_none()-Muster von oben,
|
||||
hier als eigene Funktion, weil zusätzlich zum Zustand noch Attribute und
|
||||
der Aktualisierungszeitpunkt gebraucht werden: state.get() liefert dafür
|
||||
ein StateVal (str-Unterklasse) mit .last_updated als datetime-Attribut -
|
||||
kein eigenständiges state.last_updated(), das gibt es in pyscript nicht."""
|
||||
entity_id = einstellungen.STANDORT_TRACKER
|
||||
leer = {"lat": None, "lon": None, "genauigkeit_m": None, "zeit": None}
|
||||
if not entity_id:
|
||||
return leer
|
||||
try:
|
||||
wert = state.get(entity_id)
|
||||
attribute = state.getattr(entity_id)
|
||||
except NameError:
|
||||
return leer
|
||||
if not attribute or attribute.get("latitude") is None:
|
||||
return leer
|
||||
zeit = None
|
||||
try:
|
||||
zeit = wert.last_updated.isoformat()
|
||||
except AttributeError:
|
||||
pass
|
||||
return {
|
||||
"lat": _zu_zahl(attribute.get("latitude")),
|
||||
"lon": _zu_zahl(attribute.get("longitude")),
|
||||
"genauigkeit_m": _zu_zahl(attribute.get("gps_accuracy")),
|
||||
"zeit": zeit,
|
||||
}
|
||||
|
||||
|
||||
POSITIONEN = ["vorne links", "vorne rechts", "hinten links", "hinten rechts"]
|
||||
|
||||
|
||||
@@ -125,6 +159,8 @@ def fahrzeugstatus_veroeffentlichen():
|
||||
else:
|
||||
gesichert = all([e["ok"] for e in sicherheitscheck])
|
||||
|
||||
standort = _standort()
|
||||
|
||||
daten = {
|
||||
"km": _zu_zahl(km),
|
||||
"tankprozent": _zu_zahl(tankprozent),
|
||||
@@ -132,6 +168,10 @@ def fahrzeugstatus_veroeffentlichen():
|
||||
"batteriespannung": _zu_zahl(batteriespannung),
|
||||
"gesichert": gesichert,
|
||||
"sicherheitscheck": sicherheitscheck,
|
||||
"standort_lat": standort["lat"],
|
||||
"standort_lon": standort["lon"],
|
||||
"standort_genauigkeit_m": standort["genauigkeit_m"],
|
||||
"standort_zeit": standort["zeit"],
|
||||
# Vom Fahrzeug selbst gemeldete Service-Fälligkeit (ergänzt die
|
||||
# App-eigene Servicebuch-Berechnung, siehe fahrzeugMeldung() im
|
||||
# Frontend) - die Streckensensoren liefern negative Restkilometer-
|
||||
|
||||
Reference in New Issue
Block a user