Es muy fácil conectar una electroválvula y un caudalímetro a la toma de agua y poder controlarlas desde Home Assistant.
Con el montaje que te propongo en el vídeo desde ese momento tendrás el control y podrás medir los litros consumidos, y lo podrás usar en casa para la ducha, en el jardín para la piscina, para llenar un depósito, para el riego, etc.
Y lo mejor es que podrás hacerlo tanto desde Home Assistant como de forma autónoma.
Te dejo a continuación los enlaces de compra de los productos que se han usado en el vídeo:
Aquí el vídeo:
A continuación te dejo el código que he usado en ESPHome:
esphome:
name: grifo-termo-electrico
esp8266:
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "W56/vbjbtOSrMGxxxxxxxxxpYW6b8SvQKxjTG4o="
ota:
password: "91e57a0858xxxxxxxxxxx43b032001ff210"
wifi:
# definimos varios Wifi para que el dispositivo se conecte automáticamente al
# que llegue con mejor cobertura
networks:
- ssid: !secret wifi_ssid
password: !secret wifi_password
- ssid: !secret wifi_ssid2
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Grifo-Termo-Electrico"
password: "8WFPYUGouwjM"
captive_portal:
sensor:
# Caudalímetro YF-B5
- platform: pulse_counter
device_class: water
pin: GPIO5 #D1
name: "Consumo agua termo electrico instantáneo"
id: yfb5
update_interval: 5s
unit_of_measurement: 'l/min'
filters:
# Q = F /6.6 siendo F litros por segundo.
# Para pasarlo a minutos sería Q = F * 1 / (6.6 * 60) = F * 0.002525
- multiply: 0.002525
- platform: integration
device_class: water
state_class: total_increasing
name: "Consumo agua termo electrico acumulado"
unit_of_measurement: 'L'
accuracy_decimals: 2
sensor: yfb5
time_unit: min
switch:
# Relés para manejar la electroválvula
- platform: gpio
id: grifo_termo_electrico_cerrar
pin: GPIO14 #D5
- platform: gpio
id: grifo_termo_electrico_abrir
pin: GPIO12 #D6
light:
# Leds
- platform: binary
output: led1
id: led_verde
- platform: binary
output: led2
id: led_rojo
output:
- platform: gpio
id: led1
pin: GPIO13 #D7
- platform: gpio
id: led2
pin: GPIO15 #D8
binary_sensor:
# Pulsador en Home Assistant
- platform: homeassistant
entity_id: input_boolean.termo_electrico
id: puls_termo_hass
on_state:
# según esté encendido o apagado en Home Assistant
# coloco el led rojo en apagado o encendido (al revés)
- if:
condition:
lambda: return(id(puls_termo_hass).state);
then:
light.turn_on: led_rojo
else:
light.turn_off: led_rojo
# y luego movemos la electroválvula para abrir o cerrar según corresponda
- script.execute: mueve_grifo
# Pulsador en la caja
- platform: gpio
id: pulsador_caja
pin:
number: GPIO4 #D2
mode:
input: true
pullup: true
on_press:
then:
if:
# si está conectado a Home Assistant
condition:
api.connected:
then:
# entonces cambia de estado el pulsador de Home Assistant
# esto provocará que se ejecute el bloque anterior como
# si fuera el usuario quien lo ha pulsado. Por tanto
# la electroválvula se colocará en su posición automáticamente
- homeassistant.service:
service: input_boolean.toggle
data:
entity_id: input_boolean.termo_electrico
else:
# Si no hay conexión a Home Assistant movemos
# la electroválvula desde aquí
- script.execute: mueve_grifo
script:
# En este script movemos la electroválvula a la posición de abierta o cerrada
# dependiendo del estado del led rojo. Si estaba encendido, la válvula estaba
# cerrada y por lo tanto hay que abrirla.
# Por el contrario, si estaba apagado, la válvula estaba abierta y por lo tanto
# hay que abrirla
- id: mueve_grifo
then:
if:
condition:
# La condición es el estado del led rojo
light.is_on: led_rojo
then:
# ABRIMOS LA VÁLVULA
####################
# Cambiamos el estado de los dos leds
- light.turn_on: led_verde
- light.turn_off: led_rojo
# Activamos los relés en la combinación adecuada para abrir la válvula
- switch.turn_on: grifo_termo_electrico_abrir
- switch.turn_off: grifo_termo_electrico_cerrar
# Hacemos un parpadeo del led verde durante 15 segundos
- repeat:
count: 30
then:
- light.turn_off: led_verde
- delay: 250ms
- light.turn_on: led_verde
- delay: 250ms
# Y apagamos el relé que estaba abierto
- switch.turn_off: grifo_termo_electrico_abrir
else:
# CERRAMOS LA VÁLVULA
####################
# Cambiamos el estado de los dos leds
- light.turn_off: led_verde
- light.turn_on: led_rojo
# Activamos los relés en la combinación adecuada para cerrar la válvula
- switch.turn_off: grifo_termo_electrico_abrir
- switch.turn_on: grifo_termo_electrico_cerrar
# Hacemos un parpadeo del led rojo durante 15 segundos
- repeat:
count: 30
then:
- light.turn_off: led_rojo
- delay: 250ms
- light.turn_on: led_rojo
- delay: 250ms
# Y apagamos el relé que estaba abierto
- switch.turn_off: grifo_termo_electrico_cerrar
Y aquí te dejo el esquema del circuito de control:


