NMEA 0183 (Maritime / Schiffbau)
NMEA 0183 ist ein 1983 von der US-amerikanischen National Marine Electronics Association standardisiertes ASCII-Kommunikationsprotokoll für Schiffs- und Marinegeräte. Nahezu alle maritimen Sensoren – GPS, Kreiselkompass, Windmesser, Echolot, AIS – verwenden dieses Sentence-Format.
Der NMEA-Treiber des Gateways empfängt den Sentence-Stream über TCP (NMEA over IP), prüft die Checksumme (XOR) und stellt die Felder je nach Sentence-Typ geparst bereit. Der Betrieb ist ausschließlich lesend.
In Umgebungen, die Sentences per IEC 61162-450 (Lightweight Ethernet) multicasten – etwa integrierte Schiffsbrücken –, verwenden Sie den IEC 61162-450-Treiber. Da derselbe Sentence-Parser zum Einsatz kommt, sind Tag-Adressnotation und Aliase identisch mit diesem Dokument.
Eingabefelder im Registrierungsformular
| Eingabefeld | Was einzutragen ist | Beispiel |
|---|---|---|
| IP-Adresse | IP des NMEA-Multiplexers / -Routers | 192.168.0.140 |
| Port | NMEA-TCP-Port | 10110 (De-facto-Standard) / 4001 (geräteabhängig) |
- Der Zeichensatz ist fest auf US-ASCII eingestellt (keine Formularoption).
- Erweiterte Option
nmea.port(nicht im Formular sichtbar — bei Registrierung über die REST API nur peroptionsangebbar): Ist ein Wert gesetzt, wird statt des Ports aus dem Formular dieser Wert für die Verbindung verwendet.
Bei NMEA 0183 ist unidirektionales Sentence-Broadcasting die Regel. Das Gateway arbeitet read-only. Wird eine Gerätesteuerung benötigt, sehen Sie ein separates NMEA 2000- / Modbus-Gateway vor.
PLC-Adressnotation der Tags
Die Adresse lautet <sentence-type>.<field-no|alias> — Punktnotation (.). Die Feldnummer ist ein 1-basierter Index ohne die zwei Talker-Zeichen.
| Notation | Bedeutung |
|---|---|
RMC.7 | Feld 7 von RMC (Geschwindigkeit über Grund in kn) |
GGA.2 | Feld 2 von GGA (Breitengrad) |
RMC.lat | Alias — siehe Tabelle unten (Groß-/Kleinschreibung irrelevant) |
RMC | (Feld weggelassen) zuletzt empfangener Roh-Sentence vollständig |
Auch Sentence-Typen ohne definierte Aliase sind über die Feldnummer (XXX.3) zugänglich; wird nur der Typ angegeben, erhält man den vollständigen Roh-Sentence als Zeichenkette.
Die Doppelpunkt-Notation (RMC:lat) und die RAW:<sentence-type>-Notation werden nicht unterstützt — registrieren Sie stattdessen RMC.lat bzw. <sentence-type> (nur Typ). Lange Alias-Namen wie satellites / windAngle / windSpeed gibt es ebenfalls nicht — die tatsächlichen Aliase lauten sats / angle / speed (die folgende Tabelle enthält die vollständige Treiberdefinition).
Unterstützte Sentences / vollständige Alias-Liste (Treiberdefinition)
| sentence | alias |
|---|---|
RMC | utc, status, lat, ns, lon, ew, speed (kn), course, date, magvar, magvarew, mode |
GGA | utc, lat, ns, lon, ew, fix, sats (Anzahl Satelliten), hdop, alt, altunit, geoidsep, sepunit, dgpsage, dgpsid |
GLL | lat, ns, lon, ew, utc, status, mode |
VTG | cogtrue, cogmag, speed (kn, = speedkn), speedkm (km/h), mode |
GSA | mode1, mode2, pdop, hdop, vdop |
GSV | totalmsgs, msgnum, satsinview |
HDT | heading (true), t |
HDM | heading (magnetic), m |
MWV | angle (Windwinkel), ref (R/T), speed (Windgeschwindigkeit), units, status |
DBT | depthft, depthm (= depth, m), depthfa |
DPT | depth (m), offset, max |
MTW | temp, units |
VHW | headingt, headingm, speed (kn), speedkm |
ZDA | utc, day, month, year, tzh, tzm |
XDR | type, value, units, id (nur erste Transducer-Gruppe) |
Empfangsregeln (Treiberverhalten)
- Es werden ausschließlich Sentences verarbeitet, die mit
$beginnen — die!-Encapsulation (AIVDM / AIVDO bei AIS) wird nicht unterstützt. - Sentences mit abweichender Checksumme (XOR über den Bereich
$~*) werden verworfen. Sentences ohne Checksumme (einige ältere Geräte) werden akzeptiert. - Die zwei Talker-Zeichen (GP / GN / GL / HC / II …) werden automatisch entfernt —
$GPRMCund$GNRMCwerden unter demselben SchlüsselRMCzwischengespeichert, sodass der zuletzt empfangene Wert bereitsteht. Proprietäre$P...-Sentences werden ohne Talker-Abtrennung unverändert als Schlüssel verwendet.
Zuordnung der Datenformate
Die Werte werden exakt als ASCII-Original des Sentence-Feldes bereitgestellt — der Treiber führt keine Einheiten- oder Koordinatenumrechnung durch.
| Sentence-Feld | Datenformat | Formatzusatz |
|---|---|---|
| Numerische Felder wie Geschwindigkeit / Wassertiefe / Höhe / DOP | Float | REAL |
| Fix-Qualität / Anzahl Satelliten | Integer | (leer) |
| Breite / Länge (Original DDMM.MMMM) | Float (+ Umrechnung per Formel empfohlen) | REAL |
| UTC-Zeit / Statuszeichen (A/V) / Roh-Sentence | String | STR[80] |
NMEA-Koordinaten liegen im Format "GradGradMinMin.MinMin" vor (z. B. 4807.038 = 48°07,038′); der Treiber rechnet nicht in Dezimalgrad (decimal degree) um. Werden Dezimalgrad benötigt, hinterlegen Sie über Formel anwenden eine Umrechnungsformel am Tag.
Häufige Probleme und Lösungen
| Symptom / Meldung | Mögliche Ursache | Lösung |
|---|---|---|
| „Connection refused“ | TCP-Port des NMEA-Routers nicht geöffnet | In der Konfiguration des Multiplexers (Brookhouse / Actisense / NavLink2) den TCP-Server aktivieren |
| Nur ein Teil der Sentences kommt an | Gerät sendet diesen Sentence nicht | Liste der gesendeten Sentences im Gerätehandbuch prüfen |
| Koordinaten als ungewöhnlich große Zahlen | Ausgabe des Originals DDMM.MMMM (normales Verhalten — der Treiber rechnet nicht um) | Umrechnung in Dezimalgrad per Formel anwenden |
| AIS-Werte (AIVDM) kommen nicht an | !-Encapsulation nicht unterstützt (nur $-Sentences werden verarbeitet) | Über separaten AIS-Decoder einbinden (siehe Tipp unten) |
| Mehrere Talker senden denselben Sentence | Nach Talker-Entfernung derselbe Schlüssel — nur der zuletzt empfangene Wert steht bereit | Talker-Filter am Router aktivieren |
| Sentences treffen zu schnell ein | NMEA arbeitet üblicherweise mit 1 Hz bis 10 Hz | Bei einem Tag-Polling-Intervall von 1 Sekunde wird der jeweils letzte Wert übernommen |
Häufig verwendete Beispiele
Basispaket aus GPS und Umgebungssensorik eines Schiffes:
| Tag-Name | Adresse | Datenformat | Formatzusatz |
|---|---|---|---|
| Breite (DDMM.MMMM) | RMC.lat | Float | REAL |
| Länge (DDDMM.MMMM) | RMC.lon | Float | REAL |
| Geschwindigkeit (knots) | RMC.speed | Float | REAL |
| Anzahl Satelliten | GGA.sats | Integer | (leer) |
| Fix-Qualität | GGA.fix | Integer | (leer) |
| Windwinkel | MWV.angle | Float | REAL |
| Windgeschwindigkeit | MWV.speed | Float | REAL |
| Wassertiefe (m) | DPT.depth | Float | REAL |
| Kreiselkurs | HDT.heading | Float | REAL |
AIS (Schiffsidentifikation) ist eine eigenständige Nutzlast, die auf NMEA 0183 aufsetzt. Ist eine Dekodierung der Binär-Payload von AIVDM- / AIVDO-Sentences erforderlich, empfiehlt sich die Einbindung über einen separaten AIS-Decoder (gpsd / aisutils).
Ausführlichere Beispiele / automatisierte Registrierung
- NMEA-Beispiele unter Erweitert — REST API
- Technische Details: NMEA 0183-Treiber (advanced)