SDR. Usar rtl_433 para obtener los datos de las estaciones meteorológicas de tus vecinos.

Podemos usar nuestro receptor SDR para captar señales usadas en dispositivos domóticos que trabajan en la frecuencia de 433Mhz y 868Mhz entre ellos algunas estaciones meteorológicas que muchas personas instalan en su casa. En lugar de comprar nuestra propia estación vamos a usar nuestro receptor SDR y el software rtl_433 para capturar datos que luego algún sistema nuestro pueda consumir y mostrar.

Empecemos con lo básico usaremos el comando rtl_433 para obtener datos de los dispositivos de IoT cercanos:

rtl_433 

Por defecto escucha en la frecuencia de 433 Mhz, si queremos usar otra frecuencia habitual como 868 Mhz

rtl_433 -f 868M

En los datos que se obtendrán hay todo tipo de dispositivos. El primer paso es filtrar los que nos interesan. Podemos buscar aquellos que tengan campos propios de las estaciones meteorológicas como temperatura y humedad y usar el campo «model» para buscar si es una estación meteorológica o algo que nos pueda servir.

Otro truco es verificar que los datos tienen que cuadrar. Si hace frío y la temperatura es de más de 20 grados es posible que sea un sensor interno. Hay dispositivos que devuelven valores sin sentido seguramente porque no tiene ese sensor. Por ejemplo entre los datos que leo hay un medidor de humedad del suelo que devuelve una temperatura de -88°C.


Cada dispositivo envía los valores de temperatura en grados Celsius o Farenheit. Por suerte podemos convertirlo a Celsius usando el parámetro «-C si» que convierte los valores al sistema internacional. 

rtl_433 -C si

Por ejemplo yo puedo aprovecharme del siguientes dispositivos:

time      : ############
brand     : OS
model     : Oregon-THGR122N                        
House Code: 155
Channel   : 1            
Battery   : 0             
Temperature: 3.90 C       
Humidity  : 70 %

time      : ############
model     : AlectoV1-Rain 
House Code: 139
Channel   : 0            
Battery   : 1             
Total Rain: 286.75 mm     
Integrity : CHECKSUM

Ahora que ya sabes que dispositvos podemos fiarnos y como identificarlos por el campo model tenemos el problema de leer los datos, por suerte rtl_433 permite formatear la salida en varios formatos como: kv, json, csv, mqtt, influx, syslog. Para ello bastacon usar el parámetro -F seguido del formato que queremos y si deseamos guardarlo en un fichero hay que indicarlo con -F formato:nombre_fichero

 rtl_433 -C si -F json:output.json

Cada vez que se lanza sobrescribe el fichero de datos con los nuevos datos.

Hay un último parámetro que puede ser útil para este caso en «-T segundos» que indica cuanto tiempo estará capturando datos rtl_433 antes de cerrarse. Por ejemplo:

 rtl_433 -C si -F json:output.json -T 30

Estará durante 30 segundo capturado datos en formato json y almacenándolos en el fichero «output.json»

Podríamos usar cron para planificar cada cuanto tiempo se lanza ese comando y se actualizan los datos del archivo.

Desventajas:

  • Depende de lo que tengan tus vecinos que puede ser la mejor estación del mercado como la peor del mundo.
  • Cuidado con confundir fuentes de datos (sensores internos y externos)
  • Aunque sea legal hay gente no le gusta que «escuches» sus sensores.

Ventajas:

  • Tienes múltiples fuentes de datos por lo que puede cruzar sus datos
  • Puedes aprovechar datos que no vienen de estaciones meteorológicas, por ejemplo anemómetros colocados en toldos para pleglarlos cuando sopla el viento.
  • Si alguno de los sensores «cae» puedes usar los datos de otros.

Puedes ver un vídeo practico sobre este mismo tema en mi canal de Youtube:

Haz click para ver el vídeo en mi canal de Youtube

Primeros pasos SDR. ¿Qué puedo hacer?

Acabas de comprar tu primer equipo de SDR que posiblemente sea un decodificador de TDT (DVB-T) con un chip RTL2832 o similar conectado por USB. ¿Ahora que?

