Appearance
Engines and thrusters
The engine page — revs, oil pressure, coolant temperature, fuel rate, hours, and the warning lamps — comes from the engines themselves. On a modern boat the engine or its gateway broadcasts all of that onto the NMEA 2000 bus continuously, one set of readings per engine.
muxen-nmea2000 collects those readings, keys them by engine instance — which is what makes one of them "port" and the other "starboard" — converts them out of the standard's units into the ones a display wants, and publishes one message describing every engine on the boat.
Bow and stern thrusters work the same way and are covered at the end of this chapter.
Two things are worth knowing before reading a number off the page:
- The daemon reports what the engine says. It does not calculate, correct or second-guess. A wrong reading is an engine or gateway problem.
- A value that stops arriving becomes zero or null, not the last value. An engine that goes quiet drops out of the report entirely after five minutes. Nothing on this page is ever a frozen leftover.
The engine report
Enable it with --report-motor, or ReportMotor in the deploy configuration.
- Topic
nmea/motor - Rate 1 Hz, or 10 Hz with
--motor-high-speed/MotorHighSpeed - QoS 0, not retained
expireAfterSec5
Not retained is deliberate and differs from most topics here: engine data is only meaningful live. A screen that subscribes after the daemon has stopped gets nothing rather than a plausible-looking snapshot of a stopped engine.
Nothing is published at all while no engine is active. An empty engine page on a boat with the module enabled usually means the engines are off, not that the module is broken.
Shape
data
├── motors
│ ├── "0" ← engine instance, as a string key
│ │ ├── engine
│ │ ├── transmission
│ │ ├── trip
│ │ └── trimTab
│ └── "1"
└── vessel
metadatamotors is an object keyed by the engine instance number as a string, not an array — so a single-engine boat with the engine at instance 1 has motors."1" and no motors."0".
engine field | Unit |
|---|---|
rpm | revolutions per minute |
boostPressureKpa | kPa |
tiltTrimPercent | −100 … +100 |
oilPressureKpa, fuelPressureKpa, coolantPressureKpa | kPa |
oilTemperatureC, coolantTemperatureC | °C, converted from kelvin |
fuelRateLph | litres per hour |
totalEngineHours | hours |
loadPercent, torquePercent | percent |
warnings | object of booleans, below |
transmission field | Meaning |
|---|---|
gear | forward, neutral, reverse or unknown |
oilPressureKpa, oilTemperatureC | as above |
warnings | overTemperature, lowOilPressure, lowOilLevel |
trip field | Unit |
|---|---|
fuelUsedL | litres this trip |
averageFuelRateLph | litres per hour |
instantFuelEconomyLpNm, averageFuelEconomyLpNm | litres per nautical mile |
trimTab carries portPercent and starboardPercent, −100 … +100.
vessel is per-boat rather than per-engine, and appears only once data for it has arrived: timeToEmptySec, distanceToEmptyNm, fuelRemainingL, tripRunTimeSec.
metadata carries rxDate, rxTimestamp, expireAfterSec and motorCount.
Warning flags
engine.warnings mirrors the two discrete-status bytes the engine broadcasts. Each is a plain boolean:
checkEngine, overTemperature, lowOilPressure, lowOilLevel, lowFuelPressure, lowSystemVoltage, lowCoolantLevel, waterInFuel, chargeIndicator, preheatIndicator, engineShutdown, emergencyStop.
These are the engine's own warnings, passed through unchanged. They are not NMEA 2000 alerts and do not go through the alarm subsystem (Alarms) unless something else raises an alarm for them.
Two-tier ageing
Engine data ages out in two stages, because "the revs stopped arriving" and "the engine is gone" are different events:
| Tier | Timeout | Effect |
|---|---|---|
| dynamic values — revs, temperatures, pressures, fuel rate, load, torque | 5 s | set to 0 or null |
| the engine itself | 5 min | removed from motors entirely |
Values that describe the engine rather than its current state — total hours, the warning flags, the selected gear — are kept for the full five minutes. An engine that has just been shut down therefore still shows its hour meter and its last gear while its revs read zero, which is what an operator expects.
Which PGNs feed it
| PGN | Name | Feeds |
|---|---|---|
| 127488 | Engine Parameters, Rapid Update | rpm, boostPressureKpa, tiltTrimPercent |
| 127489 | Engine Parameters, Dynamic | pressures, temperatures, fuel rate, hours, load, torque, warnings |
| 127493 | Transmission Parameters, Dynamic | transmission |
| 127496 | Trip Parameters, Vessel | vessel |
| 127497 | Trip Parameters, Engine | trip |
| 130576 | Trim Tab Status | trimTab |
Other engine PGNs — 127490, 127494, 127498 — are decoded and published on the per-device raw topics, but do not feed this report.
The thruster report
Enable it with --report-thruster, or ReportThruster.
- Topic
nmea/thruster - Rate 1 Hz
- QoS 0, not retained
expireAfterSec5- Data older than 10 s is dropped from the report
data
└── thrusters
└── "<identifier>"
├── control
├── info
└── motor
metadata| Group | Fields |
|---|---|
control | direction, speedPercent, powerEnabled, retractControl, azimuthDeg, commandTimeoutSec, controlEvents |
info | motorType, powerRatingW, maxRotationalSpeedRpm, maxTemperatureC |
motor | currentA, temperatureC, operatingTimeMin, motorEvents |
metadata carries thrusterCount alongside the usual timestamps.
| PGN | Name | Feeds |
|---|---|---|
| 128006 | Thruster Control Status | control |
| 128007 | Thruster Information | info |
| 128008 | Thruster Motor Status | motor |
The daemon reports the thruster; it never commands one. There is no path in this daemon that transmits a thruster control message.
Diagnostics
sh
mosquitto_sub -h 127.0.0.1 -t 'nmea/motor' -v
mosquitto_sub -h 127.0.0.1 -t 'nmea/thruster' -v--verbose-motor logs each engine as it appears, each instance change and each expiry, prefixed Motor:.
If nothing is published, work through:
- Is the module on? Look for
Motorin the startup summary line, or readnmea/config. - Is anything transmitting?
nmea/deviceslists the bus, andnmea/device/<addr>/pgn/127488shows raw engine frames when raw PGN publishing is enabled with--mqtt-publish-pgn. - Are both engines on the same instance? Two engines shipped at instance 0 collapse into one entry. Fix it with the
Ikey inmuxen-nmea2000-config— Navigation.
More in Troubleshooting.
