Photovoltaïque, Tempo, Chauffage

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 :slight_smile:

2 « J'aime »