Signal K server plugin that converts Signal K deltas into NMEA 0183
sentences and publishes them on the server's TCP NMEA 0183 port
(10110 by default). A per-sentence throttle lets you cap the emission
rate in milliseconds so downstream NMEA 0183 consumers don't get
flooded.
Through the Signal K server admin UI — App Store → search for
signalk-to-nmea0183 → install. Or from the command line in your
~/.signalk dir:
npm install @signalk/signalk-to-nmea0183Requires signalk-server
with Node >=22.
For NMEA 2000 AIS → NMEA 0183 conversion use
signalk-n2kais-to-nmea0183instead. This plugin does not emit AIS sentences.
- Enable the plugin in the server admin UI (Server → Plugin Config → Convert Signal K to NMEA0183) and tick the individual sentences you want emitted.
- Connect any NMEA 0183 client (OpenCPN, kplex, netcat, ...) to
localhost:10110— the server's built-in TCP NMEA 0183 server.
If the TCP server is off, enable it in Server → Settings → Interfaces → nmea-tcp. No restart needed.
Each sentence is independently toggleable and has its own throttle
(ms). Leave the throttle at 0 to emit on every source update.
- APB — autopilot info, magnetic bearings (
--truevariant also available) - RMB — recommended minimum navigation info to waypoint
- XTE — cross-track error (
-GCgreat-circle variant also available)
- GLL — geographic position, lat + lon
- HDG / HDM / HDMC / HDT / HDTC — heading variants (true / magnetic / deviation-corrected / magnetic-computed-from-true / true-computed-from-magnetic)
- ROT — rate of turn
- RMC — recommended minimum navigation data
- VHW — speed and heading through water
- VTG — track made good and speed over ground
- VLW — cumulative / trip log
- DBK / DBS / DBT — depth below keel / surface / transducer
- DPT — depth + transducer offset (
-surfacevariant references water surface)
- MWD — true wind direction + speed (reference: north)
- MWV — apparent (
MWVR) and true (MWVT) wind relative to the vessel - VWR / VWT — legacy relative / true wind angle + speed
- VPW — speed parallel to wind
- MMB — barometric pressure
- MTA — air temperature
- MTW — water temperature
- XDRBaro / XDRTemp / XDRNA — transducer readings for barometric
pressure, air temperature, and pitch + roll (
XDRNA)
- RSA — rudder sensor angle
- GGA — GPS fix data with time
- ZDA — UTC date/time and time-zone offset
- PNKEP01 / PNKEP02 / PNKEP03 / PNKEP99 — NKE Marine Electronics performance sentences: target polar speed, course on the other tack, polar speed + VMG + optimum angle, debug
- PSILCD1 — polar speed + target wind angle for Silva / Nexus / Garmin displays
- PSILTBS — Garmin proprietary target boat speed
By default the converted NMEA 0183 stream is served on TCP port 10110
only. To push it out of a serial port instead, configure the serial
connection as an NMEA 0183 provider in the admin UI, then add a
toStdout: "nmea0183out" line to the provider's subOptions in
settings.json:
{
"pipedProviders": [
{
"id": "serial-out",
"enabled": true,
"pipeElements": [
{
"type": "providers/simple",
"options": {
"logging": false,
"type": "NMEA0183",
"subOptions": {
"type": "serial",
"device": "/dev/ttyUSB0",
"baudrate": 4800,
"providerId": "serial-out",
"toStdout": "nmea0183out"
},
"providerId": "serial-out"
}
}
]
}
]
}The plugin emits each converted sentence as an internal event named
nmea0183out; toStdout wires that event stream into the serial
writer.
Issues and pull requests welcome at
SignalK/signalk-to-nmea0183.
npm test runs the full mocha suite; npm run typecheck +
npm run build guard the TypeScript surface; npm run mutation runs
Stryker against the encoders.
Adding a new sentence is a three-step change documented at the top of
src/sentences/index.ts: create a
SentenceEncoderFactory-shaped module under src/sentences/, import
it in the barrel, add tests under test/. test/registry.ts asserts
barrel-vs-directory parity so a missing import fails CI.
Apache-2.0. See LICENSE.
