Bonjour à tous, je débute sous HA et je viens de faire une automatisation (ou plutôt 2…) que je voulais vous partager. voici le contexte:
Je suis équipé de panneaux photovoltaïque avec un onduleur SMA. Le chauffage est assuré par une pompe à chaleur AIR AIR de marque DAIKIN. J’ai un contrat d’énergie EDF avec le tarif TEMPO.
Comme vous le savez sans doute, avec un contrat Tempo, il faut faire très attention à sa consommation électrique pendant 22jours dans l’année (les jours rouge) car le tarif est 5 fois plus élevé (Bien sûr EDF place ces jours rouges quand il y a des pics de consommation donc pendant les périodes de plan grand froid (et ce n’est pas une contrepèterie). Ces jours là j’utilise un poêle à bois qui est dans mon salon pour chauffer la maison mais celui-ci est un peu faible pour chauffer correctement l’étage (la chambre de ma fille peut descendre à 17° ce qui est limite).
Pour autant, quand il fait froid, il peut y avoir du soleil et les panneaux photovoltaïque produisent quand même et parfois plus que ce que je consomme (mon talon). J’ai donc fait deux automatisations pour chauffer uniquement quand j’ai de l’excédent photovoltaïque.
Pour cela j’ai utiliser ces capteurs:
- Lixee pour la détecter la période de tarification (Heures Pleines Jour Rouge)
- Des capteurs de température Zigbee Tuya.
- Les intégrations de mon onduleur photovoltaïque et de ma pompe à chaleur.
Gestion de l’allumage des chauffages:
alias: Allumage Chauffage avec Excédent Photovoltaïque
description: >-
Utilise l'excédent photovoltaïque pour chauffer les pièces pendant les
périodes HPJR
trigger:
- platform: state
entity_id: sensor.sn_3008917353_metering_active_power_feed_l1
- platform: state
entity_id: sensor.zlinky_active_register_tier_delivered
- platform: time_pattern
minutes: /5
condition: # On verifie que l'on est en période EDF HPJR et que l'on a de l'excedent photovoltaïque supérieur au seuil paramétré
- condition: template
value_template: >-
{{ states('sensor.sn_3008917353_metering_active_power_feed_l1')|float >
seuil_pv }}
- condition: template
value_template: "{{ states('sensor.zlinky_active_register_tier_delivered') == 'HPJR' }}"
action:
- variables: # On récupère la valeur de la température de la pièce la plus froide
celia_temp: "{{ states('sensor.esphome_web_f579e4_celia_temperature')|float }}"
tristan_temp: "{{ states('sensor.esphome_web_f579e4_tristan_temperature')|float }}"
chambre_temp: "{{ states('sensor.esphome_web_f579e4_chambre_temperature')|float }}"
salon_temp: "{{ states('sensor.esphome_web_f579e4_salon_temperature')|float }}"
min_temp: "{{ [celia_temp, tristan_temp, chambre_temp, salon_temp] | min }}"
- choose: # On compare la valeur min_temp récupérée plus haut au valeurs des capteurs de température.
# Cela permet de n'allumer le chauffage que dans la pièce la plus froide et de réévaluer la l'excedent photovoltaique.
- conditions:
- condition: template
value_template: "{{ celia_temp == min_temp and celia_temp < temperature_consigne }}"
sequence:
- service: climate.turn_on
entity_id: climate.chambre_de_celia
- conditions:
- condition: template
value_template: >-
{{ tristan_temp == min_temp and tristan_temp <
temperature_consigne }}
sequence:
- service: climate.turn_on
entity_id: climate.chambre_de_tristan
- conditions:
- condition: template
value_template: >-
{{ chambre_temp == min_temp and chambre_temp <
temperature_consigne }}
sequence:
- service: climate.turn_on
entity_id: climate.chambre_parentale
- conditions:
- condition: template
value_template: "{{ salon_temp == min_temp and salon_temp < temperature_consigne }}"
sequence:
- service: climate.turn_on
entity_id: climate.salon_2
- delay:
minutes: "{{ delai_evaluation }}"
variables:
temperature_consigne: 19
seuil_pv: 800
delai_evaluation: 5
mode: single
Voici maintenant l’automatisation pour l’extinction. On éteint en premier le chauffage de la pièce la plus chaude.
alias: Extinction Chauffage avec Excédent Photovoltaïque
description: >-
Éteint les chauffages pendant les périodes HPJR lorsque l'excédent
photovoltaïque est inférieur au seuil
trigger:
- platform: state
entity_id: sensor.sn_3008917353_metering_active_power_feed_l1
- platform: state
entity_id: sensor.zlinky_active_register_tier_delivered
- platform: time_pattern
minutes: /5
condition:
- condition: template
value_template: >-
{{ states('sensor.sn_3008917353_metering_active_power_feed_l1')|float <=
excedent_seuil }}
- condition: template
value_template: "{{ states('sensor.zlinky_active_register_tier_delivered') == 'HPJR' }}"
action:
- variables:
salon_temp: >-
{{ states('sensor.esphome_web_f579e4_salon_temperature')|float if
is_state('climate.salon_2', 'heat') else -273 }}
chambre_parentale_temp: >-
{{ states('sensor.esphome_web_f579e4_chambre_temperature')|float if
is_state('climate.chambre_parentale', 'heat') else -273 }}
tristan_temp: >-
{{ states('sensor.esphome_web_f579e4_tristan_temperature')|float if
is_state('climate.chambre_de_tristan', 'heat') else -273 }}
celia_temp: >-
{{ states('sensor.esphome_web_f579e4_celia_temperature')|float if
is_state('climate.chambre_de_celia', 'heat') else -273 }}
max_temp: >-
{{ [salon_temp, chambre_parentale_temp, tristan_temp, celia_temp] | max
}}
- choose:
- conditions:
- condition: template
value_template: "{{ salon_temp == max_temp }}"
sequence:
- service: climate.turn_off
entity_id: climate.salon_2
- conditions:
- condition: template
value_template: "{{ chambre_parentale_temp == max_temp }}"
sequence:
- service: climate.turn_off
entity_id: climate.chambre_parentale
- conditions:
- condition: template
value_template: "{{ tristan_temp == max_temp }}"
sequence:
- service: climate.turn_off
entity_id: climate.chambre_de_tristan
- conditions:
- condition: template
value_template: "{{ celia_temp == max_temp }}"
sequence:
- service: climate.turn_off
entity_id: climate.chambre_de_celia
- delay:
minutes: "{{ delai_evaluation }}"
variables:
excedent_seuil: 0
delai_evaluation: 5
mode: single
J’espère que ça pourra donner des idées à certains et avoir aussi des conseils d’améliorations