Prototype · field validation next

Messages across mesh radio, satellite and mobile networks when connectivity is patchy or gone.

I direct the software, architecture and hardware integration. Elli Zafeiridou Georgiadou assembles hardware and leads verification and QA; George advises on PR and marketing. Most code is AI-assisted, with human review and hardware testing.

What works—and the limits

Bridge software, Hub and phone clients are public. Radio and satellite paths have run on our prototype hardware; the transport documentation distinguishes hardware-tested paths from code-only and bench work.

No real-user field deployment or emergency use is established. A working bench path is not proven emergency reliability. Satellite airtime, bandwidth and hardware still constrain delivery.

Evidence

SIDN fonds independently documents support for two field kits, satellite measurements and more accessible operation. Its project page names Elli. This funds validation; it is not evidence of customer adoption.

Next step

The public plan is a six-month field programme starting November 2026: two portable kits for Dutch volunteer organisations, satellite measurements including failures, and usability work.

Engineering context

The first implementation joined Meshtastic and Iridium SBD. The explanation below records that bridge design; today the router also has other adapters. See the current transport matrix for which paths are hardware-tested. SOS handling is a protocol feature, not a certified emergency service.

Architecture

┌──────────────────────────────────────────────────────────────┐
│                    Meshtastic Mesh Network                    │
│         T-Echo / T-Deck / Heltec V4 / RAK nodes             │
└──────────────────────────┬───────────────────────────────────┘
                           │ LoRa 868/915 MHz
                           ▼
┌──────────────────────────────────────────────────────────────┐
│                     MeshSat Gateway                          │
│  ┌─────────────┐  ┌──────────────┐  ┌────────────────────┐  │
│  │  Meshtastic  │  │  Processor   │  │  Iridium SBD       │  │
│  │  Transport   │──│  Bridge Rules│──│  Transport          │  │
│  │  (protobuf)  │  │  SOS Engine  │  │  (AT commands)      │  │
│  └─────────────┘  └──────────────┘  └────────────────────┘  │
│  ┌─────────────┐  ┌──────────────┐  ┌────────────────────┐  │
│  │  Pass        │  │  SQLite DB   │  │  Vue.js Dashboard  │  │
│  │  Predictor   │  │  DLQ + Queue │  │  (SSE real-time)   │  │
│  │  (SGP4/TLE)  │  │              │  │                    │  │
│  └─────────────┘  └──────────────┘  └────────────────────┘  │
└──────────────────────────┬───────────────────────────────────┘
                           │ 1.6 GHz L-band
                           ▼
┌──────────────────────────────────────────────────────────────┐
│                 Iridium Satellite Constellation               │
│              66 LEO satellites, 780 km altitude               │
└──────────────────────────────────────────────────────────────┘

Original bridge implementation

Bidirectional Message Bridge

Configurable bridge rules filter which messages cross to satellite — by node ID, channel, or message type. Prevents position beacons and telemetry from burning credits while ensuring important messages get through. Dead-letter queue with automatic retry handles failed transmissions.

SGP4 Satellite Pass Prediction

MeshSat Pass Predictor

Predicts Iridium satellite passes using CelesTrak TLE data and SGP4 orbital propagation. The dashboard overlays predicted pass windows with actual signal strength history, showing correlation between high-elevation passes and successful transmissions. Enables modem sleep/wake scheduling based on when satellites are actually overhead, instead of blind retry against a mountain.

Multi-Source Positioning

Three GPS sources with graceful degradation: primary GPS (Heltec V4 or USB dongle, ~2-5m accuracy) → Iridium geolocation (free with every SBD transmission, ~1-100km accuracy) → custom fallback. The Iridium geolocation is accurate enough for pass prediction, allowing GPS-free operation after the first satellite exchange.

Emergency SOS

Dedicated ARM/SEND controls with immediate Iridium transmission path. SOS bypasses all filtering and queuing — when the button is pressed, the message goes to satellite immediately.

Zero-Dependency Hardware Access

Hand-rolled protobuf codec and AT command engine for direct serial communication. USB auto-detection via sysfs VID:PID matching — plug in hardware and MeshSat finds it. No manual port configuration, no external libraries for hardware access.

Technical Implementation

Direct Serial Transport (~2,100 lines)

Five Go source files implementing full protocol handling:

  • proto.go — Hand-rolled protobuf primitives (varint, length-delimited, tag parsing)
  • serial.go — Shared serial layer with Meshtastic framing (0x94 0xC3 header) and AT command engine
  • meshtastic_proto.go — Full Meshtastic protocol: parsers for FromRadio, MeshPacket, NodeInfo, Position, DeviceMetrics; builders for text messages, admin commands, traceroute, waypoints
  • direct_mesh.go — DirectMeshTransport: auto-detection (7 VID:PIDs), wake sequence, config handshake, background reader with heartbeat, node DB, message ring buffer
  • direct_sat.go — DirectSatTransport: AT probe with GPS/Meshtastic exclusion, SBDIX with rate limiting, ring alert monitor, signal poller, binary SBD with checksum

Challenges Solved

Serial mutex starvation: SBDIX sessions hold the serial port for 11-62 seconds. Combined with aggressive polling, the mutex was permanently held — signal reads returned 0, outbound sends blocked. Redesigned with context-aware rate limiting and mid-sleep mutex release.

SBD piggybacking: Mobile-Terminated messages delivered during outbound SBDIX were silently lost across 4 separate code paths (HAL response fields, MeshSat parser, forward/DLQ/drain checks). Traced and fixed all 4.

Obstructed environments: Built satellite pass predictor correlating predicted passes with actual signal history. Enables intelligent sleep/wake scheduling instead of blind retry against mountain walls.

Hardware in the original bench tests

DeviceModelInterface
Meshtastic radioLilygo T-Echo (nRF52840 + SX1262)USB Serial
Satellite modemIridium 9600 SBD Transceiver (RockBLOCK 9603)USB Serial (FTDI)
HostRaspberry Pi 5Docker / CubeOS

Packaging the bridge

Docker one-liner:

docker run -d --privileged \
  -v /dev:/dev -v /sys:/sys \
  -p 8080:8080 \
  ghcr.io/cubeos-app/meshsat:latest

Also runs as a managed CubeOS application via HAL (Hardware Abstraction Layer), or standalone on any Linux machine with USB ports.

Technology Stack

LayerTechnology
BackendGo 1.24, chi router, SQLite
FrontendVue.js 3, Leaflet maps, SSE
ProtocolsMeshtastic protobuf, Iridium SBD AT commands
PredictionSGP4 orbital propagation, CelesTrak TLE
DeploymentDocker multi-arch, GHCR
IntegrationCubeOS HAL (optional)
LicenseGPLv3