Appearance
PGN reference
An NMEA 2000 message is identified by its PGN, its Parameter Group Number. The PGN says what the message is — 128267 is Water Depth, 129029 is a GNSS position — and every device on the bus broadcasts a handful of them.
This chapter lists every PGN this daemon decodes, every one it transmits, and how the multi-frame protocol works underneath. It is reference material for someone reading a candump capture or writing a compatible device; nothing here is needed to use the system.
Names below are the ones the decoders use.
Protocol PGNs
These carry the network itself rather than boat data. They are handled in the dispatcher and the address claim core.
| PGN | Hex | Name | TX | RX |
|---|---|---|---|---|
| 59392 | 0xE800 | ISO Acknowledgment | yes | yes |
| 59904 | 0xEA00 | ISO Request | yes | yes |
| 60928 | 0xEE00 | Address Claimed | yes | yes |
| 65240 | 0xFED8 | Commanded Address | yes | |
| 126208 | 0x1ED00 | Request / Command / Acknowledge Group Function | yes | yes |
| 126464 | 0x1EE00 | Transmit and Receive PGN Lists | yes | yes |
| 126993 | 0x1F011 | Heartbeat | yes | |
| 126996 | 0x1F014 | Product Information | yes | |
| 126998 | 0x1F016 | Configuration Information | yes |
126208 is used in both directions: the daemon answers Request and Command group functions addressed to it, and transmits Command group functions to change a remote device's instance or one field of one of its PGNs — see Navigation.
The contents of 126996 and 126998 are set by the --nmea-version, --product-code, --model-id, --product-name, --serial-number, --cert-level, --load-equiv and --install-desc1 options. Defaults are in Reference.
Alerts
| PGN | Hex | Name | TX | RX |
|---|---|---|---|---|
| 126983 | 0x1F007 | Alert | yes | |
| 126984 | 0x1F008 | Alert Response | yes | |
| 126985 | 0x1F009 | Alert Text | yes |
126986, Alert Configuration, is defined but neither transmitted nor decoded. See Alarms.
Navigation and position
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 65267 | 0xFEF3 | Vehicle Position (J1939) | single | |
| 65256 | 0xFEE8 | Vehicle Direction/Speed (J1939) | single | |
| 129025 | 0x1F801 | Position, Rapid Update | single | yes |
| 129026 | 0x1F802 | COG & SOG, Rapid Update | single | yes |
| 129029 | 0x1F805 | GNSS Position Data | fast | yes |
| 129044 | 0x1F814 | Datum | fast | |
| 129283 | 0x1F903 | Cross Track Error | single | yes |
| 129284 | 0x1F904 | Navigation Data | fast | yes |
| 129285 | 0x1F905 | Route/WP Information | fast | |
| 129291 | 0x1F90B | Set & Drift, Rapid Update | single | |
| 130577 | 0x1FE11 | Direction Data | fast | yes |
Time and date
| PGN | Hex | Name | Frames |
|---|---|---|---|
| 126992 | 0x1F010 | System Time | single |
| 129033 | 0x1F809 | Time & Date | single |
GNSS and satellites
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 129539 | 0x1FA03 | GNSS DOPs | single | yes |
| 129540 | 0x1FA04 | GNSS Satellites in View | fast | yes |
| 129542 | 0x1FA06 | GNSS Range Residuals | fast | |
| 129547 | 0x1FA0B | GNSS Pseudorange Error Statistics | fast |
Steering and attitude
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 127237 | 0x1F105 | Heading/Track Control | fast | yes |
| 127245 | 0x1F10D | Rudder | single | yes |
| 127250 | 0x1F112 | Vessel Heading | single | yes |
| 127251 | 0x1F113 | Rate of Turn | single | yes |
| 127257 | 0x1F119 | Attitude | single | yes |
Speed, depth and log
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 128000 | 0x1F400 | Nautical Leeway Angle | single | |
| 128259 | 0x1F503 | Speed, Water Referenced | single | yes |
| 128267 | 0x1F50B | Water Depth | single | yes |
| 128275 | 0x1F513 | Distance Log | fast |
Environment
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 127258 | 0x1F11A | Magnetic Variation | single | |
| 130306 | 0x1FD02 | Wind Data | single | yes |
| 130310 | 0x1FD06 | Environmental Parameters | single | yes |
| 130311 | 0x1FD07 | Environmental Parameters (deprecated) | single | |
| 130312 | 0x1FD08 | Temperature | single | |
| 130313 | 0x1FD09 | Humidity | single | |
| 130314 | 0x1FD0A | Actual Pressure | single | |
| 130316 | 0x1FD0C | Temperature, Extended Range | single |
Engine and transmission
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 127488 | 0x1F200 | Engine Parameters, Rapid Update | single | yes |
| 127489 | 0x1F201 | Engine Parameters, Dynamic | fast | yes |
| 127490 | 0x1F202 | Engine Parameters, Static | fast | |
| 127493 | 0x1F205 | Transmission Parameters, Dynamic | single | yes |
| 127494 | 0x1F206 | Transmission Parameters, Static | fast | |
| 127496 | 0x1F208 | Trip Parameters, Vessel | fast | yes |
| 127497 | 0x1F209 | Trip Parameters, Engine | fast | yes |
| 127498 | 0x1F20A | Engine Parameters, Static | fast | |
| 130576 | 0x1FE30 | Trim Tab Status | single | yes |
J1939 engine PGNs
Some engines and gensets on a marine bus speak J1939 rather than NMEA 2000 for their own data. These are decoded too:
| PGN | Hex | Name |
|---|---|---|
| 61443 | 0xF003 | Electronic Engine Controller 2 (EEC2) |
| 61444 | 0xF004 | Electronic Engine Controller 1 (EEC1) |
| 61445 | 0xF005 | Electronic Engine Controller 3 (EEC3) |
| 65214 | 0xFEBE | Auxiliary I/O Status (AUXIO) |
| 65242 | 0xFEDA | Software Identification (SOFT) |
| 65253 | 0xFEE5 | Engine Hours, Revolutions |
| 65260 | 0xFEEC | Vehicle Identification Number (VIN) |
| 65262 | 0xFEEE | Engine Temperature 1 (ET1) |
| 65263 | 0xFEEF | Engine Fluid Level/Pressure 1 (EFLP1) |
| 65266 | 0xFEF2 | Fuel Economy, Liquid (LFE) |
| 65270 | 0xFEF6 | Inlet/Exhaust Conditions 1 (IC1) |
| 65271 | 0xFEF7 | Vehicle Electrical Power 1 (VEP1) |
| 65272 | 0xFEF8 | Transmission Fluids (TF) |
Electrical
| PGN | Hex | Name | Frames |
|---|---|---|---|
| 127501 | 0x1F20D | Binary Switch Bank Status | single |
| 127503 | 0x1F20F | AC Input Status | fast |
| 127504 | 0x1F210 | AC Output Status | fast |
| 127505 | 0x1F211 | Fluid Level | single |
| 127506 | 0x1F212 | DC Detailed Status | fast |
| 127507 | 0x1F213 | Charger Status | fast |
| 127508 | 0x1F214 | Battery Status | single |
| 127509 | 0x1F215 | Inverter Status | fast |
| 127513 | 0x1F219 | Battery Configuration Status | fast |
| 127744 | 0x1F300 | AC Power / Current, Phase A | single |
| 127745 | 0x1F301 | AC Power / Current, Phase B | single |
| 127746 | 0x1F302 | AC Power / Current, Phase C | single |
| 127747 | 0x1F303 | AC Voltage / Frequency, Phase A | single |
| 127748 | 0x1F304 | AC Voltage / Frequency, Phase B | single |
| 127749 | 0x1F305 | AC Voltage / Frequency, Phase C | single |
| 127750 | 0x1F306 | Converter Status | single |
| 127751 | 0x1F307 | DC Voltage / Current | single |
AIS
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 129038 | 0x1F80E | AIS Class A Position Report | fast | yes |
| 129039 | 0x1F80F | AIS Class B Position Report | fast | yes |
| 129040 | 0x1F810 | AIS Class B Extended Position Report | fast | |
| 129041 | 0x1F811 | AIS Aids to Navigation Report | fast | yes |
| 129793 | 0x1FB01 | AIS UTC and Date Report | fast | |
| 129794 | 0x1FB02 | AIS Class A Static and Voyage Related Data | fast | yes |
| 129795 | 0x1FB03 | AIS Addressed Binary Message | fast | |
| 129796 | 0x1FB04 | AIS Acknowledge | fast | |
| 129797 | 0x1FB05 | AIS Binary Broadcast Message | fast | |
| 129798 | 0x1FB06 | AIS SAR Aircraft Position Report | fast | yes |
| 129801 | 0x1FB09 | AIS Addressed Safety Related Message | fast | |
| 129802 | 0x1FB0A | AIS Safety Related Broadcast Message | fast | yes |
| 129809 | 0x1FB11 | AIS Class B Static Data, Part A | fast | yes |
| 129810 | 0x1FB12 | AIS Class B Static Data, Part B | fast | yes |
| 129812 | 0x1FB14 | AIS Single Slot Binary Message | fast |
The encoders exist because the simulator transmits realistic AIS traffic; the daemon itself does not transmit AIS on a boat.
DSC
| PGN | Hex | Name | Frames |
|---|---|---|---|
| 129808 | 0x1FB10 | DSC Call Information | fast |
Route and waypoint service
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 130064 | 0x1FC40 | Route and WP Service — Database List | fast | |
| 130065 | 0x1FC41 | Route and WP Service — Route List | fast | |
| 130066 | 0x1FC42 | Route and WP Service — Route/WP-List Attributes | fast | yes |
| 130067 | 0x1FC43 | Route and WP Service — Route, WP Name & Position | fast | yes |
| 130068 | 0x1FC44 | Route and WP Service — Route, WP Name | fast | |
| 130069 | 0x1FC45 | Route and WP Service — XTE Limit & Navigation Method | fast | |
| 130074 | 0x1FC4A | Route and WP Service — WP List, WP Name & Position | fast |
Radar and target tracking
| PGN | Hex | Name | Frames |
|---|---|---|---|
| 128520 | 0x1F608 | Tracked Target Data | fast |
| 128521 | 0x1F609 | Tracked Target Information | fast |
| 128522 | 0x1F60A | Radar Guard Zone | fast |
| 128523 | 0x1F60B | Radar Data Processing Status | fast |
| 128524 | 0x1F60C | Radar Sweep Status | fast |
Thrusters, windlass and watermaker
| PGN | Hex | Name | Frames | Encoder |
|---|---|---|---|---|
| 128006 | 0x1F406 | Thruster Control Status | single | yes |
| 128007 | 0x1F407 | Thruster Information | single | yes |
| 128008 | 0x1F408 | Thruster Motor Status | single | yes |
| 128777 | 0x1F709 | Anchor Windlass Operating Status | single | |
| 128780 | 0x1F70C | Linear Actuator | single | |
| 130567 | 0x1FE07 | Watermaker Input Setting and Status | fast | |
| 130568 | 0x1FE08 | Watermaker Operating Status | fast | |
| 130569 | 0x1FE09 | Watermaker Production Status | fast |
Fast Packet
Single CAN frames carry 8 bytes. Anything longer uses NMEA 2000's Fast Packet protocol, which splits the message across consecutive frames of the same PGN.
| Property | Value |
|---|---|
| Maximum payload | 223 bytes |
| Reassembly timeout | 750 ms |
| Frame counter | first byte, bits 0–4 |
| Sequence counter | first byte, bits 5–7 |
| Timeout check interval | 100 ms |
The first frame carries the sequence and frame counters, the total byte count and the first 6 payload bytes; every subsequent frame carries the counters and 7 more bytes. The 3-bit sequence counter lets two Fast Packet messages of the same PGN interleave without being confused for one another, and the reassembler keys its sessions on it.
An incomplete message is dropped when the 750 ms timer expires. The daemon counts completed, dropped and processed frames and prints the totals at shutdown:
Fast Packet: Stats completed=1234 dropped=2 frames=9876--fp-delay USEC sets the gap between transmitted Fast Packet frames, default 1000 µs. Some chartplotters lose frames sent back to back.
The Linux kernel's J1939 stack may reassemble a Fast Packet itself, in which case the whole payload arrives in a single read and bypasses the reassembler entirely. Both paths end in the same handler.
--pgn-list-fp-only restricts the transmitted PGN List (126464) to what fits in one Fast Packet message — 74 PGNs — rather than using ISO transport for a longer list. It is a compatibility workaround for plotters that cannot read the longer form.
Proprietary PGNs
NMEA 2000 reserves four ranges for manufacturer-specific messages. The first two bytes of the payload carry an 11-bit manufacturer code and a 3-bit industry group; the rest is manufacturer-defined.
| Range | Hex | Frames | Addressing |
|---|---|---|---|
| 61184–61439 | 0xEF00–0xEFFF | single | destination-specific |
| 65280–65535 | 0xFF00–0xFFFF | single | broadcast |
| 126720–126975 | 0x1EF00–0x1EFFF | fast | destination-specific |
| 130816–131071 | 0x1FF00–0x1FFFF | fast | broadcast |
An unrecognised proprietary PGN is logged and ignored; it never produces an error. --verbose-pgn-proprietary logs them with their manufacturer code and payload, which is the starting point for adding support for a new one.
Supported proprietary PGNs
| Manufacturer | Code | PGN | Hex | Name | Frames |
|---|---|---|---|---|---|
| Cyclops Marine | 641 | 65293 | 0xFF0D | Load Data | single |
Unknown PGNs
A PGN with no decoder is logged with its number, source address and payload length, and otherwise ignored. That is deliberate: a marine bus carries traffic from equipment this daemon has never heard of, and a gateway that treated the unknown as an error would be useless.
Name tables
Three JSON tables ship with the package and are loaded at startup from --data-dir:
| File | Content |
|---|---|
manufacturers.json | NMEA manufacturer code to name |
functionNames.json | J1939 function code to name |
pgn.json | PGN number to name |
pgn.json has a standard array of { "pgn": …, "name": … } and an empty proprietary object reserved for manufacturer-specific definitions.
A missing or unreadable table is not fatal: the daemon logs the failure and reports numeric codes instead of names.
Standards
PGN numbers, their field layouts and the Fast Packet protocol are defined by NMEA 2000 (IEC 61162-3). The 6xxxx-range PGNs and the NAME and address-claim machinery come from SAE J1939. Neither standard is reproduced here; MUXEN's copies are third-party material and are not part of this manual.
