Siguiendo con documentos de cosas curiosas que podemos hacer con una Raspberry Pi, algo muy sencillo de conseguir es por ejemplo medir el consumo eléctrico de lo que queramos, en este documento veremos cómo conectar a una Raspberry Pi unos sensores no invasivos de corriente y medir el gasto de nuestro hogar, ya que la conectaremos al cuadro eléctrico de nuestra casa! Exportaremos las métricas a una base de datos de MySQL y luego con Grafana crearemos un panel donde podremos ver de una manera muy intuitiva en que gastamos y cuánto!

Lo que usaremos:

  • Raspberry Pi
  • HAT para Raspberry
  • Sensores

Conectaremos pues el HAT a la Raspberry Pi y los sensores que tengamos; en las pinzas de los sensores tendremos en cuenta de pasar únicamente un cable, con eso podremos saber el consumo en Vatios (W) que hace cada ‘cosa’ que tengamos pinzada. Podremos medir de cualquier aparato eléctrico, así como lo dicho, poner esto en el cuadro eléctrico de casa y medir los consumos desde ahí, si lo tenemos bien etiquetado, no nos costará medir el consumo General o el del Alumbrado, consumos de los enchufes, de la nevera, horno, lavadora, acuario… yo que sé!

Con este comando podremos conectarnos por serie al HAT y ver qué escupe. Verás que dependiendo del HAT que hayas adquirido podras ver la corriente, el voltaje o la temperatura, que es lo que escupirá este comando separado en comas.

stty -F /dev/ttyAMA0 raw speed 38400
cat /dev/ttyAMA0

Ahora, lo que haremos será tratar esos outputs (en formato CSV), en mi ejemplo si te fijas devuelve los watt de 7 sensores no intrusivos, cada uno de ellos lo tengo conectado a un cable de mi cuadro eléctrico, al ver el código veras qué corrientes mido (General, Enchufes de unas estufas, la Lavadora, el Alumbrado, el Horno y la nevera, y los enchufes. Después exporto dicha información a una tabla que he creado previamente en MySQL, así que necesitaremos tener MySQL instalado en alguna máquina (o lo instalamos en la propia Pi) y crearemos ahí la BD y la Tabla que queramos, mi ejemplo que tiene una columna por cada sensor:

 CREATE TABLE `corriente` (
`general` FLOAT NULL DEFAULT NULL,
`estufas` FLOAT NULL DEFAULT NULL,
`lavavajillas_lavadora` FLOAT NULL DEFAULT NULL,
`alumbrado` FLOAT NULL DEFAULT NULL,
`horno_vitro` FLOAT NULL DEFAULT NULL,
`enchufes` FLOAT NULL DEFAULT NULL,
`fecha` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

Y nada, ya sólo nos queda tener este maravilloso script en python que nos va a ir llenando la Tabla ‘corriente’ de nuestra Base de datos! Creamos dicho script:

#!/usr/bin/python
import serial
import urllib
import json
import MySQLdb

ser = serial.Serial('/dev/ttyAMA0', 38400)

response = ser.readline()
z = response.split(",")
if len(z)>=7:
 print "General: %s Watts" % z[0]
 print "Estufas: %s Watts" % z[1]
 print "Lavavajillas y Lavadora: %s Watts" % z[2]
 print "Alumbrado: %s Watts" % z[3]
 print "Horno y vitro: %s Watts" % z[4]
 print "Enchufes: %s Watts" % z[5]

general_valor=z[0]
estufas_valor=z[1]
lavavajillas_lavadora_valor=z[2]
alumbrado_valor=z[3]
horno_vitro_valor=z[4]
enchufes_valor=z[5]

db = MySQLdb.connect("localhost","root","xxxxxx","NOMBRE_BASE_DATOS")
cursor = db.cursor()

cursor.execute("""INSERT INTO corriente (general,estufas,lavavajillas_lavadora,alumbrado,horno_vitro,enchufes) VALUES (%s,%s,%s,%s,%s,%s) """, (general_valor,estufas_valor,lavavajillas_lavadora_valor,alumbrado_valor,horno_vitro_valor,enchufes_valor))
db.commit()

Y listo! Lo que nos queda es programar que se ejecute este script con el intervalo que nos interese, ejecutamos ‘crontab -e‘ y añadimos lo siguiente para que se ejecute por ejemplo cada minuto:

* * * * * python /home/pi/corriente.py

Gráfica donde añadimos la metrica y nos la pinte, en este caso el consumo de los enchufes:

SELECT enchufes as value, "Enchufes" as metric, UNIX_TIMESTAMP(fecha) as time_sec FROM corriente  WHERE $__timeFilter(fecha) order by time_sec asc

Gráfica donde añadimos la métrica del consumo del Alumbrado:

SELECT alumbrado as value, "Alumbrado" as metric, UNIX_TIMESTAMP(fecha) as time_sec FROM corriente  WHERE $__timeFilter(fecha) order by time_sec asc

www.bujarra.com

Deja una respuesta

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