Algunas de las opciones para hacer un seguimiento de las radiosondas meteorológicas son:
- Ordenador personal con un software SDR como SDRAngel y un dongle USB SDR
- Raspberry Pi Ordenador personal con radiosonde_auto_rx y un dongle USB SDR
- ESP32 433 MHZ Lora con rdzTTGOsonde (Que ya hemos analizado aquí)
radiosonde_auto_rx
Para ello vamos a necesitar
- Una antena onmidireccional o direccional en la dirección en la que nos lleguen las radiosondas a nuestra localización para la banda de 403 MHz, valdría una de la banda de UHF o 430 MHZ de radioaficionados.
- Un filtro pasa banda de 403 MHz(no imprescindible, conveniente en entornos urbanos o con señales de RF potentes en los alrededores)
- Una Raspberry Pi, en nuestro caso reusaremos una instlación de Pi-Star que no usabamos, pero es lo mismo si se usa una Raspberry Pi limpia
- Un dongle o pincho SDR USB, que nos vale un clon v3 como es el "verde" pues va a atrabajar en 403 MHz
1. Preparar la Rasberry Pi
- Conectarse: usurio y contraseña
- Permitir la escritura: rpi-rw
- Actualizar sistema operativo:sudo apt-get update
2. Instalar las dependencias de RadioSonde
sudo apt-get install python3-pip python3-dev librtlsdr-dev sox libfann-dev git
3. Clonar e instalar radiosonde_auto_rx
- git clone https://github.com/projecthorus/radiosonde_auto_rx.git
- cd radiosonde_auto_rx/auto_rx/
- pip3 install -r requirements.txt
- 3b. si da problemas la instalación hacer
- pip3 install --upgrade setuptools wheel
- pip3 install markupsafe==2.0.1 werkzeug==2.0.3
- pip3 install flask==2.0.3
- pip3 install -r requirements.txt
4. Instalar las librerias matemáticas que necesita el programa
- sudo apt-get install libopenblas-dev libatlas-base-dev
- cd ~/radiosonde_auto_rx/auto_rx/
- ./build.sh
5. Configurar
Si se usa la Raspberry Pi para otras aplicaciones que hacen uso del USB SDR y con el fin de que no entren en conflicto (No pueden funcionar simultaneamente dos o más aplicaciones que usen el USB-SDR, si bien podrian tenerse varios USB SDR uno para cada aplicación)
Buscar el nombre correcto del fichero de configuración que terminara en .example o .default (en nuestro caso station.cfg.example) y editar con nano:
ls -F
cp nombre_corecto.example station.cfg
nano ~/radiosonde_auto_rx/auto_rx/station.cfg
- Asegúrar que
- Ajustar el escaneo a las que vaya a seguir (Peninsula Ibérica y Canarias):
- min_freq = 401.0
- max_freq = 405.5
- Ajustar las coordenadas de la estacion
- [location]
- station_lat = 0.0
- station_lon = 0.0
- station_alt = 0.0
- Ajustar el email de contacto
- sondehub_contact_email = xxx@xxx.xx
- Ajustar si se quiere subir a APRS
- [aprs]
- # Enable APRS upload (you will also need to change some options below!)
- aprs_enabled = False
- # APRS-IS Login Information
- # The aprs_user field can have an SSID on the end if desired, i.e. N0CALL-4
- aprs_user = N0CALL
- # APRS-IS Passcode. You can generate one for your callsign here: https://apps.m>
- aprs_pass = 00000
- Cualquier otra variable que vea de interes cambiar
- Listado de parametros
- cat ~/radiosonde_auto_rx/auto_rx/station.cfg | grep -v "^#" | grep -v "^$"
6. Lanzamiento manual
Si se va usar otro servicio/programa hay que asegurarse de que esté parado
sudo systemctl stop radiosonde_auto_rx
Para usar radiosonde_auto_rx (El modo automático):
Debes cerrar cualquier proceso que use SDR (p.e.) de rtl_fm o direwolf primero:
sudo killall rtl_fm direwolf
cd /home/pi-star/radiosonde_auto_rx/auto_rx/
python3 auto_rx.py -c station.cfg
o
python3 ~/radiosonde_auto_rx/auto_rx/auto_rx.py -c ~/radiosonde_auto_rx/auto_rx/station.cfg
7 - Seguimiento
LOG
pi-star@pi-star(rw):auto_rx$ python3 auto_rx.py -c station.cfg
2026-03-03 10:10:21,213 INFO:Reading configuration file...
2026-03-03 10:10:21,261 WARNING:Config - Web Password not set, disabling web con
trol
2026-03-03 10:10:25,246 INFO:Config - Tested RTLSDR #0 OK
2026-03-03 10:10:25,255 INFO:Started Flask server on http://0.0.0.0:5000
2026-03-03 10:10:25,261 INFO:Telemetry Logger - Started Telemetry Logger Thread.
2026-03-03 10:10:25,266 INFO:OziMux - Started OziMux / Payload Summary Exporter
2026-03-03 10:10:25,271 INFO:Sondehub Uploader - Started Sondehub Uploader Threa
d.
2026-03-03 10:10:26,226 INFO:Version - Local Version: 1.8.2 - Up to date!
2026-03-03 10:10:26,252 INFO:Sondehub Uploader - Uploaded station information to
Sondehub.
2026-03-03 10:10:28,228 INFO:Task Manager - SDR #0 has been allocated to Scanner
.
2026-03-03 10:10:32,088 INFO:Scanner (RTLSDR 0) - Starting Scanner Thread
2026-03-03 10:10:32,092 INFO:Scanner (RTLSDR 0) - Running frequency scan.
Si queremos conectarnos al log y ver su contenido
cd ~/radiosonde_auto_rx/auto_rx/log/
ls -lh
- -rw-r--r-- 1 pi-star pi-star 831 Mar 4 14:03 20260304-125924_M10-309-2-13942_M10_403401_sonde.log
- -rw-r--r-- 1 pi-star pi-star 9.8K Mar 4 23:22 20260304-205618_system.log
- -rw-r--r-- 1 pi-star pi-star 0 Mar 3 08:59 log_files_go_here.txt
- -rw-r--r-- 1 pi-star pi-star 49K Mar 4 13:46 log_power_0.csv
Los ficheros
- 20260304-205618_system.log contiene información sobre el funcionamiento del programa
- 20260304-125924_M10-309-2-13942_M10_403401_sonde.log contiene información sobre la sonda de la cual se han recibido tramas, indicando el contenido de las mismas: ID, Timestamp, latitud y longitud, Altitud, temperatura, humedad,el voltaje de la batería de la sonda, etc.
- log_power_0.csv es un archivo de valores separados por comas (CSV) que guarda los niveles de señal que recibe tu SDR #0. Sirve para analizar el ruido de fondo de tu zona.
Si encuentra una sonda generará un fichero del tipo auto_rx_AAAA-MM-DD.log que podremos localizar con
find ~/radiosonde_auto_rx -name "*.log"
Para analizar un fichero de Log como por ejemplo 20260304-125924_M10-309-2-13942_M10_403401_sonde.log que contiene los datos de ID, Timestamp, latitud y longitud, Altitud, temperatura, humedad,el voltaje de la batería de la sonda, etc.
tail -n 50 log_power_0.csv
cat /home/pi-star/radiosonde_auto_rx/auto_rx/log/20260304-125924_M10-309-2-13942_M10_403401_sonde.log
- timestamp,serial,frame,lat,lon,alt,vel_v,vel_h,heading,temp,humidity,pressure,type,freq_mhz,snr,f_error_hz,sats,batt_v,burst_timer,aux_data
- 2026-03-04T12:59:24.000Z,M10-309-2-13942,1456664382,38.41766,-1.45537,31633.8,7.1,12.4,198.4,-47.4,0.4,-1.0,0x9F,403.401,5.4,751,11,4.9,,
- 2026-03-04T13:00:44.000Z,M10-309-2-13942,1456664462,38.40920,-1.46029,32077.6,5.3,13.4,179.9,-45.7,0.4,-1.0,0x9F,403.401,5.1,751,11,4.9,,
- 2026-03-04T13:02:13.000Z,M10-309-2-13942,1456664551,38.40439,-1.46024,32586.0,4.5,12.8,190.5,-45.4,0.7,-1.0,0x9F,403.401,5.4,375,10,4.9,,
- 2026-03-04T13:02:34.000Z,M10-309-2-13942,1456664572,38.40308,-1.46114,32694.0,4.6,12.7,186.4,-44.9,0.7,-1.0,0x9F,403.401,6.1,751,10,4.9,,
- 2026-03-04T13:03:22.000Z,M10-309-2-13942,1456664620,38.40244,-1.46114,32616.0,-39.6,1.9,310.0,-46.4,0.9,-1.0,0x9F,403.401,7.0,751,10,4.9,,
8. comprobaciones
¿Está ejecutándose el programa?
ps -ef | grep auto_rx.py
- pi-star 26844 25276 0 18:36 pts/0 00:00:00 grep --color=auto auto_rx.py
¿Está la web lanzada y accesible (crurl es un browser de linea)?
curl -I http://localhost:5000
- curl: (7) Failed to connect to localhost port 5000: Connection refused (Aqui vemos que el firewall bloquea la conexión)
 |
