@meri-imperiumi/signalk-meshtastic
v1.2.3
Published
Signal K plugin for interfacing with the Meshtastic LoRa mesh network
Maintainers
Readme
Signal K integration with Meshtastic
This plugin enables vessels running Signal K to interact with the Meshtastic mesh network. Meshtastic allows radio communications between relatively inexpensive LoRa devices over long distances. The Signal K Meshtastic plugin allows seeing telemetry and receiving alerts from your vessel while ashore. It can also control vessel features like digital switching over text message.
If desired, telemetry and position information can also be shared between multiple Meshtastic-using vessels, making it effectively a "pseudo-AIS" system.

Being a mesh network, there is no need for external telecommunications infrastructure or monthly payments. This means communication between Meshtastic devices onboard and on shore can work just as well in the Finnish Archipelago Sea as in the Tuamotus. In more densely populated places communications may benefit from other Meshtastic users relaying the messages, making it possible to communicate with the boat across a city.
This plugin is designed to work with regular unmodified Meshtastic devices and settings. You can keep your boat and other Meshtastic nodes either in the public channel, or set up your private mesh. With a private channel the location of your devices won't be visible to the public, and communications between them will be encrypted.
Many different kinds of Meshtastic devices are available, from basic microcontroller boards to ready-to-go consumer devices. Some are entirely standalone with screens and keyboards, and others need a smartphone app.
Here is a good introduction to Meshtastic:
Picture this: you’re a family is anchored in a bay. Parents are hiking inland, kids are visiting friends on another boat, and you’re on your boat (“Boat Node”) in the middle. When the kids send, “What’s for dinner?”, Meshtastic uses “flood routing” to make sure it reaches everyone. Here’s how it works:
- The kids’ node sends the message.
- Boat Node receives it and decides, “This is new—let’s pass it on!”
- Boat Node rebroadcasts the message.
- Parents’ node, unable to hear the kids directly, receives it through Boat Node.
There's also an introduction to signalk-meshtastic on the Signal K website.
Status
In production use on several boats.
Features
- Connect to a Meshtastic node via HTTP, TCP, or Serial
- Keep a persistent database of all seen Meshtastic nodes
- Update Meshtastic node position from Signal K GNSS position
- Send Signal K alerts as Meshtastic text messages to crew
- MOB alerts (for example from signalk-mob-notifier) also send a waypoint to the MOB beacon
- Control Signal K with Meshtastic direct messages:
- Share Meshtastic waypoints for AIS targets ("Waypoint DH8613")
- Control digital switching ("Turn decklight on"). Opt-in.
- Share weather station data from Signal K (wind, temperature, etc) over Meshtastic. Opt-in.
- Show position-sharing Meshtastic nodes as vessels in Freeboard etc. Opt-in.
- Associate Meshtastic nodes with other (AIS) vessels based on the
Some node name DE <callsign>pattern
- Associate Meshtastic nodes with other (AIS) vessels based on the
Planned features
- Guard mode to alert if the tracked dinghy moves
- Keeping a mileage log for the dinghy
- More text commands over Meshtastic to query vessel status etc
Requirements
- This plugin running inside your Signal K installation
- One Meshtastic device running and connected to the same network (typically boat WiFi) as Signal K. This should be an ESP32 based device for WiFi connectivity. If using Serial connection, it can also be a nRF52 device
- At least one additional Meshtastic device for the crew ashore. Seeed T1000-e is a great option, but any battery-powered Meshtastic device will work. Having a device for each crew member is even better. In busy areas these should be set to
CLIENT_MUTErole - Optionally, a Meshtastic GPS tracker device installed in the dinghy
- Optionally, a Meshtastic mast-top repeater for greatly increased communications range
LoRa is line-of-sight communications quite similarly to VHF. Communications range would greatly benefit from a Meshtastic repeater installed high in the mast. Similarly, repeaters on nearby hills or high buildings can be helpful. But just with the boat node and the node carried by crew it should be possible to reach ranges of over 1km. We've been able to communicate at over 8km distances in our early tests in Curacao.
Please note that this plugin connects to the "boat node" as a client, meaning that while Signal K is running, the regular Meshtastic client app won't be able to connect to the same device. It is a good idea to enable remote administration so that you can modify the settings of the device over LoRa.
Getting started
- Configure your "boat Meshtastic node" device so that it is connected to your boat network
- If you have a valid Ship Station License, add your callsign to the long name of the node. Typical pattern is
<Vessel name> DE <Callsign>, for example "Lille Oe DE DH8613" (yes, you need to useDEalso for non-German vessels. This is radio slang for "this is", not a country code) - Install and enable this plugin, and set up the connection details (IP address etc)
- Wait for some minutes for the plugin to see nearby Meshtastic nodes
- Configure plugin and set appropriate roles for the crew and dinghy tracker Meshtastic devices

Telemetry sent to Meshtastic
If enabled, your "boat node" will transmit the following telemetry to Meshtastic. This enables tracking various important metrics about your boat also remotely. They are visible in the device details in your Meshtastic app:

Metrics used:
- Temperature (from
environment.outside.temperature) - Relative humidity (from
environment.outside.relativeHumidity) - Barometric pressure (from
environment.outside.pressure) - Wind direction (from
environment.wind.directionTrue) - Wind speed (median of last ten minutes from
environment.wind.speedOverGround) - Battery voltage (from
electrical.batteries.house.voltage) - Battery current (from
electrical.batteries.house.current) - If anchored, distance to anchor (from
navigation.anchor.distanceFromBow) - If not anchored, distance is water depth (from
environment.depth.belowSurface)
Changes
- 1.2.3 (2024-10-15)
- Nodes that haven't been seen in last two days are no longer registered to Signal K data structure
- Added safeties for various non-numeric telemetry and coordinate values
- 1.2.2 (2025-10-01)
- Set "last seen" timestamp of nodes based on packet payloads, not the time they're received
- Send timestamp with telemetry
- Fixed issue with persising node-to-vessel matches from
DE <callsign>
- 1.2.1 (2025-09-28)
- Fixed issue with Signal K servers that don't have navigation.position set
- 1.2.0 (2025-09-28)
- Support for Node.js older than 22.x, for example as seen in Venus OS Large
- Safety for nodes in DB that don't have a "last seen" timestamp
- Made connection status notifications clearer
- 1.1.2 (2025-09-25)
- Added support for the new roles from Meshtastic 2.7 (
ROUTER_LATEandCLIENT_BASE) - Fixed issue with sending a bell with alerts that have sound enabled
- Added support for the new roles from Meshtastic 2.7 (
- 1.1.1 (2025-09-18)
- Fixed empty response text message to digital switching actions
- Added support for the proposed Signal K MOB position specification
- 1.1.0 (2025-09-11)
- Added support for Serial transport with the Meshtastic device
- 1.0.0 (2025-09-11)
- Initial release with HTTP and TCP transports
