Files
kapteins-daagbok/docs/nmea-import-notes.md
elpatron 6c866dbad5 Add NMEA journal import with wizard and CRC-based duplicate detection.
Enables importing .nmea logs into travel-day events with interval/change modes, optional GPS track, local encrypted archive, and a test fixture for the Kieler Förde route.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 20:41:42 +02:00

6.8 KiB

NMEA-Import — Recherche & Entscheidungsnotizen

Stand: 2026-05-31 · Status: In Umsetzung (feature/nmea-journal-import)

Anlass: Nutzeranfrage, ob Kapteins Daagbok um NMEA-Empfang erweiterbar sei.

Kurzfassung

Ansatz Machbarkeit (PWA) Empfehlung
Live-NMEA (Serial/TCP/Bluetooth vom Plotter) Praktisch nein (Browser-Sandbox, iOS) Nicht als reine PWA versprechen
NMEA-Dateiimport Ja (Parsing im Client) Sinnvoller nächster Schritt, wenn überhaupt
GPX-Import (bereits vorhanden) Ja Für die meisten Freizeit-Skipper der praktischere Weg

Aktueller Stand in Kapteins Daagbok

  • PWA (installierbar, offline-fähig), kein nativer App-Store-Wrapper
  • Position: navigator.geolocation (Geräte-GPS) in LogEntryEditor.tsx
  • Tracks: Upload von GPX/KML/GeoJSON → Karte, Streckenstatistik (trackUpload.ts, LogEntryEditor.tsx)
  • Log-Ereignisse u. a.: Zeit, MgK/rwk, Wind (Richtung/Stärke/Druck), Seegang, Wetter, Strom, Krängung, Segel/Motor, Log, Distanz, GPS-Koordinaten, Bemerkungen (logEntryPayload.ts)

Es gibt keinen NMEA-Parser und keinen Live-Datenstrom.


Warum Live-NMEA in einer PWA schwierig ist

Typische NMEA-Quellen an Bord und Browser-Fähigkeiten:

Quelle PWA-tauglich?
USB/Serial (RS422/232) Kaum — Web Serial API nur Chrome/Edge, nicht iOS/Safari, am Tablet/Phone selten praktikabel
TCP/UDP (z. B. Port 10110) Nein — Browser haben keine Raw-Sockets
Bluetooth-NMEA Sehr eingeschränkt (Web Bluetooth), iOS praktisch unbrauchbar
Handy-GPS Ja — Geolocation API (bereits implementiert), aber kein NMEA vom Plotter

Weitere PWA-Limits:

  • Kein zuverlässiger Hintergrundbetrieb für kontinuierlichen Empfang
  • HTTPS-App → lokales Boot-Netz (192.168.x.x): Mixed Content, CORS, ggf. Local-Network-Permissions
  • iPad/iPhone als installierte PWA besonders restriktiv

Umweg (später optional): Gateway im Boot (z. B. SignalK) mit WebSocket/HTTP — PWA verbindet sich dann zu einem Server, nicht direkt zu NMEA. Setup-Aufwand, eher für Technikaffine.

Native Hülle (Capacitor, Electron, …) würde Serial/TCP/Bluetooth erweitern — wäre keine reine PWA mehr.


Was ist eine NMEA-Datei?

NMEA 0183 = textbasiertes Protokoll aus Einzelzeilen-Sätzen, z. B.:

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
$HDT,274.3,T*2F
$MWV,274.5,R,15.2,N,A*2B
$DPT,12.4,0.5*42

Eine .nmea- oder .log-Datei ist ein Zeitstempel-Stream — alles, was der Logger in diesem Zeitraum mitgeschrieben hat.

Nicht alle Telemetriedaten sind garantiert enthalten. Es hängt ab von:

  1. Sensoren an Bord (GPS ja, Wind nur mit Windgeber, …)
  2. Logger-/Multiplexer-Konfiguration
  3. Empfang während der Aufzeichnung

Ein reiner GPS-Logger liefert praktisch nur Position/Kurs/Fahrt.


Was könnte ein NMEA-Dateiimport in der App bewirken?

Mapping zu bestehenden Logbuch-Feldern (Auszug):

NMEA-Satz (Beispiel) Inhalt Nutzen
RMC / GGA / GLL Position, Zeit, oft SOG/COG GPS-Koordinaten, Track (analog GPX), Kurs
VTG / VHW Fahrt über Grund/Wasser, Kurs Streckenstatistik, Kursfelder
HDT / HDG / HDM Peilung/Kompass MgK/rwk-Vorschläge
MWV / MWD Wind Windfelder im Reisetag
DPT / DBT Tiefe aktuell kein eigenes Feld
MTW Wassertemperatur ggf. Bemerkungen
XDR diverse Transducer abhängig vom Gerät

Mehrwert gegenüber GPX:

  • Track plus zeitlich zugeordnete Wind-/Kursdaten (wenn in der Datei vorhanden)
  • Automatisches Vorschlagen von Log-Ereignissen aus Bord-Sensoren
  • Eine Quelle (Bordanlage) statt nur Handy-GPS

Was NMEA typischerweise nicht liefert (bleibt manuell / Wetter-API):

  • Seegang, Wetter-Symbolik, Strom, Krängung
  • Crew, Hafen, Bemerkungen, Tankstände
  • Segel/Motor-Konfiguration im nautischen Sinne

NMEA = Sensor-Telemetrie, kein Skipper-Logbuch.


Wird NMEA an Bord üblicherweise aufgezeichnet & exportiert?

Teilweise — selten so einfach wie GPX für Endnutzer.

Quelle Typischer Export Einfach für Freizeit-Skipper?
Chartplotter (Garmin, Raymarine, B&G, …) GPX (Track/Route) oft (SD/USB/App)
Chartplotter Roh-NMEA ⚠️ selten direkt
WiFi-Multiplexer, SignalK, Raspi NMEA-Datei oder Stream ⚠️ Technikaffine
PC-Software (OpenCPN, …) NMEA-Log ⚠️

GPX ist der de-facto-Standard für „Track mit nach Hause nehmen“. NMEA-Rohlogs sind Nischen- oder Profi-/Tüftler-Setup.


Mögliche Roadmap (wenn wir es angehen)

Phase 1 — NMEA-Dateiimport (PWA-kompatibel)

  • Parser für gängige Sätze: RMC, GGA, GLL, VTG, optional MWV/MWD, HDT
  • Track aus Positions-Sätzen (wie GPX-Pipeline)
  • UI: Upload neben GPX/KML in LogEntryEditor
  • Checksummen-Validierung (*XX), Encoding, gemischte Talker-IDs (GP, GN, …)

Phase 2 — Anreicherung Log-Ereignisse

  • Aus NMEA-Stream pro Zeitpunkt Wind/Kurs/Position in Log-Events vorschlagen
  • Nutzer bestätigt/korrigiert (kein blindes Überschreiben)

Phase 3 — optional, nicht PWA-pur

  • SignalK-WebSocket (Nutzer konfiguriert Boot-URL)
  • Oder native Wrapper / Companion-Bridge

Nicht empfohlen als Phase 1: Live-NMEA direkt aus der PWA.


Antwortvorlage für Nutzer

Als reine Browser-App können wir keinen direkten NMEA-Anschluss (Serial/TCP vom Plotter) zuverlässig anbieten — mobile Browser erlauben das nicht, besonders auf iPhone/iPad.
Position über Handy-GPS und GPX-Tracks (Export vom Plotter oder Nav-App) funktionieren bereits.
Ein Import von NMEA-Dateien (vom Gateway oder Logger) ist grundsätzlich denkbar und könnte Track plus ggf. Wind/Kurs ins Logbuch übernehmen — das prüfen wir für eine spätere Version.
Für die meisten Skipper ist GPX vom Plotter der einfachere Weg.


Offene Fragen für spätere Planung

  • Welche NMEA-Varianten melden Nutzer realistisch (0183 vs. NMEA 2000 nur über Gateway)?
  • Reicht Parser-Abdeckung für 95 % der Dateien mit RMC+GGA+MWV?
  • Sollen importierte Rohdaten gespeichert werden oder nur abgeleitete GPX/Events?
  • Datenschutz: NMEA-Datei lokal parsen, nichts an Server senden (passt zu E2E-Modell)
  • Plausible-Event analog GPS Track Uploaded → z. B. NMEA File Imported?

Referenzen

  • NMEA 0183 — Protokollstandard
  • SignalK — moderne Boot-API, WebSocket
  • Web Serial API — Browser, eingeschränkt
  • Bestehender Code: client/src/services/trackUpload.ts, client/src/components/LogEntryEditor.tsx