El error visto en el navegador cuando se intenta la conexión a http://192.168.1.97:5000/ (La IP se obtiene con un programa como IPScan) |
9. Conectarnos a la web
Previamente hay que modificar el modo por defecto
sudo nano /etc/fstab
Cambia ro por rw en las líneas de la partición principal (la que apunta a /). Debería quedar algo parecido a esto:
/dev/mmcblk0p2 / ext4 defaults,noatime,rw 0 1
sudo nano /etc/rc.local
Hay que añadir una línea en el firewall justo antes de la línea que dice exit 0 para permitir la conexión
iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
De forma manual
sudo iptables -I INPUT 1 -p tcp --dport 5000 -j ACCEPT
Sin embargo mas eficaz hacer
- sudo sed -i '/iptables -A INPUT -p tcp --dport 80/a sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT' /usr/local/bin/pistar-firewall
- sudo pistar-firewall
Comprobación de que el puerto está abierto para poder acceder al servior web por el puerto 5000
sudo iptables -L -n | grep 5000
Comprobación local de que la web está activa y accesible
pi-star@pi-star(rw):~$ curl -I http://localhost:5000
- HTTP/1.0 200 OK
- Content-Type: text/html; charset=utf-8
- Content-Length: 85252
- Server: Werkzeug/2.0.3 Python/3.9.2
- Date: Thu, 05 Mar 2026 16:01:32 GMT
Combrobación desde un navegador en la misma red http://192.168.1.xx:5000