Vamos a revisar rápidamente que herramientas hay que aprender a usar con tu equipo SDR.

Herramientas básicas

Lo primero es instalar las herramientas básicas. Para ello instalamos el paquete rtl-sdr.

Por ejemplo en mi distribución basada en Ubuntu:

 sudo apt-get install rtl-sdr

Con este paquete se instalan gran parte de las herramientas que vamos a usar en este texto.

Comprobar que todo funciona

Lo primero es comprobar si esta correctamente conectado y las capacidades de tu dispositivo. Para ello podemos usar:

rtl_test

La salida de la aplicación te muestra los datos de los sintonizadores encontrados.

Explorar el espectro de radio

Para ello puedes usar la aplicación gqrx que te permite explorar todo el espectro de radio.

Lo primero que puedes hacer es buscar una lista de emisoras de radio, sintonizar su frecuencia y probar a escucharlas. Puedes ver cómo afecta cambiar el ancho de banda o el modo de decodificación. Luego con cierta práctica puedes ir recorriendo el espectro a ver qué «escuchas». Por ejemplo puedes buscar en que frecuencia trabajan algunos equipos inalámbricos y analógicos para ver si alguien cerca usa alguno.

Cuando tengas más soltura y conocimiento del tema gqrx puede quedarse corto para ti y puede usar algun software con más opciones como SDR++

Otra herramienta imprescindible que hay que saber usar es rtl_sdr que te permite capturar la señal y guardarla en un fichero. Muchas herramientas trabajan con estas capturas.

rtl_sdr -f frecuencia -g ganancia -s samplerate -n numero_de_muestras archivo

También hay que saber usar rt_power que captura el espectro de la señal.

Vamos a «cazar» aviones. ADS-B

Otra cosa que podemos hacer es «espiar» que aviones pasan por encima nuestro. Para ellos podemos escuchar la señales del sistema ADS-B que los aviones emiten. Para leer estos datos puedes usar el comando:

rtl_adsb

Así lo único que consigues es montón de caracteres alfanuméricos con el parámetro -V la información se muestra de una forma más amigable

rtl_adsb -V

Hay que decir que no solo los aviones emiten este tipo de señales,

El resultado es algo más entendible aunque es difícil saber que significa. Aquí puedes tener una pista de que significa cada cosa. Haciendo un pequeño resumen.

El campo Type Code indica el tipo de mensaje:

Type CodeTipo de mensjae
1-4Identificación de la aeronave
5-8Posición
9-18Altitud (altimetro)
19Velocidad
20-22Altitud (GNSS)
23-27Reservado
28Estado de la aeronave
29Información de estado y estado de destino
31Estado operacional

El campo ICAO Address puede ayudarnos a identificar el avión y por tanto el vuelo. Para ello s epeuden suar webs como flightradar24.

Si lo que quiere es tener la información más clara puedes usar dump1090 (o dump109-mutability en el caso de mi distribución de Linux). Basta con lanzar lo con la opción –interactive y procesara esos datos por ti y te los mostrará de un forma más sencilla de entender.

dump1090 --interactive
dump1090-mutability --interactive

Es posible que te ocurra que rtl_adsb muestre un montón de resultados pero dump1090 no muestre ningún avión, se puede deber a estaciones emisoras en tierra. A menos que vivas cerca de un aeropuerto de una gran ciudad hay que tener paciencia para captar los datos de un avión.

Internet of Thing

Pasemos a capturar y decodificar mensajes de IoT. Para ellos puedes probar con el programa rtl_433.

rtl_433

Los datos son devueltos de una manera muy intuitiva donde cada paquete es decodificado y mostrado en pantalla.

Por defecto escucha la frecuencia 433 MHz pero usando el parámetro -f puedes probar con diferentes frecuencias a ver qué detectas, para probar puedes empezar con 315 MHz, 345 MHz, 868 MHz o 915 MHz. Por ejemplo:

rtl_433 -f 868M

Si deseas volcar los datos a un fichero con el parámetro -F puedes configurar que formato usar de la lista: kv|, json, csv, mqtt, |influx, syslog, |null.