One dongle to listen to the sky
I picked up the RTL-SDR Blog V4 at Pajeníčko: an RTL2832U with the R828D tuner, tuning from 500 kHz to 1.7 GHz. The V4 finally does HF properly out of the box (built-in upconverter path with improved input filtering), has a 1 PPM TCXO, an SMA connector and an aluminium case that doubles as a heatsink. For about 1500 CZK it is an absurd amount of radio: broadcast FM, airband, ADS-B, weather satellites, HAM bands and shortwave, all from one USB stick.
OpenWebRX+ in the service catalog
The dongle lives on a cluster node, so the receiver should too. I added OpenWebRX+ to the service catalog as an iot component: a multi-user, web-based SDR receiver that streams the live spectrum and waterfall straight to the browser, with decoders for AIS, SSTV, FAX, FLEX and POCSAG, plus a band scanner, recorder and a map.
The Kubernetes realities are the interesting part: the pod runs privileged with the host's /dev/bus/usb mapped in, pinned to the node the dongle is plugged into, with two PVCs for configuration and persistent state. The kapitan component wraps all of that, so a receiver is one catalog entry plus one target definition, the same pattern as any other service in the homelab.
space-telemetry: what is overhead right now
A waterfall is nice, but the real question a ground station asks is when is it worth listening? That is what space-telemetry answers: a Prometheus / OpenTelemetry exporter for the sky above your station and the space weather around Earth, organised as four collectors:
- Solar-system bodies: Sun, Moon and planets from JPL ephemeris: altitude/azimuth, distance, rise and set times, Moon phase.
- Bright stars: alt/az and rise/set from a built-in catalog, no network needed at all.
- Satellites: CelesTrak TLEs and SatNOGS transmitter data through SGP4: position, range, Doppler shift and upcoming passes for a watchlist.
- Space weather: NOAA SWPC: Kp index, solar wind, IMF Bz, F10.7 flux and GOES X-ray class.
It is offline-first: every scrape is served from local state while background updaters refresh it, keeping the last-good copy when a source fails. Multiple observers are first-class: every series carries an observer label, so the Prague and cottage stations share one exporter.
$ curl -s localhost:9110/metrics | grep -E 'satellite_|space_weather_kp'
satellite_altitude_degrees{name="ISS (ZARYA)",observer="prague"} 42.1
satellite_doppler_shift_hz{name="NOAA 19",observer="prague",freq="137.62e6"} -1834.7
space_weather_kp_index 4
Closing the loop with observ-viz
space-telemetry ships its own observ-lib pack, a Grafana schema v2 dashboard plus alert and recording rules rendered with observ-viz. Alerts like GeomagneticStorm, SolarFlareMClass or SpaceTelemetryTLEStale land in the same Alertmanager as everything else, and the pass predictions sit on a board next to the receiver's health. Monitoring the sky with the same stack that monitors the cluster feels exactly right.
Next up: proper antennas, NOAA APT and Meteor LRPT image decoding, and catching the next ISS SSTV event. The waterfall is waiting.