Si va en local y no en remoto puede ser el firewall, hacer
sudo iptables -I INPUT 1 -p tcp --dport 5000 -j ACCEPT
Comprobacion
sudo netstat -plnt | grep 5000
- tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 24960/python3
10 - Comprobar que se suben los datos a Internet por ejemplo con https://sondehub.org/
11a - Arranque automático (Este usando rc.local da error y no arranca)
Scrip de arranque
rpi-rw
nano /home/pi-star/start_autorx.sh
- #!/bin/bash
- sleep 10 # Espera a que el sistema cargue bien
- cd /home/pi-star/radiosonde_auto_rx/auto_rx/
- python3 auto_rx.py -c station.cfg > /home/pi-star/radiosonde_auto_rx/auto_rx/log/boot_debug.log 2>&1 &
chmod +x /home/pi-star/start_autorx.sh
Inclusión del scrip en el boot
sudo nano /etc/rc.local
- # Arrancar el rastreador de sondas de EA5JTT
- /home/pi-star/start_autorx.sh
- # Abrir el puerto del mapa
- iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
11b - arranque automatico como servicio
rpi-rw
sudo nano /etc/systemd/system/autorx.service
- [Unit]
- Description=Rastreador de Sondas EA5JTT
- After=network.target
- [Service]
- Type=simple
- User=pi-star
- WorkingDirectory=/home/pi-star/radiosonde_auto_rx/auto_rx/
- # Abrir el puerto 5000 antes de lanzar el programa
- ExecStartPre=/usr/bin/sudo /sbin/iptables -I INPUT 1 -p tcp --dport 5000 -j ACCEPT
- ExecStart=/usr/bin/python3 /home/pi-star/radiosonde_auto_rx/auto_rx/auto_rx.py -c /home/pi-star/radiosonde_auto_rx/auto_rx/station.cfg
- # (Opcional) Cerrar el puerto al apagar el servicio para mantener la seguridad
- ExecStopPost=/usr/bin/sudo /sbin/iptables -D INPUT -p tcp --dport 5000 -j ACCEPT
- Restart=always
- RestartSec=10
- [Install]
- WantedBy=multi-user.target
Registrar, poner disponible y arrancar
sudo systemctl daemon-reload
sudo systemctl enable autorx.service
sudo systemctl start autorx.service
Comprobación
sudo systemctl status autorx.service
● autorx.service - Rastreador de Sondas EA5JTT
Loaded: loaded (/etc/systemd/system/autorx.service; enabled; vendor preset>
Active: active (running) since Thu 2026-03-05 10:05:09 CET; 8min ago
Main PID: 3854 (python3)
Tasks: 24 (limit: 1716)
CPU: 12min 10.283s
CGroup: /system.slice/autorx.service
├─3854 /usr/bin/python3 /home/pi-star/radiosonde_auto_rx/auto_rx/a>
├─5506 /bin/sh -c timeout -k 30 10 rtl_fm -M raw -F9 -p 1 -d 0 -s>
├─5507 timeout -k 30 10 rtl_fm -M raw -F9 -p 1 -d 0 -s 48000 -f 40>
├─5508 ./dft_detect -t 5 --iq --bw 15 --dc - 48000 16
└─5510 rtl_fm -M raw -F9 -p 1 -d 0 -s 48000 -f 403000000 -
Mar 05 10:05:26 pi-star python3[3854]: 2026-03-05 10:05:26,414 INFO:Task Manage>
parada temporal
sudo systemctl stop autorx.service
rearranque
sudo systemctl restart autorx.service
que no arranque
sudo systemctl disable autorx.service
mensajes
journalctl -u autorx.service -f
- - Journal begins at Thu 2026-03-05 09:30:11 CET. -- Mar 05 10:06:47 pi-star python3[3854]: 2026-03-05 10:06:47,818 INFO:Scanner (RTL SDR 0) - Scanning only frequencies (MHz): [401. 402.5 403. 403.4 404. 405.5]
12 - Rearranque manual
sudo reboot
Mis dos últimos consejos:
- Tenga un adaptador ethernet y cable pues es la forma segura de tener el control con la Raspberry Pi en caso de error
- Tenga siempre abierta su IA preferida, en mi caso https://gemini.google.com/ que será su mejor aliada en este tipo de batallas
Conclusiones
radiosonde_auto_rx con SDR es mas sensible que rdzTTGOsonde con ESP32 LoRa 433, y con mejores herramientas, si bien tambien supone una mayor inversión en tiempo y dinero
Advertencia importante
Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.
© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.