Overview
I've been interested in weather balloon radiosondes for a while — they're launched twice
a day by the Met Office and drift over the UK transmitting GPS position and atmospheric data
on 403 MHz. With an RTL-SDR dongle and the right software, you can receive them and
contribute tracking data to SondeHub.
This writeup covers the full build: antenna, Docker setup, station config, and the debugging process to get a first confirmed decode.
Hardware
The dongle
I'm using the RTL-SDR Blog V4 dongle, which has a Rafael Micro R828D tuner and covers
roughly 500 kHz to 1.75 GHz. Crucially, it has a bias-T for powering active antennas and
better thermal stability than the older V3. The driver situation for the V4 is slightly
different — it needs rtl-sdr-blog driver rather than the stock librtlsdr.
rtl-sdr-blog from the correct repo, or the device will appear as an R820T2 and
behave erratically on higher frequencies.
Antenna
I built a quarter-wave ground plane for 403 MHz from a BNC chassis connector, four radials, and a vertical element cut to ~185mm. It's mounted on a short mast on the roof, coax running into the shack window.
version: "3"
services:
auto_rx:
image: ghcr.io/projecthorus/radiosonde_auto_rx:latest
container_name: auto_rx
restart: unless-stopped
devices:
- /dev/bus/usb:/dev/bus/usb
volumes:
- ./station.cfg:/app/station.cfg
- ./log:/app/log
ports:
- "5000:5000"
privileged: true
Station Configuration
The station.cfg file controls everything: your callsign, location,
upload credentials, and scan frequency ranges. Key settings to get right:
- Set
station_idto your SondeHub callsign — this is how your station appears on the map. rtl_device_idxshould match the serial number of your dongle (set it withrtl_eeprom -s MYSERIALNUMBER).- Set
sondehub_uploadtoTrueto enable telemetry upload. - Tune
min_freq/max_freqto the active window in your region — in the UK that's mainly 400–406 MHz.
# Station identity
station_id = KendSond
uploader_callsign = KendSond
uploader_position = [54.322, -2.744, 85]
# SDR device
rtl_device_idx = "KENDSDR"
rtlsdr_ppm = 0
rtlsdr_gain = -1 # -1 = auto gain
# Scan range
min_freq = 400.0
max_freq = 406.0
# Upload
sondehub_upload = True
First Decode
After getting the Docker container up, the first scan ran and picked up an RS41 about 40 km out at 24,000m altitude. The position showed up on SondeHub within a minute.
Since then the station has logged several dozen sondes from Watnall, Camborne, and occasionally from further afield when upper winds are favourable.