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:
@@ -198,10 +198,16 @@ capacitor/iframe/browser (`umgebung.ts`), types + entity table (`types.ts`), fac
|
||||
against the existing HA API
|
||||
- [ ] Define the reverse-proxy path allowlist (depends on final entity/service names)
|
||||
- [ ] Install/wire the FMM003; record firmware version (Codec JSON is firmware-dependent)
|
||||
- [ ] Generate TLS certificates for Mosquitto + device (small private CA); FMM003 refuses MQTT
|
||||
without them
|
||||
- [ ] Decide broker reachability for the vehicle: port-forward 8883 vs. VPS broker with
|
||||
Mosquitto bridge over Tailscale
|
||||
- [x] Generate TLS certificates for Mosquitto + device (small private CA) — done 2026-08-11, 10-year
|
||||
validity; Mosquitto configured (`certfile`/`keyfile`/`cafile`/`require_certificate: true`).
|
||||
Remaining: upload root/client cert/key to the FMM003 Security tab — filenames must end in
|
||||
`.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
|
||||
field mapping from it — **do not guess beforehand** (explicit decision)
|
||||
- [ ] Move trip detection to FMM003 ignition (reuse the `fahrterkennung.py` pattern, keep pause
|
||||
|
||||
@@ -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.
|
||||
- **TLS ist Pflicht, nicht optional:** ohne hochgeladene Zertifikate arbeitet MQTT nicht. Zertifikat,
|
||||
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
|
||||
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.
|
||||
@@ -341,10 +346,23 @@ else in this document:
|
||||
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
|
||||
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)
|
||||
und die Portfreigabe am Router selbst — beides erst bei der Inbetriebnahme.
|
||||
2b. **TLS-Zertifikate für Mosquitto und das Gerät** — bei der Inbetriebnahme zu erzeugen; ohne sie
|
||||
verweigert der FMM003 die MQTT-Verbindung.
|
||||
**Umsetzungsstand (2026-08-11):** DuckDNS-Hostname `datametric360.duckdns.org` angelegt und als
|
||||
Add-on in HA eingerichtet (inkl. eigenständigem Let's-Encrypt-Zertifikat für die HA-Oberfläche
|
||||
selbst — unabhängig von den MQTT-Zertifikaten unten, siehe dortige Anmerkung). Router bestätigt
|
||||
**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
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user