Skip to content

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
  • expireAfterSec 5

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
metadata

motors 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 fieldUnit
rpmrevolutions per minute
boostPressureKpakPa
tiltTrimPercent−100 … +100
oilPressureKpa, fuelPressureKpa, coolantPressureKpakPa
oilTemperatureC, coolantTemperatureC°C, converted from kelvin
fuelRateLphlitres per hour
totalEngineHourshours
loadPercent, torquePercentpercent
warningsobject of booleans, below
transmission fieldMeaning
gearforward, neutral, reverse or unknown
oilPressureKpa, oilTemperatureCas above
warningsoverTemperature, lowOilPressure, lowOilLevel
trip fieldUnit
fuelUsedLlitres this trip
averageFuelRateLphlitres per hour
instantFuelEconomyLpNm, averageFuelEconomyLpNmlitres 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:

TierTimeoutEffect
dynamic values — revs, temperatures, pressures, fuel rate, load, torque5 sset to 0 or null
the engine itself5 minremoved 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 ​

PGNNameFeeds
127488Engine Parameters, Rapid Updaterpm, boostPressureKpa, tiltTrimPercent
127489Engine Parameters, Dynamicpressures, temperatures, fuel rate, hours, load, torque, warnings
127493Transmission Parameters, Dynamictransmission
127496Trip Parameters, Vesselvessel
127497Trip Parameters, Enginetrip
130576Trim Tab StatustrimTab

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
  • expireAfterSec 5
  • Data older than 10 s is dropped from the report
data
└── thrusters
    └── "<identifier>"
        ├── control
        ├── info
        └── motor
metadata
GroupFields
controldirection, speedPercent, powerEnabled, retractControl, azimuthDeg, commandTimeoutSec, controlEvents
infomotorType, powerRatingW, maxRotationalSpeedRpm, maxTemperatureC
motorcurrentA, temperatureC, operatingTimeMin, motorEvents

metadata carries thrusterCount alongside the usual timestamps.

PGNNameFeeds
128006Thruster Control Statuscontrol
128007Thruster Informationinfo
128008Thruster Motor Statusmotor

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:

  1. Is the module on? Look for Motor in the startup summary line, or read nmea/config.
  2. Is anything transmitting? nmea/devices lists the bus, and nmea/device/<addr>/pgn/127488 shows raw engine frames when raw PGN publishing is enabled with --mqtt-publish-pgn.
  3. Are both engines on the same instance? Two engines shipped at instance 0 collapse into one entry. Fix it with the I key in muxen-nmea2000-config — Navigation.

More in Troubleshooting.

Integration of multiplexed solutions
MUXEN and the MUXEN logo are trademarks of MUXEN SAS.