Meshtastic LoRa

Use Meshtastic messaging, BoatKit vessel alerts, and a narrowly constrained data fallback through a LoRa mesh.

BoatKit
Meshtastic LoRa
1BoatKit alerts2Meshtastic mesh3Phone receiver
Meshtastic LoRa + BoatKit

BoatKit adds an off-grid path beside its onboard and BoatKit Cloud notification options. When a normalized vessel event is queued, a dedicated BoatKit device can copy the selected severity to a Meshtastic radio over USB. Meshtastic carries the readable text across the configured LoRa channel or mesh to a second radio near the phone.

The BoatKit native app pairs directly with that receiver over Bluetooth LE. Because a Meshtastic receiver effectively has one active phone client, BoatKit includes Meshtastic messaging inside its Messages panel while it owns the connection. Ordinary text is retained locally in channel and direct-node conversations, and direct sends can show a routing acknowledgement without claiming that anyone read the message. A compact marker in each BoatKit alarm text identifies the vessel and severity so matching messages also become local phone notifications. BoatKit and the standard Meshtastic app cannot reliably use the same receiver simultaneously; after BoatKit releases it, the standard app remains a fallback for fresh traffic.

One integration across Meshtastic hardware

The connection uses Meshtastic’s shared PhoneAPI rather than a board-specific protocol. Compatible radios running suitable Meshtastic firmware therefore use one BoatKit integration, with hardware-specific work limited to USB identity, Bluetooth behavior, firmware validation, antennas, and power. The Heltec WiFi LoRa 32 V4 is the initial boat-side target, and the SenseCAP T1000-E and Heltec Mesh Node T1 are initial mobile-receiver targets.

BoatKit leaves the channel key and regulatory region on the radios. Vessel settings select the already-configured channel slot and choose whether to send routine notifications, warnings, alarms, and scheduled reports. A report can include current GPS coordinates and the distance and state relative to the active anchor alarm.

Installers can prove the complete path without creating a fake safety alarm. Send test message broadcasts a compact challenge from the vessel integration and shows one queued-to-sent progress line. Once the BoatKit mobile app receives it, an ordinary phone notification opens the LoRa receiver panel and a yellow warning under LoRa on the vessel list marks the test awaiting Test ACK. The warning clears after the phone queues that ACK; the vessel reports Ack received, confirming the full round trip, only after it receives the matching application acknowledgement. A local USB or Bluetooth handoff alone does not prove RF receipt.

For slow Power subscriptions, Send 3-fragment test transmits three numbered diagnostics on the selected channel without changing vessel data. The native Viewer’s top-right LoRa status opens a recent per-boat packet log showing received fragment numbers, completed assemblies, and parsing errors. That separates missing radio packets from a Power translation problem before troubleshooting the topology or readings.

Meshtastic chat history remains on the mobile app installation rather than BoatKit Cloud. BoatKit retains up to 500 plain-text messages per channel or direct-node conversation and 2,000 messages total. It reads channel labels and known node names from the radio but never copies or exposes channel keys.

A narrowly constrained fallback Viewer

BoatKit also carries a bespoke compact safety stream on Meshtastic’s private application port. The vessel broadcasts a 28-byte position, heading, course, speed, and safety-presence report on a configurable interval from 30 seconds to 15 minutes, defaulting to one minute. While anchor watch is enabled, the report grows to 40 bytes with the anchor center and whole-foot warning and alarm radii. A separate bounded alarm report is sent only while alarms exist, so the baseline still works when the phone’s return link is too weak. The native app validates each report on receipt and retains its parsed state with the original send and receipt times. Reopening the Viewer displays that retained state at its actual age, while invalid reports leave the last usable state intact. The bundled Viewer displays those snapshots through its normal stores and calculates current anchor distance. The native app retains the newest 1,000 valid positions for each associated vessel, so the Chart can draw a recent phone-local track even without a live connection to the boat. When a two-way path is available, the native app can subscribe to an allowlisted extra store that the open Viewer needs. The first is a slow, filtered PowerSystem view: BoatKit sends a compact topology keyframe once, a packed fixed-unit readings keyframe, and then only changed readings against the last application-acknowledged generation. The Power tool shows each loading stage while those radio packets arrive.

The common 16-byte envelope adds a four-byte vessel discriminator, send time, sequence, and CRC16. Compact Power packets add a four-byte topology checksum and bounded fragment numbering, and topology and readings are acknowledged independently. BoatKit does not expose general RPCs, configuration, provider registers, or arbitrary Restream stores. Its one narrow control lets the user move and resize an already-active anchor watch from the Chart, then explicitly save one 28-byte geometry command. A fresh vessel report confirms the update; LoRa cannot start, stop, sleep, or otherwise configure the watch. The Chart marks both the boat and its Data age stale after 2 minutes 5 seconds without a new vessel report. The normal authenticated LAN or BoatKit Cloud connection always wins when healthy; LoRa state is applied only during an outage, and a normal full snapshot reclaims authority on reconnect.

Background notification behavior

On iOS and iPadOS, BoatKit uses the standard Bluetooth-central background mode. Alarm-severity LoRa messages use BoatKit’s approved Critical Alerts capability and alarm sound when the user has authorized them; otherwise they fall back to time-sensitive presentation. Warnings remain time sensitive, and routine reports use ordinary notifications. The user must grant Bluetooth and notification permission, and force-quitting the app still prevents Bluetooth relaunch until BoatKit is opened again.

Android maintains the receiver through a foreground connected-device service and shows its required persistent service notification. Alarm-severity LoRa messages use BoatKit’s Do Not Disturb-bypass alarm channel when the user has enabled it, with a normal alarm fallback. Nearby-device permission, notification permission, and device-specific battery policies still apply.

LoRa is a best-effort radio transport whose real range depends on the radios, antennas, mounting, terrain, interference, regional settings, and available mesh relays. It is a useful supplemental awareness path, not a substitute for required watchkeeping or a certified distress or alarm system.

Read the Meshtastic LoRa setup guide.

Meshtastic is a third-party project and trademark. BoatKit is not certified or endorsed by Meshtastic.