viernes, 6 de septiembre de 2013

Medidor de consumo eléctrico EnviR (parte 1)

Cortesía de mis nuevos amigos

Buenos días, hace tiempo que andaba mirando medidores de consumo eléctrico para mi casa. Cómo la factura de la luz sube cada mes, hay que tenerlo todo controlado. Había visto varios modelos y marcas hasta que, casualidades de la vida, recibo un correo de Tomás de la empresa Cliensol, en el que me preguntaba si sabría extraer los datos de su medidor de consumo EnviR, aprovechando el puerto serie que trae, para tener los datos en el Raspberry.

Tomás, a parte de ser buen actor como demuestra el vídeo, me envió el kit básico de EnviR, consistente en:
1- Sensor + emisor inalámbrico
2- Pantalla receptora, donde muestra el estado actual, acumulado, temperatura ...
Y ya está, no hace falta más. Siguiendo las instrucciones que proporcionan, conectamos el sensor al cuadro eléctrico y lo sincronizamos con EnviR (la pantalla).
Le ajustamos la moneda a €, hora y el precio por kw/h que la compañía eléctrica nos sangra cada mes. Desde este momento ya tenemos en funcionamiento el kit completo, superfácil. En su web y canal de youtube hay muchos ejemplos y manuales para no perderte.

Conexión serie y descarga de datos al RaspberryPi

Vamos a lo que nos interesa. El EnviR tiene un puerto serie por detrás, camuflado como un RJ45. Tomás me envió además del kit, el cable usb-RJ45, no se si lo incluyen en el kit, lo compras a parte ...
Como el EnviR tiene alimentación propia, no es necesario conectarlo a un hub usb alimentado. Así que enchufamos al Raspberry, ejecutamos lsusb y vemos:
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Si buscamos un poco, el chip PL2303 es un conversor serie-usb. Requiere un módulo en concreto para el kernel que ... jejejeje ya viene en nuestros Raspberrys :) Instalamos:
apt-get update
apt-get install minicom
y ahora, fijándonos en la documentación, nos conectamos al EnviR desde el Raspberry:
minicom -b 57600 -D /dev/ttyUSB0 -8
y ahí lo tenemos, un precioso XML, que genera una línea cada ~6 segundos con los datos que queremos:
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:54:42</time><tmpr>28.5</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02820</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:54:48</time><tmpr>28.5</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02819</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:54:54</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02833</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:00</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02830</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:07</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02821</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:13</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02858</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:19</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02813</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:25</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02811</watts></ch1></msg>
Podemos dejarlo en segundo plano y generando el XML con:
SCREEN -dmS enviR minicom -b 57600 -D /dev/ttyUSB0 -8 -C /tmp/envir/salida.xml
En el siguiente post veremos como explotar un poco esos datos e integrarlos con nuestra domótica, generar alertas y grabarlo todo en una BBDD Mysql.

4 comentarios:

  1. al hacer est:
    minicom -b 57600 -D /dev/ttyUSB0 -8

    me dice esto:
    El dispositivo /dev/ttyUSB0 está bloqueado.

    ResponderEliminar
  2. Bueno creo que eso me ocurre porque esta en ejecución el screen.
    Otro problema es q no consigo sacar el dato del consumo del xml
    Este es el script que estaba usando:
    #!/bin/bash
    #orden=$(echo $@ | grep msg | sed 's//\ /g' | sed 's/\///g' | sed '$
    orden=$( tail -1 /tmp/salida.xml | grep msg | sed 's//\ /g' | sed '$
    watts=$(echo $orden | cut -f5 -d\ )
    #export WATTS=$watts
    #echo los watts son: $WATTS >> /tmp/salida_watts.log
    echo $watts

    pero me dice esto ahora:
    /usr/local/bin/watios.sh: línea 3: EOF inesperado mientras se buscaba un `'' coincidente
    /usr/local/bin/watios.sh: línea 8: error sintáctico: no se esperaba el final del fichero

    ResponderEliminar
  3. Vale lo solucioné, estaba mal el script.

    ResponderEliminar
  4. Maldición!! te me adelantas demasiado!! ;) cómo te lo curras!

    ResponderEliminar