Planifier vos consignes de chauffage

Catégories Guide pratique
Feu de cheminé

Quelques soit votre chauffage, vos thermostats ou votre contrôleur domotique, il y a de forte chance que vous rencontrez des difficultés à organiser vos consignes de chauffage. J’ai enfin trouvé la solution pour mon chauffage et je veux la partager avec vous.

Cela fait maintenant deux hivers que j’utilise une méthode basée sur cet excellent poste Heating boilerplate a universal solution with modes. Ce poste a été créé par et pour les utilisateurs d’openhab mais je l’utilise très bien avec home assistant et je n’ai aucun doute sur la possibilité de l’adapter pour Jeedom. Si vous n’avez pas encore de contrôleur Domotique, lisez l’article Comment choisir un controleur domotique.

Entrées numériques – Consignes de chauffage

Il vous faut d’abord créer des entrées numériques virtuelles (input_number sur home assistant par exemple). Ces virtuelles vont représenter la consigne de vos pièces en temps normal. J’ai poussé le concept en créant un virtuel par type de pièce. J’ai donc un virtuel pour les « chambres adultes », « chambre enfants », « pièces de vie », « salle de bain »…

Scénarios

J’ai créé plusieurs scénarios (automatisations) suivant mes journées pour mettre à jours ces virtuelles. Par exemple un scenario se lance à 6:30 pour préparer le levé, il augmente la température des chambres, des salles de bains et des pièces à vivre pour obtenir le meilleurs confort au réveil. Un autre scénario se lance en semaine lorsque tous le monde a quitté la maison, et diminue les consignes de température. Et ainsi de suite pour le reste de la journée.

Les modes de chauffages

Jusque ici, c’est simple mais pourquoi ne pas mettre à jours directement les consignes des thermostats ? C’est la que les modes entre en jeux. Disons que vous voulez dire à votre maison vous êtes malade aujourd’hui ou exceptionnellement vous serez absent. Le faite de séparer les consignes en temps normal avec les consignes ponctuelles vous permet de passer de l’un à l’autre sans problème.

L’étape suivante serait donc de mettre à jours les thermostats. Pour cela à la fin de chaque automatisation je lance un script (ou change un virtuel qui lance une automatisation) qui va décider en fonction du mode la température à appliquer. Par exemple si le mode malade est actif, ignore le virtuel et mets tel température pour les pièces à vivres, chambres et couloirs. Le mode travail à la maison est activé, ignore le virtuel et mets tel température pour les pièces à vivre, le bureau et ainsi de suite. Ces mode sont d’autres virtuelles que vous pouvez automatiser. Par exemple à 21:00 vous pouvez couper le mode malade et repasser en mode normal. Ou alors à la fin d’événements, vous pouvez arrêter le mode absent et lancer le mode normal. Dans tous les cas le système pourra reprendre le mode normal à n’importe quel moment.

Voici mon code sur home assistant:
Automatisations:


- alias: "Comfort le matin"
  trigger:
    platform: time
    at: '05:45:00'
  action:
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_common_rooms
      value: 21.5 
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_bathrooms
      value: 22
  - service: input_number.set_value
    data:
      entity_id: 
        - input_number.target_preset_bedrooms
        - input_number.target_preset_corridors
      value: 20
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_kid_bedrooms
      value: 21
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats

- alias: "Eteindre le chauffage départ Kita/Travail"
  trigger:
    platform: state
    entity_id: binary_sensor.presence_any
    to: 'off'
  condition:
    condition: and
    conditions:
      - condition: time
        after: '06:00'
        before: '11:00'
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri
  action:
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_common_rooms
      value: 19.5 
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_bathrooms
      value: 19
  - service: input_number.set_value
    data:
      entity_id: 
        - input_number.target_preset_bedrooms
        - input_number.target_preset_corridors
        - input_number.target_preset_kid_bedrooms
      value: 18
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats

- alias: "11:00 - Baisse chauffage à l'étage"
  trigger: 
    platform: time
    at: '11:00'
  condition:
    condition: or
    conditions:
      - condition: time
        weekday:
          - sat
          - sun
      - condition: state
        entity_id: binary_sensor.presence_any
        state: 'on'
  action:
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_kid_bedrooms
      value: 20
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_bedrooms
      value: 18
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_bathrooms
      value: 20
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats

- alias: "Monter le chauffage retour de la kita"
  trigger:
    platform: time
    at: '15:00'
  condition:
    condition: time
    weekday:
      - mon
      - tue
      - wed
      - thu
      - fri
  action:
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_kid_bedrooms
      value: 20
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_common_rooms
      value: 21.5
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_corridors
      value: 20
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats

- alias: "Coucher des enfants"
  trigger:
    platform: time
    at: '17:00'
  action:
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_bathrooms
      value: 22
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_kid_bedrooms
      value: 19
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats

- alias: "Coucher du dernier"
  trigger:
    platform: time
    at: '01:00'
  action:
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_bathrooms
      value: 19
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_common_rooms
      value: 19.5
  - service: input_number.set_value
    data:
      entity_id: input_number.target_preset_corridors
      value: 19
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats

- alias: Annuler mode chauffage après une journée
  trigger:
    platform: time
    at: '17:00'
  condition:
    condition: or
    conditions:
    - condition: state
      entity_id: input_select.heating_mode
      state: 'Malade'
    - condition: state
      entity_id: input_select.heating_mode
      state: 'Home Office'
  action:
  - service: input_select.select_option
    data:
      entity_id: input_select.heating_mode
      option: Normal
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats
  
