Voici une page avec quelques automatisations additionnelles pour Home Assistant. Elles ne sont pas publiées sur GitHub pour le moment car, bien qu'utiles car elles en simplifient l'usage, elles ne sont pas absolument nécessaires pour le fonctionnement de la chaudière.
Ce contenu clôture (pour le moment) une suite d'articles portant sur la domotisation d'une chaudière à gaz, dont la première partie se trouve ici.
Sommaire
Calcul de température moyenne du logement
Automatisations pour calculer la température moyenne du logement sur 30min glissantes (mesure toutes les ~2min). Utilisation de la plateforme Statistics de Home Assistant.
sensor:
- platform: statistics
name: "Z1 Room temp average"
unique_id: z1_room_temp_average
# /!\ TBD: Use room temp from the sensor of your choice
#entity_id: number.z1_room_temperature
state_characteristic: average_linear
# Keep as LTS ?
#state_class: measurement
#device_class: °C
# measurement resolution is ~24/hour, so 12/30min
sampling_size: 10
max_age:
minutes: 30
precision: 1
Statistiques de chauffage
Automatisation pour calculer le temps de chauffage journalier (temps que la chaudière passe en mode heating
). Utilisation de la plateforme History Stats de Home Assistant.
TODO : Léger bug, si le temps cumulé du jour courant dépasse le temps cumulé du jour précédent, ce dernier est écrasé par la valeur du jour courant. La réciproque n'est pas vraie. Voir Home Assistant - issue.
sensor:
- platform: history_stats
name: "Temps de chauffage cumulé"
unique_id: boiler_heating_cumulated_time
entity_id: sensor.ebusd_boiler_boiler_status_boiler_status
# Keep data as LTS ?
# state_class: total_increasing
# device_class: h
state: "heating"
type: time
# Note the bug workaround on durations...
start: >
{{ now().replace(hour=0, minute=1, second=0, microsecond=0) }}
duration: "23:58:00"
# Or on 24h
#hours: 24
Coupure automatique du préchauffage de l'eau chaude sanitaire
flowchart TD B{boiler_status changed ?} B -->|Yes| E B -->|Yes| X[auto_reset_on_use] X --> C{boiler_status = 'heating hot water'
and
dhw_comfort_mode = 'Always on'?} C -->|Yes| D(Turn off) --> E C -->|Yes| F C -->|No| B E[auto_reset_if_never_used] F[delay 20min] --> G(Turn off) --> H[dhw_comfort_mode] --> I(Turn on) --> E E --> J{auto_reset_if_never_used on
and
dhw_comfort_mode = 'Always on'?} J -->|Yes| L[delay 15min] --> G J -->|No| B
Diagramme de flux de l'automatisation.
Automatisation visant à couper la fonction de préchauffage de l'eau chaude sanitaire après un certain temps de non utilisation (25min) ou si celui-ci a été activé mais non utilisé (15min). Attention, seul le mode Always on
est supporté dans cet exemple.
automation auto_reset_dhw_comfort:
- alias: "Auto reset DHW comfort if not used anymore"
id: auto_reset_dhw_comfort_if_not_used_anymore
trigger:
platform: state
entity_id: sensor.ebusd_boiler_boiler_status_boiler_status
condition: "{{ states.sensor.ebusd_boiler_boiler_status_boiler_status.state == 'heating hot water' and states.input_select.dhw_comfort_mode.state == 'Always on'}}"
# Restart the timer if the condition is true later
mode: restart
action:
# Disable the auto turn off
- service: automation.turn_off
entity_id: automation.auto_reset_dhw_comfort_if_never_used
# Wait if someone use hot water before turning it off
- delay: "00:20:00"
- service: input_select.select_option
target:
entity_id: input_select.dhw_comfort_mode
data:
option: "Off"
# Reactivate the auto turn off automation for the next time
- service: automation.turn_on
entity_id: automation.auto_reset_dhw_comfort_if_never_used
- alias: "Auto reset DHW comfort if never used"
id: auto_reset_dhw_comfort_if_never_used
trigger:
platform: state
entity_id: input_select.dhw_comfort_mode
condition: "{{ states.input_select.dhw_comfort_mode.state == 'Always on' }}"
action:
- delay: "00:15:00"
- service: input_select.select_option
target:
entity_id: input_select.dhw_comfort_mode
data:
option: "Off"
Coupure automatique de la chaudière si la consigne est atteinte
flowchart TD B{temperature_target changed ?} B -->|Yes| C{temperature_target
and
z1_water_min_temp
available ?} C -->|Yes| D{temperature_target
<=
z1_water_min_temp} C -->|No| B D -->|No| F{temperature_target
>=
z1_water_min_temp + 2.5°C
and
z1_heating_activation last_changed + 30min
<=
now} D -->|Yes| E(Turn off) --> H F -->|yes| G(Turn on) --> H F -->|No| B H[z1_heating_activation]
Diagramme de flux de l'automatisation.
Automatisation permettant de couper le circulateur lorsque la température de chauffe a atteint un minimum de température (35°C par défaut). Dans ce cas la demande de chauffage est moins/pas justifiée : la température de consigne est atteinte voire dépassée et seul le circulateur reste en service.
Une hystérésis est présente en ne réactivant la chaudière que si la loi d'eau a augmenté de 2.5°C la température de l'eau (c.-à-d. que le logement se refroidit).
Une autre hystérésis cette fois temporelle, empêche la remise en service si la coupure a eu lieu moins de 30min auparavant.
Note : La commande de remise en service n'outrepasse pas la commande d'activation/désactivation du chauffage.
automation set_heating_status:
# hysteresis 1: [z1_water_min_temp ; z1_water_min_temp + 2.5],
# hysteresis 2: last_changed since at least 30min
# i.e if temp is below z1_water_min_temp, then it must be above z1_water_min_temp + 2.5
# for the heating to be reactivated.
- alias: "Set heating status based on water temp calculation"
trigger:
platform: state
# Computed temperature of the hot water
entity_id: sensor.temperature_target
condition: >-
{% set expected_states = [
states.sensor.temperature_target,
states.number.ebusd_boiler_z1_water_min_temp,
]
%}
{{ expected_states | selectattr('state', 'in', ['unavailable', 'unknown', 'none']) | list | count == 0 }}
action:
- if:
- condition: template
value_template: >-
{% set z1_water_min_temp = states.number.ebusd_boiler_z1_water_min_temp.state | float %}
{{ (states.sensor.temperature_target.state | float(0)) <= z1_water_min_temp }}
then:
# Put offline the heating for the zone
- service: switch.turn_off
entity_id: switch.ebusd_boiler_z1_heating_activation_onoff
else:
- if:
- condition: template
# last_changed attr can be undefined, beware !
value_template: >-
{% set z1_water_min_temp = states.number.ebusd_boiler_z1_water_min_temp.state | float %}
{% set last_changed_datetime = states.switch.ebusd_boiler_z1_heating_activation_onoff.last_changed %}
{{ (states.sensor.temperature_target.state | float(0)) >= (z1_water_min_temp + 2.5)
and (last_changed_datetime is defined)
and (last_changed_datetime + timedelta(minutes=30)) <= now() }}
then:
# Put online the heating for the zone
- service: switch.turn_on
entity_id: switch.ebusd_boiler_z1_heating_activation_onoff