Crewed aircraft on 1090 MHz near your patrol routes. Inspection drones broadcasting ASTM F3411 RemoteID. Vessels on AIS near water crossings. Volunteer nets on APRS. Voice traffic on Marine VHF, NOAA weather radio, CB, GMRS-FRS, and MURS during a storm roll. VoltGrid wraps proven demodulators — readsb, dump978, rtl_ais, rx_fm, multimon-ng, rtl_433 — and folds every decoded track, packet, and alert into a single common operating picture. Receive-only by design.
Built for drone operations over energized infrastructure — pole-top inspections, corridor patrols, post-storm damage flights — where seeing crewed aircraft, FAA TIS-B re-broadcasts, and drone RemoteID on one screen is safety-critical. The app owns the demodulator lifecycle, fans decoded tracks to the map over SSE, and persists rolling history to DuckDB.
// one workstation → every RF source, one API GET /api/sdr/tracks/events → SSE: live ADS-B / RemoteID GET /api/aprs/stations/events → SSE: APRS positions GET /api/aprs/messages/events → SSE: bulletins + messages GET /api/audio/stream → chunked audio/mpeg (live MP3) GET /api/audio/alerts/events → SSE: decoded SAME/EAS alerts GET /api/spatial/sdr/collections → OGC API Features (QGIS/Pro) ● receiving bands 1090 · 978 · 144.39 · 156–162 MHz · rx-only
Register Software-Defined Radio receivers, track live air/maritime telemetry over the 3D globe, and monitor in-process SSE endpoints.
Each source is a saved receiver you start and stop from an in-map panel — status dots, message counts, and errors refresh live.
readsb / dump978 decode 1090 and 978 MHz; ASTM F3411 OpenDroneID rides the 1090 extended squitter, so one receiver covers airliners, GA, and the utility's own UAS deconfliction. Trails show the last 30 positions; stale tracks prune at 60 s.
Marine vessel tracking via rtl_ais with an NMEA VDM/VDO decoder — surface traffic near submarine crossings and waterfront substations joins aircraft and drones on the same 3D scene.
144.390 MHz (US) / 144.800 MHz (EU) at 1200 baud AFSK via rx_fm + multimon-ng, plus a global APRS-IS internet feed that never competes for the tuner. Decodes positions, weather stations, operator-placed objects, and messages with bulletin alerting — the amateur nets that activate alongside utilities in an emergency.
Marine VHF (Ch 16 distress), NOAA Weather Radio WX-1..7 with SAME/EAS decode, CB (Ch 9 emergency), GMRS-FRS, and MURS. One HackRF priority-scans the watchlist and streams live MP3 straight to the browser — comms awareness for the storm room without another radio on the desk.
Weather stations, TPMS, ERT, and alarm/motion sensors captured passively from the ISM bands and folded into the sensor picture.
Regional conditions, forecasts, and NWS alerts, alongside OGC SensorThings / SOS / GTFS / MovingFeatures feed subscriptions for non-RF live sources.
One SDR is one tuner: ADS-B, APRS RF, and audio scanning share a single HackRF, so run one RF module at a time per device (or add a second SDR). APRS-IS runs tuner-free. All modules are receive-only — no transmit capability exists in the product.
Each module persists rolling history to its own DuckDB file — sdr.duckdb, aprs.duckdb — registered with the embedded server, so the existing OGC API Features, vector-tile, and ESRI FeatureServer facades serve RF history to your GIS team with no extra code.
/api/spatial/sdr/collections or the /api/spatial/sdr/FeatureServer facade.…/collections/tracks_1090/tiles/{z}/{x}/{y}.mvt for fast rendering of dense track history.-- rolling RF history, served through standard facades SELECT * FROM sdr.tracks_1090_history -- append-only UNION SELECT * FROM sdr.tracks_978_history; -- UAT band GET /api/spatial/sdr/FeatureServer → ArcGIS Pro GET /api/spatial/aprs/collections → QGIS (OGC API) GET /api/spatial/sdr/collections/tracks_1090 /tiles/{z}/{x}/{y}.mvt → vector tiles ● registered dbId sdr, aprs · retention 24h / 168h
Plug in an SDR, add a receiver from the in-map panel, and watch aircraft, drones, vessels, and radio traffic populate the same 3D scene your grid data lives on.