- alias: Changer le mode chauffage lorsque mode vacance activé
  trigger:
    platform: state
    entity_id: input_boolean.vacation_mode
    to: 'on'
  action:
  - service: input_select.select_option
    data:
      entity_id: input_select.heating_mode
      option: 'En vacance'
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats

- alias: Changer le mode de chauffage lorsque le mode vacance est terminé
  trigger:
    platform: state
    entity_id: input_boolean.vacation_mode
    to: 'off'
  action:
  - service: input_select.select_option
    data:
      entity_id: input_select.heating_mode
      option: Normal
  - service: script.turn_on
    data:
      entity_id: script.update_thermostats



Script:


update_thermostats:
  alias: Mettre à jours les thermostats
  sequence:
  - service: climate.set_temperature
    data_template:
      entity_id: 
      - climate.chambre_rdc
      - climate.chambre_florian
      temperature: >
        {% if is_state('input_select.heating_mode', 'Normal') %}
          {{ states('input_number.target_preset_kid_bedrooms')}}
        {% elif is_state('input_select.heating_mode', 'Malade') %}
          20
        {% elif is_state('input_select.heating_mode', 'Home Office') %}
          {{ states('input_number.target_preset_kid_bedrooms') }}
        {% elif is_state('input_select.heating_mode', 'En vacance') %}
          17
        {% endif %}
  - service: climate.set_temperature
    data_template:
      entity_id: climate.chambre_1er
      temperature: >
        {% if is_state('input_select.heating_mode', 'Normal') %}
          {{ states('input_number.target_preset_bedrooms') }}
        {% elif is_state('input_select.heating_mode', 'Malade') %}
          20
        {% elif is_state('input_select.heating_mode', 'Home Office') %}
          {{ states('input_number.target_preset_bedrooms') }}
        {% elif is_state('input_select.heating_mode', 'En vacance') %}
          17
        {% endif %}
  - service: climate.set_temperature
    data_template:
      entity_id:
      - climate.salon
      - climate.cuisine
      temperature: >
        {% if is_state('input_select.heating_mode', 'Normal') %}
          {{ states('input_number.target_preset_common_rooms') }}
        {% elif is_state('input_select.heating_mode', 'Malade') %}
          21.5
        {% elif is_state('input_select.heating_mode', 'Home Office') %}
          21.5
        {% elif is_state('input_select.heating_mode', 'En vacance') %}
          17
        {% endif %}
  - service: climate.set_temperature
    data_template:
      entity_id: climate.salle_de_bain
      temperature: >
        {% if is_state('input_select.heating_mode', 'Normal') %}
          {{ states('input_number.target_preset_bathrooms') }}
        {% elif is_state('input_select.heating_mode', 'Malade') %}
          22
        {% elif is_state('input_select.heating_mode', 'Home Office') %}
          {{ states('input_number.target_preset_bathrooms') }}
        {% elif is_state('input_select.heating_mode', 'En vacance') %}
          17
        {% endif %}
  - service: climate.set_temperature
    data_template:
      entity_id: climate.buanderie
      temperature: >
        {% if is_state('input_select.guest_mode', 'Cave') or is_state('input_select.guest_mode', 'Cave & Toit') %}
          {{ states('input_number.target_preset_bathrooms') }}
        {% elif is_state('input_select.heating_mode', 'En vacance') %}
          17
        {% else %}
          19
        {% endif %}
  - service: climate.set_temperature
    data_template:
      entity_id: climate.escalier
      temperature: "{{ states('input_number.target_preset_corridors') }}"
  - service: climate.set_temperature
    data_template:
      entity_id: climate.chambre_cave
      temperature: > 
        {% if is_state('input_select.guest_mode', 'Cave') or is_state('input_select.guest_mode', 'Cave & Toit') %}
          {{ states('input_number.target_preset_bedrooms') }}
        {% elif is_state('input_select.heating_mode', 'En vacance') %}
          17
        {% else %}
          18
        {% endif %}
  - service: climate.set_temperature
    data_template:
      entity_id: climate.chambre_toit
      temperature: > 
        {% if is_state('input_select.guest_mode', 'Toit') or is_state('input_select.guest_mode', 'Cave & Toit') %}
          {{ states('input_number.target_preset_bedrooms') }}
        {% elif is_state('input_select.heating_mode', 'En vacance') %}
          17
        {% else %}
          18
        {% endif %}



Je compte bien améliorer ce système notamment en utilisant le « machine learning ». De cette façon j’optimiserais la reprise de chauffage. Imaginons j’ai un virtuel représentant une heure de la journée (heure de retour au domicile) qui s’actualise en fonction de son historique. Mon système pourra le matin vérifier à quelle heure je rentre le jeudi et programmer une mis à jours de ma consigne virtuelle à temps. Ou alors il détecte le faite que je quitte mon travail, sachant mon temps de transport il optimise la mise en route du chauffage. Une autre optimisation serait lorsque ma maison sait que je ne suis pas partis au travail, elle me demande si je suis malade ou je compte travailler à la maison et mets à jour le mode de chauffage en fonction de ma réponse.

Bref le système est universel et extensible permettant d’être au plus près des besoins de chauffage de votre domicile. N’hésitez pas à partager vos avis et vos résultats si vous avez essayé de le mettre en place.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *