Gérer la puissance du chauffage

Bonjour à toutes et à tous

Mon problème

A la maison j’ai comme système de chauffage un poêle à granulé et des radiateurs en complément dans les chambres.
Pour les 2 modes de chauffage, je peux commander le démarrage/arrêt, et la puissance.

Je voudrais donc savoir comment puis-je faire pour réguler les chauffages en fonction de la température actuelle des pièces (déjà récupéré dans des entités sur HA) et la météo extérieur, afin de réguler autour de la température de consigne, et pouvoir gérer des heures de présence / absent ; jour / nuit ; …
Est-ce qu’il existe une intégration qui permet de faire ceci, ou un module Node-Red déjà existant ? Mes recherches n’ont pas été fructueuses à ce sujet.

Ma configuration

Je suis sous HA OS, mais je pense que ma question est commune à tous les HA.

Salut,

Solution externe via Appdemaon mais ca a l’air lourd et cela peut ne plus onctionner lors d’une mise ajour de HA.

Salut,
Non il n’y a pas d’intégration. Le chauffage est la partie faible de HA. Il n’y a pas de planificateur et le thermostat est trop basique, il ne prend même pas en compte la température extérieure. Il chauffe a 100% jusqu’a atteindre la température + un seuil (hysteresis), puis arrête. Cela crée des oscillations de température et des chaud-froid inconfortables, consomme plus. C’est probablement adapté aux clim réversibles américaines mais pas du tout a nos convecteurs.

Perso j’ai redéveloppé dans un blue print un thermostat type TPI (Time Proportional Integral) puis ajouté des modes (confort, eco, hors gel…), intégré l’ouverture de fenêtres, la consommation, les absences en fonction alarme et enfin la gestion de plages horaires pour chaque mode.

Pour le calcul de la puissance en %, il est donné par la formule :
Puissance = Ci * (T consigne - T intérieure) + Co * (T consigne - T extérieure)
avec un min a 0% et un max a 100%

Ci est un coeff qui dépend de la puissance du chauffage et de la surface.
Co dépend de l’isolation.
Pour une installation standard au norme on a Ci = 0,6 et Co = 0,01
le fait de considérer la température extérieure permet de compenser les pertes de chaleur et garder une température très constante.

Exemple : Tint = 19°C Text = 10°C et consigne a 20°C alors puissance = 70%

Pour un poele a granule, tu peux lui injecter cette puissance toutes les 30mn par exemple.
Le temps de mise a jour dépend de l’inertie : 30mn a 1 heure pour une chaudière, 10mn pour un convecteur on/off (fil pilote).

Pour un convecteur (on-off) il faut recalculer toutes les 10mn la puissance via une automatisation et piloter le temps de marche sur la période. Avec une puissance de 70%, le convecteur sera alors sur ON 7mn puis sur OFF 3mn.
J’utilise cela pour 8 convecteur et depuis 5 ans et c’est vraiment très performant.

Pour la planification j’utilise la scheduler card. J’ai découvert que le scheduler peut être réentrant : il est possible a tout moment de changer de plage et la consigne sera modifiée en fonction de l’heure qu’il est. Pour cela, juste désactiver et réactiver la planification concernée. L’alternative Shelly peut ainsi être évitée car sans interface et complexe.

Pour la consommation (pas de capteur de conso si fil pilote), il faut multiplier la puissance calculée par la puissance de l’appareil et mettre cela dans un utility meter. Pour les granules, tu peux approximer la conso de granules avec le même mécanisme.

Bon je suis conscient que cela est complexe car demande de la custo. Il faudra que je fasse un post dédié, en partageant mon interface et mes blue print. Mais tu as la déja des pistes.

2 « J'aime »

tu parles de régler la température des radiateurs??

si oui, as tu des robinets thermostatiques connectés (qui incluent le relevé de température de la pièce) et/ou des capteurs de température?

pour ma part, j’ai des robinets thermostatiques + des capteurs de températures dans chaque pièce. J’utilise Node Red sans hésitation, avec la prise en compte de la température extérieur, la prise en compte de la température intérieur souhaitée (max et min) de chaque pièce, la géolocalisation ou tracker wifi pour définir la présence ou non de quelqu’un (tu peux aussi utiliser l’intégration d’agenda Google mais c’est du cloud) , créer un mode « éco » pour la nuit ect…

exemple pour une chambre avec la gestion de la temperare du capteur xiaomi de la chambre, et du capteur de temperature du robinet thermostatique :
image
et l’allumage du de la PAC :

1 « J'aime »

Salut Argonaute est ce possible de partager ton Thermostat?
Cela me parait super interresssnt

Hello,
Voici le blue print du thermostat. Il est écrit pour un convecteur : cycle de 10mn (toutes les 10mn il recalcule la puissance et allume le convecteur de la durée adéquate) et pilotage on-off via fil pilote. A adapter pour un poêle a granules.
Il gère également l’ouverture de la fenêtre. Un input text permet de stocker et afficher la puissance en cours.

Le blue print permet de générer une automatisation pour chaque convecteur, sans multiplier le code. Code a mettre dans un fichier et copier dans le répertoire blueprints/automatisation.


blueprint:
  name: Thermostat TPI
  description: Thermostat TPI (Time Propertional & Integral)
  domain: automation

  input:
    coeff_c:
      name: Coefficient C
      description: coefficient multiplicateur de la différence entre la consigne et éa température intérieure pour le calcul de la puissance (0.6 conseillé)
      selector:
        number:
          min: 0.0
          max: 1.0
          step: 0.01
    coeff_t:
      name: Coefficient T
      description: coefficient multiplicateur de la différence entre la consigne et éa température extérieure pour le calcul de la puissance (0.01 conseillé)
      selector:
        number:
          min: 0.0
          max: 0.1
          step: 0.001
    entity_consigne:
      name: Consigne
      description: Champs d'entrée de la température de consigne (input number).
      selector:
        entity:
          domain: input_number
    entity_temp_ext:
      name: Température extérieure
      description: Sonde de mesure de la température extérieure (sensor)
      selector:
        entity:
          domain: sensor
          device_class: temperature
    entity_temp_int:
      name: Température intérieure
      description: Sonde de mesure de la température intérieure (sensor)
      selector:
        entity:
          domain: sensor
          device_class: temperature
    entity_fenetre:
      name: Fenètre
      description: Capteur d'ouverture de fenêtre (sensor)
      selector:
        entity:
          domain: binary_sensor
          device_class: opening
    entity_puissance:
      name: Puissance
      description: Champs d'affichage de la puissance (input_number)
      selector:
        entity:
          domain: input_number
    entity_chauffage:
      name: Chauffage
      description: Interrupteur marche / arrêt du chauffage (switch)
      selector:
        entity:
          domain: switch

# Récupération des paramètres
variables:
  coeff_c: !input coeff_c
  coeff_t: !input coeff_t
  entity_temp_int: !input entity_temp_int
  entity_temp_ext: !input entity_temp_ext
  entity_fenetre: !input entity_fenetre

trigger:
  - platform: time_pattern
    minutes: "/10"
  - platform: state
    entity_id: !input entity_consigne
#  - platform: state
#    entity_id: !input entity_temp_int
  - platform: state
    entity_id: !input entity_fenetre


action:
  - alias: récupération des données
    variables:
      entity_consigne: !input entity_consigne
      consigne: "{{states(entity_consigne)}}"
      temp_ext: '{{ states(entity_temp_ext) }}'
      temp_int: '{{ states(entity_temp_int) }}'
      fenetre: '{{states(entity_fenetre)}}'     
      puissance: >-
        {%set val = coeff_c * (consigne - temp_int) + coeff_t * (consigne -
        temp_ext) %}  {% if val > 1 %} {% set val = 100 %}  {% elif val < 0 or
        fenetre == 'on' %} {% set val = 0 %}  {% else %} {% set val = ( (val *
        100) | round(0)) %} {% endif %} {{val}}
      temps_chauffe: '{{ puissance * 6 }}'
  - alias: Met à jour l'indicateur de puissance
    service: input_number.set_value
    target:
      entity_id: !input entity_puissance
    data:
      value: '{{puissance}}'  
  - choose:
      - conditions:
          - condition: template
            value_template: '{{puissance == 0}}'
        sequence:
          - service: switch.turn_off
            target:
              entity_id: !input entity_chauffage
      - conditions:
          - condition: template
            value_template: '{{ puissance > 99}}'
        sequence:
          - service: switch.turn_on
            target:
              entity_id: !input entity_chauffage
    default:
      - service: switch.turn_on
        target:
          entity_id: !input entity_chauffage
      - delay: '{{temps_chauffe}}'
      - service: switch.turn_off
        target:
          entity_id: !input entity_chauffage
mode: restart
 

Un autre blue print permet de piloter les différents modes / plages horaires. Je pourrai le fournir si intérêt ainsi que l’interface.

1 « J'aime »

Salut merci oui cela m’intéresse beaucoup ça me permet d’avoir une base. Je veux m’en servir pour gérer la température de mon eau de chauffage . J’avais fait ça sous jeedom mais je ne suis pas très satisfait

Si cela t’intéresse, voici comment j’ai fait pour un besoin similaire (dans mon cas, je gère la puissance de chauffe avec un % d’ouverture de vanne 3 voies):
https://forum.hacf.fr/t/suggestions-pour-piloter-un-plancher-chauffant-hydrolique-via-pac/3459/8

Merci à @Dapolux pour le partage. Très intéressant. Tu devrais pouvoir remplacer les seuils par une formule.

Voila la suite de mon implémentation.
J’ai au total 4 automatisations par convecteur :

J’ai donc une première automatisation pour le thermostat que j’ai présenté précédemment (dans un blue print). Elle permet une gestion fine de la puissance en fonction des températures intérieures et extérieures.

Ensuite, j’ai créé 2 automatisations en utilisation la scheduler card pour gérer les températures par plage horaire :

  • Auto-confort : quand une personne est dans la pièce (ou en tout cas dans la maison).
  • Auto-eco: quand la pièce est chauffée mais qu’il n’y a pas forcément quelqu’un (jours de travail à l’extérieur par exemple).

La consigne est stockée dans un input text. Pour chacune des 2 planifications, la scheduler card permet de spécifier les températures par plage horaire.

Exemple d’une planification dans la scheduler card:

Enfin, une quatrième automatisation se déclenche quand le mode de chauffage est changé. Le mode est dans un input select. Il peut être : auto-confort, auto-eco, manuel, hors gel, arrêt et absence.

Ensuite, j’ai créé une carte assez simple qui permet de de voir pour chaque convecteur (j’ai 8 pièces pilotées) le mode de fonctionnement (par exemple auto - confort), la température actuelle, la consigne, la puissance de chauffe, l’état de la fenêtre. Il remplace la carte thermostat de HA.

image

Voici les différents modes proposés par l’input select:
image

La sélection du mode active ou désactive les 3 automatisations : thermostat, auto confort et auto eco. La consigne est changée pour une valeur en dure si le mode n’est pas auto-eco ou auto-confort.

Point important : si par exemple on passe du mode confort au mode eco, le scheduler ajuste automatiquement la consigne en fonction de sa planification et de l’heure qu’il est.
Enfin le thermostat met la consigne à 0 si la fenêtre est ouverte, et remet la bonne valeur une fois fermée.

Voyons maintenant chacun des modes, et comment le changement de mode active ou désactive les 3 automatisations thermostat, auto-confort, auto-eco :

Mode « auto-confort »
Automatisation thermostat : ON
Automatisation auto-confort : ON
Automatisation auto-eco : OFF

Mode « auto-eco »
Automatisation thermostat : ON
Automatisation auto-confort : OFF
Automatisation auto-eco : ON

