Umsetzungsstand MQTT/FMM003 nachtragen: Zertifikate erzeugt, DuckDNS/Dual-Stack bestätigt, Cloudflare-Frage geklärt

- Eigene CA + Server-/Client-Zertifikate erzeugt und Mosquitto konfiguriert
- Dateinamen-Endungs-Stolperstein am FMM003-Configurator dokumentiert (.pem/.pem.crt/.pem.key)
- Dual-Stack am Router bestaetigt, Portfreigabe-Risiko damit ausgeraeumt
- Klargestellt: Cloudflare ersetzt DuckDNS+Portfreigabe+Mosquitto nicht, sondern ergaenzt sie
  fuer einen anderen Zweck (App-Erreichbarkeit statt Fahrzeug-MQTT)
- AGENTS.md Open-Items-Liste entsprechend abgehakt
This commit is contained in:
2026-08-11 14:21:04 +02:00
parent 6448c9eea4
commit 619d8247f7
2 changed files with 32 additions and 8 deletions
+10 -4
View File
@@ -198,10 +198,16 @@ capacitor/iframe/browser (`umgebung.ts`), types + entity table (`types.ts`), fac
against the existing HA API against the existing HA API
- [ ] Define the reverse-proxy path allowlist (depends on final entity/service names) - [ ] Define the reverse-proxy path allowlist (depends on final entity/service names)
- [ ] Install/wire the FMM003; record firmware version (Codec JSON is firmware-dependent) - [ ] Install/wire the FMM003; record firmware version (Codec JSON is firmware-dependent)
- [ ] Generate TLS certificates for Mosquitto + device (small private CA); FMM003 refuses MQTT - [x] Generate TLS certificates for Mosquitto + device (small private CA) — done 2026-08-11, 10-year
without them validity; Mosquitto configured (`certfile`/`keyfile`/`cafile`/`require_certificate: true`).
- [ ] Decide broker reachability for the vehicle: port-forward 8883 vs. VPS broker with Remaining: upload root/client cert/key to the FMM003 Security tab — filenames must end in
Mosquitto bridge over Tailscale `.pem`/`.pem.crt`/`.pem.key` (Configurator rejects plain `.crt`/`.key`, content-agnostic check)
- [x] Decide broker reachability for the vehicle — port-forward 8883 (not VPS bridge), decided
2026-08-11; DuckDNS hostname `datametric360.duckdns.org` set up, Dual-Stack confirmed on the
router (no DS-Lite blocker). Remaining: the port-forward itself on the Speedport Smart 4 Plus
- [ ] MQTT Client Type on the FMM003: "Custom server" (value 3, seen in Configurator help text) was
not selectable in practice — use **"AWS IoT Custom"** pointed at the own broker instead
(confirmed working by two independent community reports); verify once the device is live
- [ ] Capture the first real Codec JSON message (`mosquitto_sub`/MQTT Explorer) and build the - [ ] Capture the first real Codec JSON message (`mosquitto_sub`/MQTT Explorer) and build the
field mapping from it — **do not guess beforehand** (explicit decision) field mapping from it — **do not guess beforehand** (explicit decision)
- [ ] Move trip detection to FMM003 ignition (reuse the `fahrterkennung.py` pattern, keep pause - [ ] Move trip detection to FMM003 ignition (reuse the `fahrterkennung.py` pattern, keep pause
+22 -4
View File
@@ -165,6 +165,11 @@ Entschlüsseln des binären Codec8-Protokolls. Das Gerät liefert die Daten dann
Exakte eigene Werte erst bei der Inbetriebnahme festlegen. Exakte eigene Werte erst bei der Inbetriebnahme festlegen.
- **TLS ist Pflicht, nicht optional:** ohne hochgeladene Zertifikate arbeitet MQTT nicht. Zertifikat, - **TLS ist Pflicht, nicht optional:** ohne hochgeladene Zertifikate arbeitet MQTT nicht. Zertifikat,
privater Schlüssel und Wurzelzertifikat werden im Configurator unter *Security* hinterlegt. privater Schlüssel und Wurzelzertifikat werden im Configurator unter *Security* hinterlegt.
- **Dateinamen-Endung ist strikt geprüft (2026-08-11, live am Configurator beobachtet):** hochgeladene
Dateien müssen auf `.pem`, `.pem.crt` oder `.pem.key` enden, sonst Fehler „File format is not valid
or not supported". Reiner Inhalt (PEM-Format) reicht nicht, die Endung muss stimmen. Schema folgt
offenbar der AWS-IoT-Download-Konvention: Root-Zertifikat `*.pem`, Geräte-Zertifikat `*.pem.crt`,
privater Schlüssel `*.pem.key`. Eigene CA-Dateien entsprechend umbenennen, nicht nur `.crt`/`.key`.
- **Firmware-Abhängigkeit:** Codec JSON ist nicht in jeder Firmware enthalten (bei mehreren - **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 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. verfügbar ist — vor der Inbetriebnahme trotzdem die Firmware-Version notieren.
@@ -341,10 +346,23 @@ else in this document:
Privatfahrzeug. Betrifft nur den Weg Fahrzeug→Zuhause und ist unabhängig von der Anbindung der Privatfahrzeug. Betrifft nur den Weg Fahrzeug→Zuhause und ist unabhängig von der Anbindung der
App (§4, dort bleibt es bei Cloudflare Tunnel — kein Widerspruch, siehe dort die Begründung, warum App (§4, dort bleibt es bei Cloudflare Tunnel — kein Widerspruch, siehe dort die Begründung, warum
ein eng begrenzter, zertifikatsgesicherter Port etwas anderes ist als HA selbst offenzulegen). ein eng begrenzter, zertifikatsgesicherter Port etwas anderes ist als HA selbst offenzulegen).
**Noch zu erledigen:** stabile öffentliche Adresse fürs Zuhause (feste IP oder DynDNS-Hostname) **Umsetzungsstand (2026-08-11):** DuckDNS-Hostname `datametric360.duckdns.org` angelegt und als
und die Portfreigabe am Router selbst — beides erst bei der Inbetriebnahme. Add-on in HA eingerichtet (inkl. eigenständigem Let's-Encrypt-Zertifikat für die HA-Oberfläche
2b. **TLS-Zertifikate für Mosquitto und das Gerät** — bei der Inbetriebnahme zu erzeugen; ohne sie selbst — unabhängig von den MQTT-Zertifikaten unten, siehe dortige Anmerkung). Router bestätigt
verweigert der FMM003 die MQTT-Verbindung. **Dual-Stack** (kein DS-Lite) — die Portfreigabe funktioniert damit grundsätzlich. **Noch offen:**
die Portfreigabe selbst am Speedport Smart 4 Plus.
Nebenbei geklärt: ein Vorschlag, stattdessen komplett auf Cloudflare zu setzen, wurde geprüft und
**ist keine Alternative** — Cloudflare Tunnel kann kein rohes MQTT/TCP transportieren (nur HTTP),
der FMM003 kennt außerdem kein Tunnel-Konzept, nur IP/Domain+Port. Bleibt bei der klaren Trennung:
Cloudflare Tunnel für die App (§4), Portfreigabe+DuckDNS nur für die Fahrzeug-MQTT-Verbindung.
2b. **TLS-Zertifikate für Mosquitto und das Gerät** — ✅ **ERLEDIGT (2026-08-11):** eigene private CA
(10 Jahre gültig) erzeugt, Server-Zertifikat (CN `datametric360.duckdns.org`) und Client-Zertifikat
für das Gerät signiert, beide gegen die CA verifiziert. Mosquitto ist mit `certfile`/`keyfile`/
`cafile`/`require_certificate: true` konfiguriert. **Noch offen:** die drei Geräte-Dateien (Root,
Client-Zertifikat, privater Schlüssel) müssen noch in den FMM003-Configurator hochgeladen werden —
dabei auf die Dateinamen-Endung achten (siehe Anmerkung oben bei „Dateinamen-Endung ist strikt
geprüft").
3. **Reverse-proxy add-on: Nginx Proxy Manager vs. Traefik** — both viable (§4), pick deferred to the 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 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. before the hardware arrives, if worth doing ahead of time.