Codec JSON statt Traccar: Datenweg vom FMM003 neu festlegen

Der FMM003 beherrscht Codec JSON - damit entfällt der einzige Grund, aus
dem Traccar überhaupt vorgesehen war: das Entschlüsseln des binären
Codec8-Protokolls.

Recherchiert und bestätigt: Codec JSON ist ein Datenprotokoll, kein
Transportweg; der zugehörige Transport ist MQTT, nicht ein HTTP-Webhook.
Ein eigener Broker ist vorgesehen (IP, Port, optional Anmeldung), TLS ist
dabei Pflicht. Home Assistant bringt beides von Haus aus mit: das
Mosquitto-Add-on und die MQTT-Integration samt json_attributes_topic.

Damit entfallen ersatzlos: das Traccar-Add-on, dessen H2-Datenbank samt
Sicherung, das Position Forwarding an einen HA-Webhook, der offene rohe
TCP-Port und die Alternative eines selbst geschriebenen Codec8-Decoders.
Übrig bleibt FMM003 -> MQTT/TLS -> Mosquitto -> MQTT-Integration.

Neu zu klären und in §5 aufgenommen: wie das Fahrzeug den Broker von außen
erreicht (Portfreigabe 8883 oder VPS-Broker mit Mosquitto-Bridge - Cloudflare
Tunnel hilft hier nicht, der ist auf HTTP zugeschnitten), sowie die
TLS-Zertifikate. Die Zuordnungstabelle der Fahrzeugwerte kann erst nach dem
Mitschnitt einer echten MQTT-Nachricht entstehen - die Feldnamen werden nicht
geraten.

Der bisherige Traccar-Abschnitt bleibt als Entscheidungsprotokoll stehen,
deutlich als überholt markiert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-11 00:41:03 +02:00
parent 27640fee35
commit 966ac6217f
+79 -2
View File
@@ -72,7 +72,12 @@ as Android. All vehicle data comes from the FMM003 (see §2), not from the iPhon
into Home Assistant as one combined, flexibly-mapped entity (no hardcoded field list — see the
no-hardcoding mapping system discussed separately, not yet written to a file).
**Decided (2026-08-10, after web research — see rationale below): Traccar, minimal variant.**
> **ÜBERHOLT durch eine neue Erkenntnis (2026-08-11): Der FMM003 kann Codec JSON.**
> Damit entfällt Traccar ersatzlos — siehe den Abschnitt „§2b Codec JSON + MQTT" direkt unterhalb.
> Der folgende Traccar-Abschnitt bleibt als Entscheidungsprotokoll stehen, ist aber **nicht mehr der
> geplante Weg**.
**Überholte Entscheidung (2026-08-10, nach Recherche): Traccar, minimale Variante.**
**Research question:** is there something more efficient than Traccar for decoding Codec8 from an
FMM003? Checked and ruled out:
@@ -110,6 +115,71 @@ FMM003? Checked and ruled out:
Hardware confirmed sufficient for this: Dell OptiPlex 3000 TC, Pentium N6005, 16 GB DDR4, 256 GB NVMe —
comfortably enough for Traccar alone, more so without a MariaDB add-on alongside it.
---
## 2b. Codec JSON + MQTT — der tatsächlich geplante Weg (2026-08-11)
**Neue Information vom Besitzer: der FMM003 beherrscht „Codec JSON".** Das ändert die Architektur
grundlegend, weil damit die eine Sache entfällt, die Traccar überhaupt nötig gemacht hat: das
Entschlüsseln des binären Codec8-Protokolls. Das Gerät liefert die Daten dann bereits als JSON.
### Was recherchiert und bestätigt ist
- **Codec JSON ist ein Datenprotokoll, kein Transportweg.** Eingestellt wird es im Teltonika
Configurator unter *System → System Settings → Data Protocol → Codec JSON*.
- **Der zugehörige Transportweg ist MQTT**, nicht ein HTTP-Webhook: *GPRS Server Settings → MQTT*.
Das war die wichtigste Überraschung — die erste Vermutung „JSON heißt HTTP-POST an einen
HA-Webhook" ist falsch.
- **Ein eigener Broker ist vorgesehen:** in den MQTT-Einstellungen werden schlicht IP und Port des
Brokers eingetragen; Login und Passwort werden verwendet, wenn der Broker Anmeldung verlangt.
- **TLS ist Pflicht, nicht optional:** ohne hochgeladene Zertifikate arbeitet MQTT nicht. Zertifikat,
privater Schlüssel und Wurzelzertifikat werden im Configurator unter *Security* hinterlegt.
- **Firmware-Abhängigkeit:** Codec JSON ist nicht in jeder Firmware enthalten (bei mehreren
Modellen erst ab 03.28.00 dokumentiert). Der Besitzer bestätigt, dass es auf diesem Gerät
verfügbar ist — vor der Inbetriebnahme trotzdem die Firmware-Version notieren.
- **Home Assistant kann MQTT von Haus aus:** Mosquitto-Broker als offizielles Add-on, dazu die
MQTT-Integration mit `sensor`/`device_tracker`, `json_attributes_topic` und Templates, um beliebige
JSON-Felder herauszuziehen. Es gibt Community-Berichte, die genau das mit Teltonika-Trackern
gemacht haben.
### Was damit ersatzlos entfällt
| Bisher geplant | Jetzt |
|---|---|
| Traccar-Add-on | entfällt — es gibt nichts mehr zu dekodieren |
| Traccar-Datenbank (H2) inkl. Sicherung der `.mv.db` | entfällt — kein eigener Datenspeicher mehr |
| Position Forwarding → HA-Webhook | entfällt — HA hört direkt am Broker mit |
| Offener roher TCP-Port für Codec8 | entfällt — stattdessen MQTT über TLS |
| Eigener Codec8-Decoder als Alternative | erledigt sich |
Übrig bleibt: **FMM003 → MQTT/TLS → Mosquitto-Add-on → MQTT-Integration → Entitäten in HA.** Ein
Baustein statt dreien, und alle Teile davon sind offizielle HA-Add-ons beziehungsweise
Kernintegrationen statt Fremdsoftware.
### Was dadurch neu zu klären ist
1. **Erreichbarkeit des Brokers von außen.** Das Problem verschwindet nicht, es ändert nur die Form:
Das Fahrzeug muss den Broker im Internet erreichen. Cloudflare Tunnel hilft hier **nicht** — der
ist auf HTTP zugeschnitten, und der FMM003 kann keinen Tunnel-Client mitbringen. Zwei gangbare
Wege:
- **Portfreigabe 8883** direkt auf Mosquitto. Verstößt formal gegen den Grundsatz „nichts
freigeben", ist aber etwas völlig anderes als Home Assistant selbst freizugeben: ein Port mit
TLS-Zwang und Anmeldung, hinter dem nur ein Nachrichtenbroker sitzt.
- **Kleiner Broker auf einem VPS**, der per Mosquitto-eigenem *Bridge*-Modus mit dem Broker
zuhause gekoppelt wird (die Verbindung baut das Zuhause nach außen auf, über Tailscale). Dann
ist zuhause weiterhin nichts erreichbar. Aufwendiger, dafür ohne jede Freigabe.
2. **Tatsächliche Nutzlast.** Wie die CAN/FMS-Werte im JSON heißen, ist noch unbekannt. Sobald das
Gerät läuft: mit MQTT Explorer oder `mosquitto_sub` eine echte Nachricht mitschneiden und daraus
die Zuordnungstabelle bauen (siehe offener Punkt 2 in §5) — nicht vorher raten.
3. **Zertifikate.** Für Mosquitto müssen Server-Zertifikat und die passenden Dateien für das Gerät
erzeugt werden. Bei eigenem Broker heißt das in der Regel eine eigene kleine CA.
4. **Datenvolumen.** Teltonika weist selbst darauf hin, dass Codec JSON deutlich mehr Bytes braucht
als das binäre Codec8E. Bei einem privat genutzten Fahrzeug ist das vernachlässigbar, sollte man
bei einem knappen Mobilfunktarif aber im Blick behalten.
Beides — Broker-Erreichbarkeit und Zertifikate — ist erst bei der Inbetriebnahme zu erledigen und
blockiert nichts, was jetzt gebaut wird.
### Trip detection (substitutes the old WLAN-based logic)
- **Start / end trigger:** FMM003 ignition state (CAN), not WLAN connectivity.
@@ -230,7 +300,14 @@ else in this document:
1. **Exact reverse-proxy path allowlist** — depends on the final pyscript entity/service names once the
FMM003 combined-entity mapping is implemented; write these down here once decided.
2. **No-hardcoding mapping system** for the FMM003 combined entity — discussed in an earlier session,
not yet written to a file or finalized in detail.
not yet written to a file or finalized in detail. **Kann erst nach der ersten echten
MQTT-Nachricht fertig werden** (§2b): die Feldnamen im Codec-JSON sind noch unbekannt und werden
mitgeschnitten, nicht geraten.
2a. **Erreichbarkeit des MQTT-Brokers für das Fahrzeug** — Portfreigabe 8883 gegen VPS-Broker mit
Mosquitto-Bridge, siehe §2b. Betrifft nur den Weg Fahrzeug→Zuhause und ist unabhängig von der
Anbindung der App (§4, dort bleibt es bei Cloudflare Tunnel).
2b. **TLS-Zertifikate für Mosquitto und das Gerät** — bei der Inbetriebnahme zu erzeugen; ohne sie
verweigert der FMM003 die MQTT-Verbindung.
3. **Reverse-proxy add-on: Nginx Proxy Manager vs. Traefik** — both viable (§4), pick deferred to the
next audit pass. Doesn't depend on the FMM003 — could be set up and tested against HA's existing API
before the hardware arrives, if worth doing ahead of time.