39da68cd87
Leaflet's stylesheet was appended to document.head, so it never reached the
panel's shadow root: .leaflet-tile{position:absolute} never applied, tiles laid
out as in-flow images (~1040px inside a 190px box) and the marker pane ended up
far below the visible area. That is the real cause of the long-standing
"fragmented Leaflet rendering" finding and of the invisible vehicle pin - every
tile request had actually succeeded. The stylesheet now goes into the shadow
root and is awaited before the map is built.
Also in this round:
- Map tiles are always light (Google-Maps-style), no dark variant at night.
- Vehicle marker uses the real CI poi-car icons (poi-car-l >=34px, poi-car-s
below), with a white halo so the outline stays readable on tiles.
- Removed the obsolete combined STANDORT_TRACKER field; only the split
lat/lon sensors remain.
- Receipt upload: widened the try block so base64/save failures surface, and
the frontend call site now reports a rejected service call.
- Generic receipt parser: total detection is line-based (letter-spaced
headings, no more matching the SUMME-EUR column header, tax lines excluded),
address heuristic handles 4-digit postcodes and single-line address blocks,
and "Preis/L" matches without a spelled-out "Liter".
- Design backlog: red hairline frame on list rows (delete button bled through
at fractional row heights) and select fields now use the grey background box.
Shell 10-receipt regression suite still passes; all changes verified live in
the audi_ha_test container.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
94 lines
4.4 KiB
Python
94 lines
4.4 KiB
Python
"""Technische Konfiguration — die einzige Stelle, die vor der Installation
|
|
angepasst werden muss (siehe INSTALL.md Schritt 4).
|
|
|
|
Alles andere (WLAN-Name des Fahrzeugs, Pausenzeit, Reifendaten, ...) ist Teil
|
|
des Fahrzeugprofils (data/fahrzeugprofil.json) und über die Oberfläche
|
|
änderbar. Diese Entity-IDs sind es bewusst nicht: @state_trigger und die
|
|
Fahrzeugstatus-Abfrage brauchen sie als festen Wert, bevor überhaupt ein
|
|
Profil gelesen werden kann.
|
|
|
|
In Home Assistant unter Entwicklerwerkzeuge -> Zustände nachschlagen. Werte
|
|
lassen sich außerdem über das Setup-Menü in der Oberfläche zuordnen (siehe
|
|
entitaeten.py) - Änderungen von dort werden zur Laufzeit auf diese Variablen
|
|
angewendet (überschreiben also die hier hinterlegten Standardwerte), ohne
|
|
diese Datei anzufassen.
|
|
|
|
2026-08-12: Die HACS-Integration TommiG1/HA_VAG-EU-Data-Act (bisherige
|
|
Quelle für Kilometerstand, Tankfüllstand, Türen/Fenster/Schlösser,
|
|
Ölwechsel-/Inspektionsdaten) wird nicht mehr verwendet - die zugehörigen
|
|
Entity-IDs sind deshalb unten bewusst leer. Neue Datenquelle ist der
|
|
Teltonika FMM003 (GPS-Tracker mit CAN-Anbindung, siehe AGENTS.md Abschnitt
|
|
B); er liefert Standort, Zündungsstatus und Batteriespannung, aber keinen
|
|
Tankfüllstand, keine Tür-/Fenster-/Schlossdaten und keine Ölwechsel-/
|
|
Inspektionstermine - die entsprechenden Kacheln zeigen deshalb bis auf
|
|
Weiteres "unbekannt" statt eines falschen Werts (siehe zustand_oder_none()
|
|
in frontend_veroeffentlichung.py). Bleibt ein Wert leer ("") oder passt eine
|
|
Entity-ID nicht zur tatsächlichen Integration, liefert zustand_oder_none()
|
|
für das jeweilige Feld None statt abzustürzen.
|
|
"""
|
|
|
|
# Fahrterkennung (§7.1): Start/Ende einer Fahrt wird über den Zündungs-/ACC-
|
|
# Status des FMM003 erkannt (on = Fahrt läuft), nicht mehr über die WLAN-
|
|
# Verbindung des iPhones zum Fahrzeug (siehe fahrterkennung.py).
|
|
ZUENDUNG_SENSOR = "binary_sensor.testzone_fmm003_engine_ignition_or_acc_status"
|
|
|
|
# Kilometerstand - bisher aus der TommiG1-Integration, aktuell keine Quelle
|
|
# vorhanden. Der FMM003 liefert unter sensor.testzone_fmm003_total_calculated_mileage
|
|
# einen selbst berechneten Wert, der aber auf einer anderen Zählbasis beruht
|
|
# als der echte Fahrzeug-Kilometerstand (GPS-Streckenberechnung statt
|
|
# Tacho) - bewusst NICHT automatisch übernommen, um Reifenzähler,
|
|
# Ölwechsel-Prognose und Fahrtabschluss-Screening nicht mit einem
|
|
# inkonsistenten Basiswert zu verfälschen. Bei Bedarf über das Setup-Menü
|
|
# gezielt zuordnen.
|
|
KM_SENSOR = ""
|
|
|
|
# Tankfüllstand (Prozent) - keine Quelle mehr vorhanden (der FMM003 ist kein
|
|
# Tankgeber).
|
|
TANK_SENSOR = ""
|
|
|
|
# Reichweite (§5.1 Übersicht) - keine Quelle mehr vorhanden.
|
|
RANGE_SENSOR = ""
|
|
|
|
# 12V-Batteriespannung (Mein Audi -> Zustand). Vom FMM003 geliefert -
|
|
# external_power_voltage ist die vom Gerät gemessene Bordnetzspannung des
|
|
# Fahrzeugs, NICHT battery_voltage (das ist die interne Pufferbatterie des
|
|
# Trackers selbst und hat mit der Fahrzeugbatterie nichts zu tun).
|
|
BATTERIE_SENSOR = "sensor.testzone_fmm003_external_power_voltage"
|
|
|
|
# Knopf für eine sofortige Neuabfrage beim Fahrzeug - kam aus der
|
|
# TommiG1-Integration, keine Entsprechung beim FMM003 vorhanden.
|
|
REFRESH_BUTTON = ""
|
|
|
|
# Türen (§4.1) - keine Quelle mehr vorhanden.
|
|
TUER_SENSOREN = []
|
|
|
|
# Fenster (§4.1) - keine Quelle mehr vorhanden.
|
|
FENSTER_SENSOREN = []
|
|
|
|
# Heckklappe und Motorhaube - keine Quelle mehr vorhanden.
|
|
HECKKLAPPE_SENSOR = ""
|
|
HECKKLAPPENSCHLOSS_SENSOR = ""
|
|
HAUBE_SENSOR = ""
|
|
|
|
# Vom Fahrzeug selbst gemeldete Service-Fälligkeit (ergänzt die App-eigene,
|
|
# aus dem Servicebuch berechnete Prognose) - keine Quelle mehr vorhanden.
|
|
NAECHSTER_OELWECHSEL_SENSOR = ""
|
|
OELWECHSEL_STRECKE_SENSOR = ""
|
|
NAECHSTE_INSPEKTION_SENSOR = ""
|
|
INSPEKTION_STRECKE_SENSOR = ""
|
|
|
|
# Live-GPS-Position des Fahrzeugs (Übersicht -> Standort-Kachel). Breiten-/
|
|
# Längengrad als zwei eigene sensor-Entities (flespi liefert Koordinaten so,
|
|
# nicht als Attribute einer device_tracker-Entity - siehe _standort() in
|
|
# frontend_veroeffentlichung.py).
|
|
STANDORT_LAT_SENSOR = ""
|
|
STANDORT_LON_SENSOR = ""
|
|
|
|
# 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
|
|
# verwendet. Leer lassen, solange es keins gibt - "Update suchen" meldet dann
|
|
# nur "keine Update-Quelle eingerichtet", ohne etwas zu tun.
|
|
UPDATE_REPO_URL = ""
|
|
UPDATE_BRANCH = "main"
|