M7XSJ
LoRa-APRS · self-hosted · multi-tenant◇ Beta

The LoRa-APRS network, in detail

A self-hosted analytics platform for LoRa-APRS iGates. You keep your hardware and your lora-aprs.live feed; I add live dashboards, RF analytics and outage alerting — one login covering all of your gates, isolated from everyone else's.

⚙️How it works

Your ESP32 LoRa-APRS iGate already emits syslog. Repoint that one setting at the network and everything downstream is automatic — there's no per-operator configuration on my side. All a gate needs is its normal internet connection to reach the network, and you'll be alerted if that link ever drops.

iGate syslog ─UDP→ m7xsj.co.uk:1516 Node-RED parser ├─ read gateway callsign, parse position / SNR / RSSI / telemetry ├─ auto-create a private store for that gate (first sight) └─ InfluxDB your Grafana dashboard └─ also mirrored on to lora-aprs.live (unchanged)

Self-provisioning & ownership-checked

A new gate that starts sending syslog is recognised by its callsign and immediately gets its own private data store. Before you get a login, though, you prove the gate is yours: you beacon a one-time code I issue at registration, and the network confirms it arrived through your gate. That keeps the spoofable nature of plain UDP from handing anyone else's data out.

Firmware: parsing is currently built around the syslog format of the CA2RXU LoRa-APRS iGate firmware by Ricardo Guzman (CA2RXU) — the one most people run. Different firmware or a different syslog format? I'd love to add support — email shaun@m7xsj.co.uk with a sample, or catch me at the weekly HADARS meetup.

📊What you get

A Grafana dashboard per gate, grouped under one login for your callsign. Edit it, rearrange it, even delete a panel — it's yours. (Delete the whole thing and a fresh copy self-heals within ~10 minutes.)

🗺️Coverage maps

Where you're being heard — direct contacts (green) shown apart from digipeater relays, with the full path drawn in two colours: the gateway→relay hop in orange and the relay→origin hop in purple. Plus reception lines, latest distance & RSSI per station and recency trails.

🎛️Direct-RF toggle

One RF Mode switch flips the whole dashboard between all traffic and direct RF only — instantly hiding anything received via a digipeater so you see just the stations you truly hear over the air, with honest direct-only DX and counts.

📶Signal & RF

Link quality, SNR-vs-distance, CRC rate and per-station averages — sorted weakest-first. RSSI/SNR and DX are always attributed to direct contacts only, never to a relay.

📡Activity

Packet rate, station activity, packet categories and your furthest-DX records, direct vs via-digi.

🔋Telemetry

Battery and device telemetry from heard stations, plus the raw recent-packets log.

🔒Isolation

You see only your own gates. Folders are locked per operator — no cross-tenant leakage.

Auto-expanding

Add another SSID later and its dashboard appears automatically — no re-registration needed.

🛰️Tracker dashboards

Got a mobile beacon on your callsign — a van, car or bike (e.g. -3, -9)? Trackers don't run syslog, so they can't join on their own — but the moment any iGate on the network hears one, it automatically gets its own station-centric dashboard: its track on the map with speed and direction-of-travel arrows, which gates heard it, best SNR per gate and reception over time — stitched together from every gate that hears it, not just your own. Click any beacon on the trail to fan reception lines out to every gate that caught it, with a per-gate signal table, the full relay path, and an ⛰️ terrain cross-section of the RF path between the tracker and each gate.

Tracker dashboards are kept in sync automatically. When a new iGate joins the network, every existing tracker dashboard starts including that gate's receptions within about 15 minutes — no action needed. Improvements made to the master tracker layout also flow out to everyone's board automatically.

If you want to customise your tracker dashboard and keep those changes, use Grafana's Save as Copy (Dashboard settings → Save as Copy) to create your own separate copy under a new name. The auto-sync only manages the original track-<call> board; a saved copy is yours and is never overwritten.
Link Quality panel showing RSSI and SNR over time for every station the gate hears.
Link Quality — RSSI & SNR over time for every station your gate hears.
Link Quality panel filtered to a single callsign for a clean RSSI and SNR trace.
…filtered to a single station for a clean RSSI & SNR trace.
Battery stats panel showing reported voltage over time for several heard stations.
Battery telemetry — reported voltage over time for solar / battery stations.
Data retention starts at 1 day for a brand-new gate and is bumped to 180 days once your access is provisioned.

🔔Alerting

Alerts are per-operator and opt-in — everything is off until you switch it on. You choose which alerts you want and set your own thresholds on a secure, token-gated preferences page that's linked in every email the network sends you. State-change only (no spam), self-resolving, and only ever sent to your verified address.

📴

Offline — radio-down vs uplink-down

When your feed goes silent past your threshold, the network checks whether another gate still hears you on RF. If not, it's a true radio/power/antenna outage. If yes, your radio is fine and your internet/uplink is the problem — and the email names the witness gate, how recently it heard you and at what signal.

📡

Antenna / feedline — mesh cross-corroboration

Your gate is still online and still decoding, but its antenna or feedline has degraded (loose connector, water ingress, a knocked antenna). A packet count alone can miss this — a gate can hear the same number of stations while every signal sinks to the noise floor — so the network compares each gate-to-gate RF link against its own baseline. When a majority of the links touching your gate degrade together (others hearing you weaker, or losing your direct path), the common cause is your antenna rather than one far station or the band; a single bad link instead points at that one path. The email lists each affected link with its before/after signal. Gates with no mesh neighbours fall back to a reception-volume check.

Recovery

A “back online” email when packets resume, if you opted into either offline alert.

🔋

Low battery

Your gate's own reported voltage under your floor — useful for solar / off-grid sites. No battery sensor = never fires.

⚙️

You're in control

Thresholds and on/off switches are yours, via the prefs link in your emails. If the whole network goes dark at once that's flagged as my infrastructure — you won't get a false "your gate is down" in that case.

The Alert & Digest preferences page — outage, battery and digest toggles with per-operator thresholds.
The token-gated preferences page — every alert and digest is opt-in, with your own thresholds, sent only to your verified address.

📰Digests

Opt-in email summaries of your gates, on the cadence you choose — off by default, switched on from the same preferences page as your alerts. Like everything else, they cover your gates only.

📅Daily

A once-a-day recap each evening (7pm UK).

🗓️Weekly

The week in review, every Monday (9am UK).

📆Monthly

A full-month report on the 1st (noon UK).

Each digest reports packets heard, unique stations, furthest DX (direct RF), furthest via a digipeater, strongest signal, best SNR, your top-5 busiest stations, newly-heard stations, and a comparison against the previous period — plus an activity sparkline (per-hour for daily, per-day for longer periods), your network rank by packets heard, and a button to your live dashboard. It also covers iGate availability — online-throughout vs. sustained outages with uptime % and the outage windows (threshold matches your outage-alert setting) — your beacon reach (how many other gates heard your gate, with furthest direct distance and best SNR), and a battery line (min/latest voltage) for gates that report it. If you also run a tracker or mobile under the same callsign, its per-tracker stats are included — receptions, gates that heard it, furthest direct contact and best SNR, with a link to its tracker view. A brand-new gate is skipped until it has enough history to cover the period (no near-empty reports).

Note: brief sub-10-minute reboots aren't flagged as outages — a gate beacons only every ~10 minutes, so short silences can't be told apart from quiet RF; the sparkline shows the dips honestly instead.

🚀Join the network

  1. Register. n8n.m7xsj.co.uk/form/aprs — enter CALLSIGN-SSID, name and email. You get a verification code (e.g. LORA123456).
  2. Repoint syslog. On your iGate, set syslog server to m7xsj.co.uk, port 1516, protocol UDP.
  3. Beacon the code. Put the code in your beacon comment and let it transmit. The network detects it through your gate (up to a ~90 min window — plenty of time to finish setup).
  4. Accept your invite. You're emailed a Grafana invite — set a password and your dashboard(s) are live. You can remove the code from your comment afterwards.
Make sure your gate's syslog is sent over UDP — a TCP target will look connected but silently send nothing.
Beta: this network is live but still young — feedback and bug reports are very welcome at shaun@m7xsj.co.uk or the weekly HADARS meetup.

➕ Register now   ← Back to home

Prefer to run your own?

The whole stack — syslog parsing in Node-RED, InfluxDB storage and the Grafana dashboard — is documented as a step-by-step build guide.

🛠️ Build your own LoRa-APRS dashboard