Files
audi-app/homeassistant/FMM003_MAPPING.md
T
Paul Nothaft f8b877d555 Phase 10-13: PWA fertig, blockierte Phasen vorbereitet
PWA laeuft: Manifest, Symbole in allen noetigen Groessen und die
iOS-Angaben, die Apple statt des Manifests auswertet. Das Startsymbol ist
bewusst neutral - die Vier Ringe auf einem Homescreen waeren nach aussen
sichtbar und fielen nicht mehr unter die private Nutzung.

Vorbereitet, aber nicht ausgefuehrt: Capacitor-Konfiguration, ein
Ablage-Adapter fuer Schluesselbund und Keystore (greift defensiv auf die
Laufzeit zu, damit die App ohne das Plugin unveraendert weiterlaeuft), die
Pfad-Freigabeliste fuer den Reverse Proxy und das Geruest der
FMM003-Zuordnungstabelle.

Die QR-Seite fuer die Einrichtung war zunaechst ein Fehlgriff: Ich hatte den
QR-Erzeuger selbst geschrieben. Der Vergleich gegen eine erprobte
Implementierung zeigte 1239 abweichende Module von 3249 - der Code waere
unlesbar gewesen. Jetzt liegt eine bewaehrte Bibliothek (MIT, 57 KB) neben
der Seite im eigenen Home Assistant. Das erfuellt die eigentliche
Anforderung genauso: kein Netzzugriff, der Token verlaesst das eigene Netz
nicht. Geprueft ueber einen Umlauf - 233 Zeichen hinein, identisch wieder
heraus.
2026-08-11 11:27:20 +02:00

5.3 KiB

FMM003 → Home Assistant: Zuordnungstabelle

Gerüst, noch nicht ausgefüllt. Gehört zu Phase 13 des ../UMSETZUNGSPLAN.md; die Architektur dahinter steht in ../COMPANION_APP_ARCHITECTURE.md §2b.

Grundregel: nicht raten. Wie die CAN/FMS-Werte im Codec JSON heißen, ist unbekannt und je nach Firmware verschieden. Die Tabelle unten wird aus einer echten mitgeschnittenen Nachricht gefüllt, nicht aus der Dokumentation abgeleitet. Bis dahin bleiben die Felder leer.

Datenweg

FMM003 (CAN/FMS)  ──MQTT über TLS──▶  Mosquitto-Add-on  ──▶  MQTT-Integration  ──▶  Entitäten

Traccar entfällt: Das Gerät liefert bereits JSON, es gibt nichts zu dekodieren.

Schritt 1 — Gerät einstellen

Im Teltonika Configurator:

Ort Einstellung
System → System Settings → Data Protocol Codec JSON
GPRS → Server Settings Broker-IP und Port 8883
GPRS → Server Settings Benutzername und Passwort des Brokers
Security Wurzelzertifikat, Gerätezertifikat, privater Schlüssel

Firmware-Version hier eintragen: ________________

Codec JSON ist nicht in jeder Firmware enthalten (bei mehreren Modellen erst ab 03.28.00). Ohne hochgeladene Zertifikate verweigert das Gerät die MQTT-Verbindung — das ist kein Fehler, sondern Absicht.

Schritt 2 — Nachricht mitschneiden

mosquitto_sub -h <broker> -p 8883 --cafile ca.crt \
  -u <benutzer> -P <passwort> -t '#' -v | tee mitschnitt.txt

Dabei nacheinander: Zündung an, kurz fahren, anhalten, Zündung aus. Danach den Mitschnitt sichten und die Tabelle unten füllen.

Nicht ins Repository legen — der Mitschnitt enthält echte Positionsdaten.

Schritt 3 — Zuordnungstabelle

Aus dem Mitschnitt zu füllen. Die Spalte „Entität" nennt den Namen, unter dem das Backend den Wert erwartet.

JSON-Feld Bedeutung Einheit Entität in HA Gefunden am
Zündung an/aus 0/1 binary_sensor.audi_zuendung
Geschwindigkeit km/h sensor.audi_geschwindigkeit
Position Breite Grad device_tracker.audi_position
Position Länge Grad device_tracker.audi_position
Kilometerstand km sensor.audi_kilometerstand
Tankfüllstand % sensor.audi_tankfuellstand
Drehzahl min⁻¹ sensor.audi_drehzahl
Kühlmitteltemperatur °C sensor.audi_kuehlmittel
Bordspannung V sensor.audi_bordspannung
Zeitstempel ISO/Epoch — (Attribut)

Teltonika nennt CAN-Werte oft nur über eine AVL-Kennung (etwa "12" für Kraftstoffstand). Deshalb hier immer beides notieren: die Kennung aus der Nachricht und ihre Bedeutung aus der AVL-Liste des Geräts.

Schritt 4 — MQTT-Integration

Aus der ausgefüllten Tabelle entstehen die Entitäten. Gerüst für configuration.yaml, die Feldnamen in den Vorlagen sind erst danach einsetzbar:

mqtt:
  binary_sensor:
    - name: "Audi Zündung"
      state_topic: "teltonika/<imei>/data"
      value_template: "{{ 'ON' if value_json.<FELD> | int == 1 else 'OFF' }}"
      device_class: power

  sensor:
    - name: "Audi Geschwindigkeit"
      state_topic: "teltonika/<imei>/data"
      value_template: "{{ value_json.<FELD> }}"
      unit_of_measurement: "km/h"
      state_class: measurement

  device_tracker:
    - name: "Audi Position"
      state_topic: "teltonika/<imei>/data"
      json_attributes_topic: "teltonika/<imei>/data"
      # latitude/longitude erwartet HA als Attribute

Schritt 5 — Fahrterkennung umstellen

Neues pyscript/fahrterkennung_fmm003.py nach dem Muster von pyscript/fahrterkennung.py, mit zwei Unterschieden:

  1. Der Auslöser ist die Zündungs-Entität, nicht der WLAN-Sensor.
  2. Der Startzeitpunkt darf nicht mehr nur im Arbeitsspeicher liegen — beim FMM003 gibt es keinen Grund mehr für diese Einschränkung, weil der Zustand jederzeit vom Gerät neu gelesen werden kann.

Unverändert übernehmen: die Pausentoleranz (fahrten_pausenzeit_min aus dem Profil, Standard 15 Minuten) über task.unique() und task.sleep(). Das ist eine bewusste Produktentscheidung, dreimal durchdacht: Springt der Motor innerhalb der Toleranz wieder an, ist es eine Fahrt, nicht zwei. Die Zündung fällt bei Start-Stopp nicht ab, ein zusätzlicher Filter dafür ist also unnötig.

Vorgehen: erst parallel laufen lassen und in eine Testdatei schreiben, mit der bisherigen Erkennung vergleichen, dann scharf schalten. Danach WLAN_SENSOR aus pyscript/modules/einstellungen.py entfernen.

Schritt 6 — Live-Ansicht einschalten

In companion-app/src/funktionen.ts den Schalter LIVE_VERFUEGBAR auf true setzen und in companion-app/src/screens/LiveFahrt.tsx die Feldnamen in liveZustandLesen() an die tatsächlichen Entitäten anpassen.

Damit werden auch die Fahrtdetails erstmals echte Routen zeigen, statt nur Start- und Zielpunkt.

Noch zu entscheiden

  • Erreichbarkeit des Brokers für das Fahrzeug: Portfreigabe 8883 direkt auf Mosquitto gegen VPS-Broker mit Mosquitto-Bridge über Tailscale. Ersteres ist einfacher, aber eine echte Freigabe; letzteres öffnet zuhause nichts, kostet aber einen zusätzlichen Server.
  • Datenvolumen: Codec JSON braucht deutlich mehr Bytes als das binäre Codec8E. Bei einem privat genutzten Fahrzeug vernachlässigbar, bei knappem Mobilfunktarif im Blick behalten.