Lectura Monitor de Consumo Eléctrico online (CC128) desde Ubuntu (consola)
Ha llegado a mis manos (de forma temporal) un medidor de consumo eléctrico en tiempo real. Es de la familia de los CurrentCost CC128. La instalación a nivel electrica es sencilla y no tiene mucho secreto (lo podéis ver en la propia web de Current Cost).
Ver el consumo de forma online nos puede ayudar sobretodo a concienciarnos en el tema de consumo electrico, así como llevar el control del gasto realizado y que luego no nos time la compañía electrica. El propio dispositivo receptor es capaz de almacenar unos 7 años de información diaria, pero si lo que queremos es tener mayor detalle, podemos conectarlo al PC y recuperar la información en tiempo real.
A continuación voy a explicar como hacerlo por consola desde Ubuntu. Al final lo que tendrémos será un script que nos mostrará la información recibida del consumo en tiempo real (cada 5seg).
Prerequisitos: Hay que tener instalado el Perl y el módulo Device::SerialPort
Instalar módulo Device::SerialPort en Perl (suponiendo que ya tenéis Perl instalado): Desde una consola ejecutamos el siguiente comando como root:
perl -MCPAN -e shell
Cuando ha acabado las verificaciones y cosas raras, ejecutamos el comando para instalar en módulo:
install Device::SerialPort
Cuando finaliza, salimos com exit.
Ahora hay que crear el siguiente script, el cual leerá la salida que emite el receptor cada 5 seg y la interpreta, de tal forma que nos mostrará los watios y la temperatura en ese momento. Lo único que debemos tener en cuenta es el puerto USB por el que está conectado el receptor, en este caso en /dev/ttyUSB0 (marcado en rojo):
#!/usr/bin/perl -w # Reads data from Current Cost and e.on energy monitor devices via serial port. use strict; use Device::SerialPort qw(ARAM :STAT 0.07 ); my $PORT = "<span style="color: #ff0000;">/dev/ttyUSB0</span><span style="font-family: terminal, monaco;">"; my $ob = Device::SerialPort->new($PORT); $ob->baudrate(57600); $ob->write_settings; open(SERIAL, "+>$PORT"); while (my $line = <SERIAL>) { if ($line =~ m!<tmpr> *([\-\d.]+)</tmpr>.*<watts>0*(\d+)</watts>!) { my $temp = $1; my $watts = $2; print "$watts, $temp\n"; }</span> }
El resultado cuando se ejecuta este script es algo como esto:
akirasan@akirasan-desktop:~/currentcost# ./consumo.sh 2432, 19.9 2443, 19.9 2423, 19.8 2435, 19.8 1074, 19.8 969, 19.9 964, 19.9 990, 19.9 2436, 19.9 2501, 19.8 2460, 19.8 2449, 19.8 2458, 19.8 2440, 19.8 2449, 19.8
akirasan@akirasan-desktop:~/currentcost# cat /dev/ttyUSB0 <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:44:42</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02455</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:44:48</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02474</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:44:54</time><tmpr>19.9</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02472</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:06</time><tmpr>19.9</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>01020</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:12</time><tmpr>19.9</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>01041</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:18</time><tmpr>19.9</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>01021</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:24</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02400</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:30</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02318</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:37</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02472</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:43</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02478</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:49</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02468</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:45:55</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02441</watts></ch1></msg> <msg><src>CC128-v0.11</src><dsb>00003</dsb><time>09:46:02</time><tmpr>19.8</tmpr><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>02444</watts></ch1></msg>
Descarga del script en Perl aquí: http://pastebin.com/eksBABuD
Información de referencia de ayuda:

Esto es una prueba de Arqueologos