Mode « Hors-gel »
Automatisation thermostat : ON
Automatisation auto-confort : OFF
Automatisation auto-eco : OFF
Consigne forcée à 10°C (bon un peu plus qu’un hors gel…"
image

Mode « Manuel »
Automatisation thermostat : ON
Automatisation auto-confort : OFF
Automatisation auto-eco : OFF
La carte affiche une ligne pour régler la consigne de température.
image

Mode « Arrêt »
Automatisation thermostat : OFF
Automatisation auto-confort : OFF
Automatisation auto-eco : OFF
Consigne et puissance a 0.
Tout est arrêté. C’est le mode d’été.

Mode « Absence »
Automatisation thermostat : ON
Automatisation auto-confort : OFF
Automatisation auto-eco : ON

Le thermostat fonctionne en ECO. Le mode absence n’est pas censé être activée manuellement, mais automatiquement par la détection d’une absence (l’alarme mise dans mon cas).

La gestion de l’alarme est :

  • Si alarme mise, mettre dans les chauffages qui sont en auto-confort en absence.
  • Si alarme enlevée, mettre dans les chauffages qui sont en absence en auto-confort.

Voici le code de la carte

Carte chauffage
type: entities
entities:
  - type: 'custom:button-card'
    color: '#D1DBAE'
    name: Salon
    styles:
      card:
        - background-color: '#E2E2E2'
        - height: 25px
      name:
        - font-size: 18px
  - entity: input_select.chauffage_salon_mode
    name: Mode
  - type: conditional
    conditions:
      - entity: input_select.chauffage_salon_mode
        state: Manuel
    row:
      entity: input_number.chauffage_salon_consigne
      type: 'custom:numberbox-card'
      name: Réglage consigne
  - type: 'custom:hui-element'
    card_type: glance
    show_name: false
    style: |
      ha-card {
        background: var(--background-card-color);
        box-shadow: none;
        font-size: 20px;
        top: -10px;
        margin: -20px
      }
    entities:
      - entity: sensor.oregon_thermometre_salon_temperature
      - entity: input_number.chauffage_salon_consigne
      - entity: input_number.chauffage_salon_puissance
      - entity: binary_sensor.aqara_fenetre_salon_onoff
        icon: 'mdi:window-closed-variant'

Et enfin la gestion des modes. Le blue print permet de créer une automatisation de pilotage pour chaque convecteur.

Blueprint gestion des modes de chauffage
blueprint:
  name: Pilotage chauffage
  description: Gestion des différents modes de chauffage - Stop  Hors-gel  Auto confort Auto eco 
  domain: automation

  input:
    entity_consigne:
      name: Consigne
      description: Champs d'entrée de la température de consigne (input number).
      selector:
        entity:
          domain: input_number
    entity_mode:
      name: Sélection du mode
      description: Entité de gestion du mode de gestion du chauffage (input_select)
      selector:
        entity:
          domain: input_select
    entity_schedule_confort:
      name: Schedule mode confort
      description: Entité générée par schedule pour la planification du mode confort (switch)
      selector:
        entity:
          domain: switch
    entity_schedule_eco:
      name: Schedule mode eco
      description: Entité générée par schedule pour la planification du mode eco (switch)
      selector:
        entity:
          domain: switch
    entity_thermostat_tpi:
      name: Thermostat
      description: Entité de gestion du thermostat TPI (automation)
      selector:
        entity:
          domain: automation


# Température pour le hors gel
variables:
  temperature_hg: 10

alias: Pilotage chauffage bureau Patrick
description: ''
trigger:
  - platform: state
    entity_id: !input entity_mode
condition: []
action:
  - choose:
      # ----- Mode Stop
      - conditions:
          - condition: state
            entity_id: !input entity_mode
            state: Stop
        sequence:
          - service: input_number.set_value
            data:
              value: 0
            target:
              entity_id: !input entity_consigne
          - service: switch.turn_off
            target:
              entity_id:
                - !input entity_schedule_eco
                - !input entity_schedule_confort
          - service: automation.turn_off
            target:
              entity_id: !input entity_thermostat_tpi
      # ----- Mode Hors-gel
      - conditions:
          - condition: state
            entity_id: !input entity_mode
            state: Hors-gel
        sequence:
          - service: automation.turn_on
            target:
              entity_id: !input entity_thermostat_tpi
          - service: input_number.set_value
            data:
              value: '{{temperature_hg}}'
            target:
              entity_id: !input entity_consigne
          - service: switch.turn_off
            target:
              entity_id:
                - !input entity_schedule_eco
                - !input entity_schedule_confort
      # ----- Mode Auto - confort
      - conditions:
          - condition: state
            entity_id: !input entity_mode
            state: Auto - confort
        sequence:
          - service: automation.turn_on
            target:
              entity_id: !input entity_thermostat_tpi
          - service: switch.turn_on
            target:
              entity_id: !input entity_schedule_confort
          - service: switch.turn_off
            target:
              entity_id:
                - !input entity_schedule_eco
      # ----- Mode Auto - eco ou absent
      - conditions:
          - condition: or
            conditions:
              - condition: state
                entity_id: !input entity_mode
                state: 'Auto - eco'
              - condition: state
                entity_id: !input entity_mode
                state: 'Absent'
        sequence:
          - service: automation.turn_on
            target:
              entity_id: !input entity_thermostat_tpi
          - service: switch.turn_off
            target:
              entity_id:
                - !input entity_schedule_confort
          - service: switch.turn_on
            target:
              entity_id: !input entity_schedule_eco
    # ----- Mode manuel
    default:
      - service: switch.turn_off
        target:
          entity_id:
            - !input entity_schedule_eco
            - !input entity_schedule_confort
      - service: automation.turn_on
        target:
          entity_id: !input entity_thermostat_tpi
mode: single


1 « J'aime »

Il peut être intéressant que tu puisses l’expliquer directement dans un tuto non ? Car ça a l’ai super intéressant.

1 « J'aime »

Merci. Je pense avoir été assez exhaustif mais oui je peux consolider et réorganiser les textes dans un seul tuto. Ou devrais je alors le mettre ?

Oui mais a la suite d’un poste cela va se perdre hihi.

Tu peux faire un copier coller dans #decouverte-de-home-assistant comme ca il sera dans les tutos puis au fur a mesure ru pourras l’agrémenter.

Merci d’avance

Tutoriel et partage j’imagine :innocent:
Je faire faire cela.

1 « J'aime »

Lol oui problème de sélection depuis le mobile. Merci Merci

Bonjour,
Je voudrais savoir s’il est possible de faire plusieurs plage de chauffe avec node red exemple confort normal et eco avec plusieurs plage horaires.
Un peux comme jybi89.
Si oui comment le faire.
Merci
Cordialement