Como no podía ser de otra forma, nos estrenamos con una entrada que aunque compleja, une dos de nuestras pasiones, en control del consumo eléctrico de nuestro hogar (en este caso usaremos el dispositivo Current Cost Envir) y la domótica con home assitant.
El Current Cost Envir es un dispositivo que consiste en una pinza amperimetrica que se puede colocar en una de las fases del consumo a medir, conectado a un transmisor de RF a pilas.
Por otra parte un receptor, con pantalla que nos deja visualizar varias de estas sondas, y que, y esta es la parte buena, dispone de un puerto RJ45 donde conectar un cable RJ45 a USB y tomar las lecturas.
Los medidores de consumo se popularización en UK debido a que las eléctricas los regalaban, por lo que es fácil encontrarlos en ebay o similar buscando por smart meter a precios realmente bajos.
Una vez tengamos el dispositivo instalado y conectado a nuestra Raspberry Pi, debemos instalar en la misma el soporte Python para dispositivos USB y par volcar datos en InfluxDB (que usaremos para almacenar los datos como base de datos.
sudo apt install python-serial
sudo apt install python-influxdb
Instalamos InfluxDB para Rasperry pi:
sudo apt-get install influxdb
sudo service influxdb start
Añadimos nuestro script en Python de lectura de valores:
from influxdb import InfluxDBClient
from datetime import datetime
from time import sleep
import serial
import re
import random
import time
now = datetime.utcnow()
print now
client = InfluxDBClient('localhost', 8086, 'bbddusr', 'pwd', 'lee_pot')
client.create_database('lee_pot')
while True:
try:
now = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
cc128 = serial.Serial("/dev/ttyUSB0", 57600, timeout=6)
cc128xml = cc128.readlines(6)
texto=re.sub('<.*?>', '', str(cc128xml))
print texto
tmpr=texto[26:30]
watts=texto[37:42]
print "Temperatura " + str(tmpr) + "C, Potencia " + str(watts) + "watios"
print cc128xml
json_body = [
{
"measurement": "lee_pot",
"tags": {
"Potencia": "w",
},
"time": now,
"fields": {
"value": int(watts)
}
}
]
client.write_points(json_body)
json_body = [
{
"measurement": "lee_temp",
"tags": {
"Temperatura": "C",
},
"time": now,
"fields": {
"value": float(tmpr)
}
}
]
client.write_points(json_body)
sleep(10)
except:
sleep(10)
Si lo vemos oportuno para no tener que arrancarlo cada vez, creamos un demonio para que autoarranque nuestro script en /etc/systemd/system creamos el fichero lee_potgraf.service:
[Unit]
Description=lee_potgraf.service
After=influxd.service
[Service]
User=root
ExecStart=/usr/bin/python /rutaanuestroscript/nuestroscript.py
Restart=always
RestartSec=60s
[Install]
WantedBy=multi-user.target
Recordamos los comandos para trabajar con demonios:
- sudo systemctl enable lee_potgraf.service → Mete en arranque
- sudo systemctl daemon-reload → Lo recarga
- sudo systemctl start lee_potgraf.service → Lo arranca
- sudo systemctl status lee_potgraf.service → Ver estado
Por último solo nos falta incluir los sensores de InfluxDB en nuestro configuration.yaml de nuestro Home Asssitant en la sección sensors:
# Sensors
sensor:
- platform: influxdb
queries:
- name: Temperatura
unit_of_measurement: °C
value_template: '{{ value | round(2) }}'
group_function: last
where: '"Temperatura" = ''C'''
measurement: '"lee_temp"'
field: value
database: lee_pot
- name: Potencia
unit_of_measurement: 'w'
value_template: '{{ value | round(2) }}'
group_function: last
where: '"Potencia" = ''w'''
measurement: '"lee_pot"'
field: value
database: lee_pot
Ya tenemos integrados los sensores de Temperatura y Potencia de nuestro Current Cost Envir en Home Assistant.
Si necesitas ayuda recuerda unirte a nuestro grupo de Telegram y para no perderte nada de lo que publiquemos sigue nuestro Twitter.
Aporto mi granito de arena con cálculo para PVPC: https://www.pacienciadigital.com/calcular-coste-pvpc-home-assistant/