Skip to main content

NMEA 0183 (Marine / Vessel)

NMEA 0183 is an ASCII communication standard for marine / shipboard equipment, standardized in 1983 by the U.S. National Marine Electronics Association. Nearly every marine sensor — GPS, gyrocompass, anemometer, fish finder, AIS — uses this sentence format.

The gateway's NMEA driver receives the sentence stream over TCP (NMEA over IP), verifies the checksum (XOR), then parses and exposes the fields by sentence type. It is read-only.

For bridge equipment that delivers over UDP multicast

In environments that multicast sentences via IEC 61162-450 (Lightweight Ethernet), such as integrated ship bridges, use the IEC 61162-450 driver instead. The sentence parser is identical, so the tag address notation and aliases are exactly the same as in this document.


Registration form entries

Input fieldWhat to enterExample
IP addressNMEA multiplexer / router IP192.168.0.140
PortNMEA TCP port10110 (de-facto standard) / 4001 (device-specific)
  • The character set is fixed to US-ASCII (no form option).
  • Advanced option nmea.port (not shown in the form — can only be specified as options when registering via REST API): if a value is present, the connection uses it instead of the port entered in the form above.
Writing not supported

NMEA 0183 normally uses one-way sentence broadcast. The gateway operates read-only. If you need equipment control, install a separate NMEA 2000 / Modbus gateway.


Tag PLC address notation

Addresses use <sentence-type>.<field-no|alias>dot (.) notation. The field number is a 1-based index excluding the 2-character talker.

NotationMeaning
RMC.7Field 7 of RMC (speed over ground, kn)
GGA.2Field 2 of GGA (latitude)
RMC.latalias — see the table below (case-insensitive)
RMC(field omitted) the entire last received raw sentence

Sentence types with no defined alias can still be accessed by field number (XXX.3), and specifying only the type returns the entire raw sentence as a string.

Different from the older notation

Colon notation (RMC:lat) and RAW:<sentence-type> notation are not supported — register them as RMC.lat and <sentence-type> (type only), respectively. There are also no long-name aliases such as satellites / windAngle / windSpeed — the actual aliases are sats / angle / speed (the table below is the complete driver definition).

Full list of supported sentences / aliases (driver definition)

sentencealias
RMCutc, status, lat, ns, lon, ew, speed (kn), course, date, magvar, magvarew, mode
GGAutc, lat, ns, lon, ew, fix, sats (satellite count), hdop, alt, altunit, geoidsep, sepunit, dgpsage, dgpsid
GLLlat, ns, lon, ew, utc, status, mode
VTGcogtrue, cogmag, speed (kn, = speedkn), speedkm (km/h), mode
GSAmode1, mode2, pdop, hdop, vdop
GSVtotalmsgs, msgnum, satsinview
HDTheading (true), t
HDMheading (magnetic), m
MWVangle (wind angle), ref (R/T), speed (wind speed), units, status
DBTdepthft, depthm (= depth, m), depthfa
DPTdepth (m), offset, max
MTWtemp, units
VHWheadingt, headingm, speed (kn), speedkm
ZDAutc, day, month, year, tzh, tzm
XDRtype, value, units, id (first transducer group only)

Reception rules (driver behavior)

  • Only sentences beginning with $ are processed — ! encapsulation (AIVDM / AIVDO for AIS) is not supported.
  • Sentences whose checksum (XOR over the $* range) does not match are discarded. Sentences with no checksum (some legacy equipment) are accepted.
  • The 2-character talker (GP / GN / GL / HC / II …) is stripped automatically — $GPRMC and $GNRMC are cached under the same RMC key, so the last received value is what gets exposed. Proprietary $P... sentences become keys as-is, with no talker separation.

Data format matching

Values are exposed exactly as the ASCII text of the sentence field — the driver performs no unit or coordinate conversion.

sentence fieldData formatFormat helper
Numeric fields such as speed / depth / altitude / DOPFloatREAL
Fix quality / satellite countInteger(leave empty)
Latitude / longitude (raw DDMM.MMMM)Float (+ conversion via formula recommended)REAL
UTC time / status character (A/V) / raw sentenceStringSTR[80]
Latitude/longitude is raw DDMM.MMMM

NMEA latitude/longitude uses the "DDMM.MMMM" format (e.g. 4807.038 = 48°07.038′), and the driver does not convert it to decimal degrees. If you need decimal degrees, attach a conversion expression to the tag via Apply formula.


Common problems and solutions

Symptom / messagePossible causeSolution
"Connection refused"TCP port on the NMEA router is not openEnable the TCP server in the multiplexer settings (Brookhouse / Actisense / NavLink2)
Only some sentences arriveThe equipment does not transmit that sentenceCheck the list of transmitted sentences in the equipment manual
Latitude/longitude appears as an unexpectedly large numberRaw DDMM.MMMM is exposed as-is (normal behavior — the driver does not convert)Convert to decimal degrees with Apply formula
AIS (AIVDM) values do not arrive! encapsulation is not supported (only $ sentences are processed)Route through a separate AIS decoder (see the tip below)
The same sentence is transmitted by multiple talkersSame key after talker stripping — only the last received value is exposedApply a talker filter on the router
Sentences arrive too rapidlyNMEA typically runs at 1 Hz–10 HzSet the tag polling period to 1 second to receive the latest value

Frequently used examples

A basic GPS + environmental sensor set for a vessel:

Tag nameAddressData formatFormat helper
Latitude (DDMM.MMMM)RMC.latFloatREAL
Longitude (DDDMM.MMMM)RMC.lonFloatREAL
Speed (knots)RMC.speedFloatREAL
Satellite countGGA.satsInteger(leave empty)
Fix qualityGGA.fixInteger(leave empty)
Wind angleMWV.angleFloatREAL
Wind speedMWV.speedFloatREAL
Depth (m)DPT.depthFloatREAL
Gyro headingHDT.headingFloatREAL
AIS is separate

AIS (vessel identification) is a separate payload carried on top of NMEA 0183. If you need to decode the binary payload of AIVDM / AIVDO sentences, we recommend bringing the data in through a separate AIS decoder (gpsd / aisutils).


More detailed examples / automated registration