En esta parte definiremos los sensores de la válvula termostática y crearemos alguna automatización para empezar a jugar con ellas.
Si todo ha ido bien en la parte I del articulo deberíamos tener nuestro termostato ya activo y funcionando
El nivel de batería nos llega con el sensor termostato_comedor_derecho_battery_low , que solo tiene dos valores , 1 batería baja y 0 para batería correcta, para mostrarlo en las graficas y en lovelace por el porcentaje de batería crearemos un nuevo sensor a partir de termostato_comedor_derecho_battery_low.
termostato_comedor_derecho_battery_level:
friendly_name: Bateria termostato com. derecho
value_template: >
{% if is_state('binary_sensor.termostato_comedor_derecho_battery_low', 'off') %}
100
{% else %}
0
{% endif %}
unit_of_measurement: '%'
icon_template: >
{% if is_state('binary_sensor.termostato_comedor_derecho_battery_low', 'on') %}
mdi:battery-10
{% else %}
mdi:battery
{% endif %}
También nos llega la temperatura local de la válvula , le daremos forma a dicho sensor
- platform: mqtt
name: termostato_comedor_derecho_local_temperature
state_topic: "zigbee2mqtt/termostato_comedor_derecho"
value_template: '{{ value_json.local_temperature|float }}'
unit_of_measurement: °C
force_update: true
A la válvula le pasaremos un offset de corrección de la temperatura de la estancia a partir de otro sensor de temperatura ( yo tengo un sensor que he calibrado previamente llamado temperatura_comedor_calibrada ) , de esta forma haremos que la válvula corrija su temperatura la cual habitualmente no es correcta , ya que simplemente entre otros factores es afectada por la proximidad al radiador , estas válvulas solo admiten un margen de corrección de +9ºC a -9ºC , yo he puesto como máximo un margen de ±5ºC . ya que de ser superior o inferior en las siguientes correcciones se va calibrando
- platform: template
sensors:
termostato_comedor_derecho_temperature_offset:
friendly_name: 'Offset temperatura radiador com. derecho'
value_template: >-
{{ min(5, max( -5, (
(states.sensor.temperatura_comedor_calibrada.state | float(0)) | round(2) -
(states.climate.termostato_comedor_derecho.attributes['local_temperature'] | float(0))
))) | round(2)
}}
icon_template: >-
mdi:temperature-celsius
unit_of_measurement: °C
En la posición de la válvula podremos ver cuando abre y cierra así como el comportamiento en función del preset que utilicemos , estos cierres y aperturas son los que mas consumo tienen en las baterías de la válvula por lo que buscaremos la mas optima para alargar la batería.
Y en el fichero customize.yaml le pondriamos todos los atributos para que luzcan bien
binary_sensor.termostato_comedor_derecho_battery_low:
friendly_name: Nivel bajo termostato radiador comedor der.
icon: mdi:battery
sensor.termostato_comedor_derecho_position:
friendly_name: Posición valvula termostato com. derecho
sensor.termostato_comedor_derecho_local_temperature:
friendly_name: Temperatira medida en termostato com. derecho
Así nos quedaría nuestra tarjeta en lovelace
- type: entities
show_name: true
show_state: false
show_header_toggle: false
columns: 3
entities:
- sensor.termostato_comedor_derecho_position
- sensor.termostato_comedor_derecho_local_temperature
- sensor.temperatura_comedor_calibrada
- sensor.termostato_comedor_derecho_temperature_offset
- sensor.termostato_comedor_derecho_battery_level
Una vez que ya tenemos los sensores creados y funcionando pasaremos a las automatizaciones , la primera es para que nos avise cuando alguno de los termostatos tenga la batería baja
- id: alerta_bateria_baja_telegram_termostatos
alias: 'Alerta bateria baja termostatos'
initial_state: 'on'
trigger:
- platform: state
entity_id:
- binary_sensor.termostato_oriol_battery_low
- binary_sensor.termostato_matrimonio_battery_low
- binary_sensor.termostato_comedor_derecho_battery_low
- binary_sensor.termostato_comedor_izquierdo_battery_low
from: 'off'
to: 'on'
condition:
condition: and
conditions:
- condition: state
entity_id: input_boolean.int_menos_notificaciones
state: 'off'
- condition: or
conditions:
- condition: template
value_template: "{{ trigger.from_state.state != 'unknown' and trigger.to_state.state != 'unknown'}}"
- condition: template
value_template: "{{ trigger.to_state.state > 0 and trigger.to_state.state < 10 }}"
action:
- service: notify.notif_telegram_bot
data_template:
message: "\U0001f50b Atención! {{ trigger.to_state.name }} el nivel de bateria del termostato es bajo* \U0001f50b"
Esta automatización envía la calibración de temperatura a las válvulas cada 30 minutos siempre que el estado de la caldera sea calentando que es cuando nos interesa que la reciban.
######################################################################################################################
#Enviamos la calibracion de la temperatura local cuando arranca la caldera o cada 30 minutos mientras acta activa
######################################################################################################################
- id: Ajuste de calibracion de la temperatura de las valvulas termostato MQTT
initial_state: 'on'
alias: Ajuste de calibracion de la temperatura de las valvulas termostato MQTT
trigger:
- platform: state
entity_id: climate.calefaccion_casa
- platform: time_pattern
minutes: '/30'
seconds: 00
condition:
- condition: template
value_template: "{{(states.climate.calefaccion_casa.state == 'heat')}}"
- condition: state
entity_id: switch.rele_termostato_caldera
state: 'on'
action:
- service: notify.notif_telegram_bot
data:
message: "*Ajuste valvula radiador : * ( Oriol )"
- service: mqtt.publish
data:
topic: zigbee2mqtt/termostato_oriol/set
payload: >-
{
"local_temperature_calibration": "{{ min(5, max( -5, (
(states.sensor.temperatura_oriol_calibrada.state | float(0)) | round(2) -
(states.climate.termostato_oriol.attributes['local_temperature'] | float(0))
))) | round(2)
}}"
}
- service: notify.notif_telegram_bot
data:
message: "*Ajuste valvula radiador : * ( Matrimonio )"
- service: mqtt.publish
data:
topic: zigbee2mqtt/termostato_matrimonio/set
payload: >-
{
"local_temperature_calibration": "{{ min(5, max( -5, (
(states.sensor.temperatura_comedor_calibrada.state | float(0)) | round(2) -
(states.climate.termostato_matrimonio.attributes['local_temperature'] | float(0))
))) | round(2)
}}"
}
- service: notify.notif_telegram_bot
data:
message: "*Ajuste valvula radiador : * ( Comedor derecho )"
- service: mqtt.publish
data:
topic: zigbee2mqtt/termostato_comedor_derecho/set
payload: >-
{
"local_temperature_calibration": "{{ min(5, max( -5, (
(states.sensor.temperatura_comedor_calibrada.state | float(0)) | round(2) -
(states.climate.termostato_comedor_derecho.attributes['local_temperature'] | float(0))
))) | round(2)
}}"
}
- service: notify.notif_telegram_bot
data:
message: "*Ajuste valvula radiador : * ( Comedor izquierdo )"
- service: mqtt.publish
data:
topic: zigbee2mqtt/termostato_comedor_izquierdo/set
payload: >-
{
"local_temperature_calibration": "{{ min(5, max( -5, (
(states.sensor.temperatura_comedor_calibrada.state | float(0)) | round(2) -
(states.climate.termostato_comedor_izquierdo.attributes['local_temperature'] | float(0))
))) | round(2)
}}"
}
- service: notify.notif_telegram_bot
data:
message: "*Fin de ajuste valvulas radiadores *"
Al minuto de arrancar Home Assistant enviamos la configuración de las válvulas según mas nos interese.
######################################################################################################################
#Enviamos la configuracion de las valvulas al arrancar el sistema
######################################################################################################################
- id: Envio configuracion valvulas termostaticas
alias: Envio configuracion valvulas termostaticas
initial_state: 'on'
trigger:
- event: start
platform: homeassistant
action:
- delay: 00:01:00
#Temperaturas Termostatos valvulas radiadores climate
- service: climate.set_preset_mode
target:
entity_id:
- climate.calefaccion_casa
- climate.termostato_oriol
- climate.termostato_matrimonio
- climate.termostato_comedor_derecho
- climate.termostato_comedor_izquierdo
data:
preset_mode: 'none'
- service: climate.set_temperature
target:
entity_id:
- climate.calefaccion_casa
- climate.termostato_oriol
- climate.termostato_matrimonio
- climate.termostato_comedor_derecho
- climate.termostato_comedor_izquierdo
data:
temperature: '{{ states.input_number.temperatura_caldera.state | float(0) }}'
- service: climate.set_hvac_mode
target:
entity_id:
- climate.calefaccion_casa
- climate.termostato_oriol
- climate.termostato_matrimonio
- climate.termostato_comedor_izquierdo
- climate.termostato_comedor_derecho
data:
hvac_mode: 'off'
- service: climate.turn_off
entity_id:
- climate.termostato_oriol
- climate.termostato_matrimonio
- climate.termostato_comedor_derecho
- climate.termostato_comedor_izquierdo