Trasteando con rtl-sdr y el Efergy Hub

Ha llovido ya mucho desde que en esta entrada os mostraba como era el monitor de consumo energético Efergy E2 y hoy retomamos ese tema. Además del monitor de consumo también tengo/tenía el complemento que te permitía subir a la nube de Efergy todos tus consumos para luego poder tener unas gráficas bonitas en un panel de control en la web. Pues bien, todo funcionó muy bien hasta hace unos meses, ya que en octubre’15 dejaron de subirse las lecturas. El módulo encargado de ello, el Efergy Hub, dejó de funcionar. Estuve trasteándolo pero no conseguí hacerlo revivir.

Efergy Hub

Efergy Hub, vista frontal

 

Efergy Hub

Efergy Hub, vista trasera

En la parte frontal vemos los leds de alimentación (rojo), recepción de lectura (naranja) y tráfico de red Ethernet (verde). Por la parte de atrás tenemos el conector de alimentación (5v 300ma) y el conector Ethernet de 10Mb.

Seguimos. Le damos la vuelta al aparato y vemos que tiene cuatro patitas de goma, bajo las que nos imaginamos que están los tornillos que cierran la carcasa:

Efergy Hub, parte inferior

Efergy Hub, parte inferior

 

Vista interna 1

Vista interna 1

Me imagino que esas manchas en las conexiones tendrán algo que ver con el mal funcionamiento del módulo. Pero continuemos, que viene lo mejor. Retiramos esos cuatro tornillos más, soltamos la antena de esa especie de guía por la que va, empujándola ligeramente (no esta pegada ni nada), y vemos el corazón del aparato:

Efergy Hub al desnudo

Efergy Hub al desnudo

 

Más detenidamente, vemos que el procesador central es un PIC18F66j65-I/PT de Microchip, del que podéis descargar el datasheet desde aquí. Junto a él encontramos una memoria (SPI Bus serial EEPROM), también de Microchip, la 25A2E48I, de 256bytes que parece que se usa para guardar la dirección MAC única del dispositivo (12 bytes). Su datasheet lo podéis descargar de aquí. En la parte de la entrada de alimentación vemos un regulador lineal MCP 1703 (también de Microchip, ver hoja de datos aquí) que se usa para adaptar la tensión de 5V a 3.3v que es a la que funciona todo el sistema.

El módulo encargado de la recepción es un RFM01 de HopeRF (datasheet aquí), en su versión de 433Mhz, ya que el emisor que se  coloca en la caja de diferenciales funciona en la banda de 433.55Mhz.

Como curiosidad tenemos ese conector sin soldar de 6 pines a la derecha de la última imagen, en el que con un multímetro se puede ver fácilmente que el primer pin, marcado con un cuadrado, es el de GND, y el tercero es el de 3.3v. Tambien  es fácil ver con el multímetro de donde a donde van el resto de pines.

Una vez llegado a este punto, conecto un alimentador y el cable de red, y para mi sorpresa, el muy ******** ¡FUNCIONA!…

Efergy hub funcionando

Efergy hub funcionando

¡Vaya cara de tonto que se me ha quedado!… Me he ahorrado 65€ que es lo que vale uno nuevo… Pero bueno, eso no me hace desviarme del objetivo de esta entrada, que es lo más divertido de todo esto: el rtl-sdr.

RTL-SDR, ¿qué es? y ¿qué podemos hacer con él?

Pues en principio se vende como un decodificador de TDT por USB para el ordenador, pero le pasa como a las antiguas tarjetas de televisión BT8x8, ¿os acordáis? que valían para decodificar el canal plus en España… Este decodificador que se puede comprar por 6’5€ en ebay, puede escuchar en cualquier frecuencia de radio del rango 52 a 2200Mhz, que nosotros le especifiquemos por software.

Decodificador TDT USB

Decodificador TDT USB

Un mundo de luz y ondas de colores tuvo que ver alguna mente lúcida para crear el software que lo hiciese, porque ahora podemos capturar cualquier señal, como por ejemplo la que nuestro emisor Efergy envía en la banda de 433,55Mhz y, mediante ingeniería inversa en el peor de los casos, decodificarla y usarla para lo que queramos: un datalogger por ejemplo. Existen varias versiones de estos dongles usb, que estan soportados para recibir señales en Linux. El que yo tengo es la version E4000, que soporta el rango que os he dicho antes. En la web del proyecto OsmoSDR tenéis más información.

En cristiano, ¿qué estoy diciendo? Pues que con una inversión de 6.5€ podemos tener un Efergy Hub, y sin necesidad de tener que estar enviando a ninguna web ningún dato de nuestro consumo eléctrico. Vamos a ello.

Lo primero es conectar el dispositivo a nuestro equipo, en mi caso, una odroid C1 y comprobar que es reconocido correctamente:

Perfecto. vemos que nuestro modulo RTL2838 DVB-T se reconoce correctamente. Leyendo la documentación vemos, que existe una incompatibilidad entre el software que vamos a usar y el modulo que carga el kernel para controlar habitualmente estos decodificadores, por tanto tenemos que evitar que se cargue el modulo dvb_usb_rtl28xxu al pincharlo. Para ello solo tenemos que añadir en el fichero /etc/modprobe.d/blacklist.conf la linea:

Reiniciamos el equipo y ya debería bloquear la carga de ese módulo y sus dependencias, que hacen que luego el software de captura y decodificación no funcionen correctamente.

Compilación e instalación del software

El software que vamos a usar es el de OsmoSDR, y un programa de Nathaniel Elijah que decodifica las señales de los dispositivos Efergy.

Descargamos el software OsmoSDR:

 

Lo configuramos, y compilamos:

Lo instalamos:

Como el software no es un paquete que venga de los repositorios del sistema operativo, es recomendable que no se instale en /usr/bin y /usr/lib, para que no sobrescriba nada. Esto tiene dos problemas, que es posible, dependiendo de la configuración del sistema, que no se encuentren las librerías y/o los ejecutables. Para solventarlo, en mi caso tengo que añadir a la variable del sistema PATH la ruta /usr/local/bin, en el fichero /etc/environment, y para que encuentre las librerías creo un fichero /etc/ld.so.conf.d/rtl.conf con el siguiente contenido:

/usr/local/lib/

y ejecutamos el programa ldconfig para que relea las configuraciones de las rutas de librerías:

 

Ya tenemos instalada una parte, la de captura de señales, ahora vamos con el software decodificador de la señal:

 

Lo que tenemos en este punto es un fallo en la documentación del software, la orden correcta para compilar es la siguiente:

Ahora ya lo tenemos todo listo para capturar y decodificar la señal. Para ello vamos a usar el programa rtl_fm para sintonizar el canal y capturar la señal, para luego enviarsela a EfergyRPI y que la decodifique:

Dependiendo del modelo de decodificador que useis puede darse el caso, como me ha pasado a mi, que en lugar de 433.55 tenga que poner 433.50 (-f 433500000 en el comando), algo mas o algo menos de la frecuencia que esteis sintonizando. Se debe a la precisión o calibración con la que venga de fábrica el aparato.

Una vez tenemos la información de consumo capturada podemos hacer lo que queramos con ella: enviarla a un servidor MQTT, al que este conectado un arduino con una pantalla LCD y mostrar la información gráficamente (sustituir el receptor LCD de Efergy por uno nuestro a color y con gráficas…), enviar la información a una base de datos MySQL para tener los históricos como hace el Efergy Hub, enviarlos a una base de datos RRD y usar Cacti para hacer los gráficos, enviarnos correos si se supera cierto consumo, o enviar alertas por Telegram… Ya depende de la imaginación de cada uno…

¿y qué pasa con otros dispositivos que usen la banda de 433Mhz?

Pues lo que pasa es que estamos de suerte. Hay cientos de dispositivos que funcionan en la banda de 433Mhz, sensores meteorológicos de Oregon Scientific, enchufes controlados por radio frecuencia, etc… Yo tengo un sensor de temperatura Oregon THGR122NX y unos enchufes radiocontrolados DI-O 54796. Como el decodificador de TDT solo es un receptor, no envía señales, podemos recibir los datos que envía el sensor Oregon, y los que envía el mando de los enchufes radiocontrolados. En el segundo caso nos puede valer para efectuar ciertas acciones con el mando de los enchufes, por ejemplo: reiniciar el servidor cuando se pulse una secuencia concreta de pulsaciones (yo que sé, es lo primero que me ha pasado por la cabeza, no me lo tengáis en cuenta…).

Además ya hay un proyecto que se encarga de decodificar todas estas señales, y mostrárnoslas de forma similar a la del software del Efergy que veíamos antes, se llama rtl_433. El software lo podemos descargar e instalar de forma similar al anterior (da unos cuantos Warnings a la hora de compilar, no os asustéis):

Ya está copilado e instalado en /usr/local/bin. Podemos ejecutarlo con la opción -h y ver que dispositivos es capaz de soportar y sus modos de funcionamiento:

No está nada mal la lista de dispositivos soportados, aunque no llega a ser como la de RFXCOM, pero algo es algo por 6’5€ frente a los 100€ del emisor/receptor RFXCOM. Para probarlo solo tenemos que ejecutarlo sin ninguna opción:

Se puede ver como primero detecta un envío de datos del sensor Oregon, luego la pulsación de una tecla ON para un enchufe radiocontrolado, luego una tecla OFF para el mismo dispositivo, y luego otro envío de datos del sensor Oregon.

Si ejecutamos el comando rtl_433 con los modificadores -a o -A podemos ver información sobre las tramas de datos sin decodificar que se reciben, por si estamos intentando detectar señales que no están actualmente soportadas por el programa, pero eso ya da para otra entrada entera… de momento ahí queda eso 🙂

Espero que os haya gustado y os den ganas de probarlo 🙂

Comentarios

  1. Por Eduardo

    Responder

    • Por José María

      Responder

  2. Responder

    • Por José María

      Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *