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.
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 field | What to enter | Example |
|---|---|---|
| IP address | NMEA multiplexer / router IP | 192.168.0.140 |
| Port | NMEA TCP port | 10110 (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 asoptionswhen registering via REST API): if a value is present, the connection uses it instead of the port entered in the form above.
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.
| Notation | Meaning |
|---|---|
RMC.7 | Field 7 of RMC (speed over ground, kn) |
GGA.2 | Field 2 of GGA (latitude) |
RMC.lat | alias — 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.
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)
| sentence | alias |
|---|---|
RMC | utc, status, lat, ns, lon, ew, speed (kn), course, date, magvar, magvarew, mode |
GGA | utc, lat, ns, lon, ew, fix, sats (satellite count), 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 (wind angle), ref (R/T), speed (wind speed), 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 (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 —
$GPRMCand$GNRMCare cached under the sameRMCkey, 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 field | Data format | Format helper |
|---|---|---|
| Numeric fields such as speed / depth / altitude / DOP | Float | REAL |
| Fix quality / satellite count | Integer | (leave empty) |
| Latitude / longitude (raw DDMM.MMMM) | Float (+ conversion via formula recommended) | REAL |
| UTC time / status character (A/V) / raw sentence | String | STR[80] |
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 / message | Possible cause | Solution |
|---|---|---|
| "Connection refused" | TCP port on the NMEA router is not open | Enable the TCP server in the multiplexer settings (Brookhouse / Actisense / NavLink2) |
| Only some sentences arrive | The equipment does not transmit that sentence | Check the list of transmitted sentences in the equipment manual |
| Latitude/longitude appears as an unexpectedly large number | Raw 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 talkers | Same key after talker stripping — only the last received value is exposed | Apply a talker filter on the router |
| Sentences arrive too rapidly | NMEA typically runs at 1 Hz–10 Hz | Set 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 name | Address | Data format | Format helper |
|---|---|---|---|
| Latitude (DDMM.MMMM) | RMC.lat | Float | REAL |
| Longitude (DDDMM.MMMM) | RMC.lon | Float | REAL |
| Speed (knots) | RMC.speed | Float | REAL |
| Satellite count | GGA.sats | Integer | (leave empty) |
| Fix quality | GGA.fix | Integer | (leave empty) |
| Wind angle | MWV.angle | Float | REAL |
| Wind speed | MWV.speed | Float | REAL |
| Depth (m) | DPT.depth | Float | REAL |
| Gyro heading | HDT.heading | Float | REAL |
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
- NMEA examples in Advanced — REST API
- Technical details: NMEA 0183 driver (advanced)