<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Archives des sensor - La programmation sur le web</title>
	<atom:link href="https://programmation.surleweb-france.fr/tag/sensor/feed/" rel="self" type="application/rss+xml" />
	<link>https://programmation.surleweb-france.fr/tag/sensor/</link>
	<description>La programmation gratuite pour tous</description>
	<lastBuildDate>Sun, 21 Nov 2021 10:15:47 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2023/08/cropped-19518430-icone-de-programmation-pour-votre-site-web-mobile-presentation-et-conception-de-logo-gratuit-vectoriel.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Archives des sensor - La programmation sur le web</title>
	<link>https://programmation.surleweb-france.fr/tag/sensor/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">176210735</site>	<item>
		<title>Home Assistant, gestion avancée du chauffage</title>
		<link>https://programmation.surleweb-france.fr/home-assistant-gestion-avancee-du-chauffage/</link>
					<comments>https://programmation.surleweb-france.fr/home-assistant-gestion-avancee-du-chauffage/#respond</comments>
		
		<dc:creator><![CDATA[Zigomato]]></dc:creator>
		<pubDate>Sat, 20 Nov 2021 23:07:58 +0000</pubDate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[chauffage]]></category>
		<category><![CDATA[climate]]></category>
		<category><![CDATA[datetime]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[input_boolean]]></category>
		<category><![CDATA[input_number]]></category>
		<category><![CDATA[input_select]]></category>
		<category><![CDATA[sensor]]></category>
		<category><![CDATA[thermostat]]></category>
		<guid isPermaLink="false">https://programmation.surleweb-france.fr/?p=1190</guid>

					<description><![CDATA[<p>Mise en place pas à pas de la gestion du chauffage en fonction de plage horaire, de mode de fonctionnement en auto et manuel sur Home Assistant</p>
<p class="continue-reading-button"> <a class="continue-reading-link" href="https://programmation.surleweb-france.fr/home-assistant-gestion-avancee-du-chauffage/">Continuer la lecture<i class="crycon-right-dir"></i></a></p>
<p>L’article <a href="https://programmation.surleweb-france.fr/home-assistant-gestion-avancee-du-chauffage/">Home Assistant, gestion avancée du chauffage</a> est apparu en premier sur <a href="https://programmation.surleweb-france.fr">La programmation sur le web</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Avoir un système domotique est avant tout un moyen de gérer de manière centralisée ses équipements de la maison. La majorité des débutants commencent par contrôler les lumières en mettant des temporisations ou bien des capteurs de présence ou d&rsquo;ouverture.</p>



<p>Nous avons vu dans un précédent article : <a href="https://programmation.surleweb-france.fr/home-assistant-utiliser-le-thermostat-generique/" target="_blank" rel="noreferrer noopener">utiliser le thermostat générique d&rsquo;Home Assistant</a>, les bases pour la gestion d&rsquo;un chauffage, il est temps de passer un cran au-dessus.</p>



<p>Cet article représente beaucoup de travail, je vais décrire les différentes étapes pour la mise en place d&rsquo;un système complet de chauffage de la maison.</p>



<p>N&rsquo;ayant pas encore ce qu&rsquo;il faut pour domotiser l&rsquo;ensemble de ma maison, j&rsquo;ai fait les automatisations avec une seule pièce en anticipant au maximum mes futurs besoins.</p>



<p>Je mets l&rsquo;ensemble des scripts nécessaires, en effet, beaucoup de sites n&rsquo;ont pas mis l&rsquo;intégralité de leur configuration.</p>



<p>J&rsquo;ai trouvé pas mal de piste sur le site de <a href="https://www.canaletto.fr/post/de-jeedom-a-home-assistant-le-chauffage" target="_blank" rel="noreferrer noopener">My Canaletto</a>.</p>



<h2 class="wp-block-heading">Objectifs</h2>



<p>Mon but était de réaliser un système me permettant :</p>



<ul class="wp-block-list"><li>gérer des absences prolongées de toutes les personnes ou bien de quelques une</li><li>avoir un fonctionnement manuel ou automatique</li><li>gérer différentes plages horaires en fonction des moments clés de la journée</li><li>pouvoir modifier les plages horaires</li><li>avoir différents modes de chauffage (éco, normal, confort)</li><li>pouvoir modifier les consignes de température de chaque mode</li></ul>



<h2 class="wp-block-heading">Les prérequis</h2>



<p>Je sais que je me répète beaucoup, j&rsquo;imagine que tu as une installation d&rsquo;Home Assistant fonctionnelle sinon tu peux te rendre sur cet article : <a href="https://programmation.surleweb-france.fr/installer-home-assistant-sur-raspberry/" target="_blank" rel="noreferrer noopener">Installation d&rsquo;Home Assistant</a>.</p>



<p>Côté matériel, j&rsquo;ai réutilisé un chauffage électrique (j&rsquo;avoue, il y a mieux en terme de consommation) que j&rsquo;ai branché sur une prise connecté, voici un lien pour l&rsquo;acquérir : <a href="https://amzn.to/3oBEpiI" target="_blank" rel="noreferrer noopener">prise connectée</a>.</p>



<p>Concernant le capteur de température, j&rsquo;avais un<a href="https://amzn.to/30CNiAs" target="_blank" rel="noreferrer noopener"> capteur xiaomi</a>.</p>



<p>Durant tout cette lecture, tu auras besoin de l&rsquo;add-on <strong>File Editor</strong>, voir <a href="https://programmation.surleweb-france.fr/les-add-on-indispensables-pour-home-assistant/" target="_blank" rel="noreferrer noopener">l&rsquo;installation</a>.</p>



<p>Pour la partie visuel, tu auras besoin d&rsquo;avoir <strong>HACS</strong>, <a href="https://programmation.surleweb-france.fr/home-assistant-installation-de-hacs/" target="_blank" rel="noreferrer noopener">Installer HACS</a>.</p>



<h2 class="wp-block-heading">Préparation</h2>



<p>Avant de commencer le gros du sujet, on va définir mes différents fichiers, voici mon fichier <strong>configuration.yaml</strong> :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">automation: !include_dir_merge_list automation/

sensor: !include sensors.yaml

binary_sensor: !include binary_sensors.yaml

climate: !include_dir_merge_list climate/
# les entrées
input_boolean: !include input_booleans.yaml
input_number: !include input_numbers.yaml
input_select: !include input_selects.yaml
input_datetime: !include input_datetimes.yaml</pre>



<p>Si dans le dossier <strong>config</strong>, tu n&rsquo;as pas ces fichiers, commences par les créer. </p>



<p>Pour <strong>climate</strong>, j&rsquo;ai créé un dossier <strong>climate</strong> puis y ait placé le fichier chauffage_parents.yaml. </p>



<p>Pour les automation, j&rsquo;ai également créer un dossier <strong>automation </strong>et y ait créer 3 fichiers :</p>



<ul class="wp-block-list"><li><em>chauffage_absent.yaml</em></li><li><em>chauffage_parents.yaml</em></li><li><em>demarrage.yaml</em></li></ul>



<h2 class="wp-block-heading">Le thermostat générique</h2>



<p>J&rsquo;ai repris le thermostat que j&rsquo;ai créé dans mon précédent article : <a href="https://programmation.surleweb-france.fr/home-assistant-utiliser-le-thermostat-generique/" target="_blank" rel="noreferrer noopener">Utiliser un thermostat générique d&rsquo;Home Assistant</a>.</p>



<p>Voici le contenu du fichier <em>chauffage_parents.yaml</em> (présent dans le dossier <strong>climate</strong>) :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># configuration du chauffage de la chambre des parents
- platform: generic_thermostat
  name: chauffage_parents
  heater: switch.prise_chauffage_parent_on_off
  target_sensor: sensor.tz3000_i8jfiezr_ts0201_9ff5c019_temperature
  min_temp: 16
  max_temp: 22
  ac_mode: false
  target_temp: 18
  cold_tolerance: 0
  hot_tolerance: 0
  initial_hvac_mode: "off"
  away_temp: 16
  precision: 0.1
  min_cycle_duration:
    seconds: 5
  keep_alive:
    minutes: 3
</pre>



<p>Je n&rsquo;irai pas plus loin, si besoin, relis l&rsquo;article précédent.</p>



<h2 class="wp-block-heading">Les plages horaires</h2>



<p>Commençons par les plages horaires, j&rsquo;ai choisi de découper ma journée en 4 parties :</p>



<ul class="wp-block-list"><li>le levée car madame (ma dame) ne souhaite pas avoir froid en sorti du lit =&gt; <strong>mode confort</strong></li><li>la journée, de manière générale, nous sommes actifs ou peu présent, le but est de maintenir une température agréable =&gt; <strong>mode normal</strong></li><li>la soirée, en rentrant du boulot ou d&rsquo;une sortie, il est agréable de retrouver un cocon chaud et douillé =&gt; <strong>mode confort</strong></li><li>la nuit, la température n&rsquo;a pas besoin d&rsquo;être élevée, un petit 16°C lorsque l&rsquo;on dort est tout à fait agréable =&gt; <strong>mode eco</strong></li></ul>



<p>Pour la gestion de ses plages, j&rsquo;ai choisi de créer une variable binaire que je pourrais ré-utiliser facilement sans alourdir mes automatisations. </p>



<p>En premier lieu, on définit les différentes heures en tant que <a href="https://www.home-assistant.io/integrations/input_datetime/" target="_blank" rel="noreferrer noopener">input_datetime</a> dans le fichier input_datetimes.yaml :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># réglage des heures de la journée par défaut au démarrage
heure_chauffage_debut_levee:
  has_date: false
  has_time: true
  initial: '06:00'
heure_chauffage_fin_levee: # est aussi l'heure de début de journée
  has_date: false
  has_time: true
  initial: '08:30'
heure_chauffage_fin_journee: # est aussi l'heure de début de soirée
  has_date: false
  has_time: true
  initial: '17:30'
heure_chauffage_fin_soiree: # est aussi l'heure de début de nuit
  has_date: false
  has_time: true
  initial: '22:00'
</pre>



<p>J&rsquo;ai définit seulement 4 variables, une heure de fin de période correspondant au début de la période suivante. Cela permettra d&rsquo;éviter que des plages se superposent ou bien des trous dans la journée.</p>



<p>Pour les variables binaire représentant chaque période, je crée donc 4 <a href="https://www.home-assistant.io/integrations/sensor/" target="_blank" rel="noreferrer noopener">sensors </a>voici le fichier <em>binary_sensors.yaml</em> :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># sensor pour la gestion de l'heure du thermostat
- platform: template
  sensors:
    chauffage_moment_levee:
      friendly_name: "Chauffage moment du levée"
      value_template: >
        {% if states.sensor.time.state > states.input_datetime.heure_chauffage_debut_levee.state %}
          {% if states.sensor.time.state &lt; states.input_datetime.heure_chauffage_fin_levee.state %}
            on
          {% else %}
            off
          {% endif %}
        {% else %}
          off
        {% endif %}
- platform: template
  sensors:
    chauffage_moment_journee:
      friendly_name: "Chauffage moment du la journée"
      value_template: >
        {% if states.sensor.time.state > states.input_datetime.heure_chauffage_fin_levee.state %}
          {% if states.sensor.time.state &lt; states.input_datetime.heure_chauffage_fin_journee.state %}
            on
          {% else %}
            off
          {% endif %}
        {% else %}
          off
        {% endif %}
- platform: template
  sensors:
    chauffage_moment_soiree:
      friendly_name: "Chauffage moment de la soiree"
      value_template: >
        {% if states.sensor.time.state > states.input_datetime.heure_chauffage_fin_journee.state %}
          {% if states.sensor.time.state &lt; states.input_datetime.heure_chauffage_fin_soiree.state %}
            on
          {% else %}
            off
          {% endif %}
        {% else %}
          off
        {% endif %}
- platform: template
  sensors:
    chauffage_moment_nuit:
      friendly_name: "Chauffage moment de la nuit"
      value_template: >
        {% if( states.sensor.time.state > states.input_datetime.heure_chauffage_fin_soiree.state and states.sensor.time.state &lt; '23:59:59') or ( states.sensor.time.state > '00:00:00' and states.sensor.time.state &lt; states.input_datetime.heure_chauffage_debut_levee.state ) %}
            on
        {% else %}
          off
        {% endif %}
  </pre>



<p>Ici, j&rsquo;utilise mes variables <strong>datetime</strong>, représentant mes débuts et fins de plage.</p>



<p>Pour finir avec les heures, dans le fichier sensors.yaml, écrire :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># utiliser pour la gestion du temps
- platform: time_date
  display_options:
  - 'time'
  - 'date'
  - 'date_time'
  - 'date_time_utc'
  - 'date_time_iso'
  - 'time_date'
  - 'time_utc'
  - 'beat'
  </pre>



<p>J&rsquo;avoue ne pas savoir pourquoi on doit l&rsquo;écrire mais il le faut (désolé, pas d&rsquo;explication).</p>



<h2 class="wp-block-heading">Les consignes de température</h2>



<p>Nous allons créer nos 3 consignes de température pour nos plages (eco, confort et normal), ce sont des <a href="https://www.home-assistant.io/integrations/input_number/" target="_blank" rel="noreferrer noopener">nombres</a>, voici le fichier <em>input_numbers.yaml</em> :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Réglage des consignes de température par défaut au démarrage
consigne_confort:
  name: 'Température de confort'
  initial: 20
  min: 15
  max: 25
  step: 0.1
  unit_of_measurement: °C
  
consigne_normal:
  name: 'Température normale'
  initial: 19
  min: 15
  max: 25
  step: 0.1
  unit_of_measurement: °C

consigne_eco:
  name: 'Température économique'
  initial: 16
  min: 15
  max: 25
  step: 0.1
  unit_of_measurement: °C
</pre>



<p>Le nommage que j&rsquo;ai choisi est important, il sera réutilisé dans mes automatisations.</p>



<h2 class="wp-block-heading">Les modes de chauffage</h2>



<p>Pour les 3 modes de chauffage :</p>



<ul class="wp-block-list"><li>eco</li><li>normal</li><li>confort</li></ul>



<p>J&rsquo;ai choisi d&rsquo;utiliser un <a href="https://www.home-assistant.io/integrations/input_select/" target="_blank" rel="noreferrer noopener">select</a>, je l&rsquo;ai définit dans le fichier <a href="https://www.home-assistant.io/integrations/input_select/" target="_blank" rel="noreferrer noopener">input_selects.yaml</a> :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Les différents modes de chauffage
mode_chauffage:
  name: "Mode de chauffage"
  options:
    - eco
    - normal
    - confort
  initial: eco
</pre>



<p>Pareil que précédemment, le nommage est important, chaque nom est identique à la fin du nom de la consigne.</p>



<h2 class="wp-block-heading">Mode de fonctionnent</h2>



<p>Pour pouvoir choisir entre le mode de fonctionnement <strong>auto </strong>ou <strong>manuel</strong>, nous allons utiliser des <a href="https://www.home-assistant.io/integrations/input_boolean/" target="_blank" rel="noreferrer noopener">booléens</a>, voici le fichier<em> input_booleans.yaml</em> :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># entrée pour le choix de mode  
chauffage_auto:
  name: "Mode de chauffage auto"
  initial: false

chauffage_manuel:
  name: "Mode de chauffage manuel"
  initial: false
</pre>



<p>Au démarrage, les deux modes sont éteints.</p>



<h2 class="wp-block-heading">Les absences</h2>



<p>Pour représenter les absences, toujours dans le fichier <em>input_booleans.yaml</em>, nous allons ajouter :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Présence des personnes
vacances:
  name: Vacances
  icon: mdi:airplane
  
absence_parents:
  name: "Absence des parents"
  icon: mdi:human-male-female
  
absence_noemie:
  name: "Absence de Noémie"
  icon: mdi:face-woman
  
absence_raphael:
  name: "Absence de Raphael"
  icon: mdi:face-man</pre>



<p>L&rsquo;entrée <strong>Vacances </strong>signifie que tous le monde est absent.</p>



<h2 class="wp-block-heading">Automatisation pour la gestion de la présence</h2>



<p>Maintenant que toutes nos entités sont créées, attaquons la gestion de la présence, dans le fichier <em>chauffage_absent.yaml</em> :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># met tous les personnes absentes
- alias: chauffage_maison_vacances_depart
  trigger:
    - platform: state
      entity_id: input_boolean.vacances
      from: "off"
      to: "on"
  action:
    - service: input_boolean.turn_on
      target:
        entity_id:
          - input_boolean.absence_parents
          - input_boolean.absence_noemie
          - input_boolean.absence_raphael

# Met toutes les personnes présentes
- alias: chauffage_maison_vacances_retour
  trigger:
    - platform: state
      entity_id: input_boolean.vacances
      from: "on"
      to: "off"
  action:
    - service: input_boolean.turn_off
      target:
        entity_id:
          - input_boolean.absence_parents
          - input_boolean.absence_noemie
          - input_boolean.absence_raphael

# mets les parents absents
- alias: chauffage_absence_parent
  trigger:
    - platform: state
      entity_id: input_boolean.absence_parents
      from: "off"
      to: "on"
  action:
    - service: input_boolean.turn_off
      target:
        entity_id:
          - input_boolean.chauffage_auto
          - input_boolean.chauffage_manuel

# Empêche la mise "on" du mode auto et manu, les replace en off
- alias: chauffage_annulation
  trigger:
    - platform: state
      entity_id: input_boolean.chauffage_manuel
      from: "off"
      to: "on"
    - platform: state
      entity_id: input_boolean.chauffage_auto
      from: "off"
      to: "on"
  condition:
    - condition: or
      conditions:
      - condition: state
        entity_id: input_boolean.absence_parents
        state: "on"
      - condition: state
        entity_id: input_boolean.vacances
        state: "on"
  action:
    - service: input_boolean.turn_off
      target:
        entity_id:
          - input_boolean.chauffage_auto
          - input_boolean.chauffage_manuel
      
      </pre>



<p>Les 3 premières automations permettent de mettre à jour le statut de moi et ma femme et des enfants que ce soit pour le départ ou le retour.</p>



<p>La dernière automatisation permet d&rsquo;éviter la mise en route du chauffage (quelque-soit le mode fonctionnement) en cas d&rsquo;absence.</p>



<h2 class="wp-block-heading">Au démarrage de Home Assistant</h2>



<p>En cas de reboot du système, je réinitialise mon chauffage qui est un chauffage électrique branché sur une prise connectée. Voici le fichier <em>demarrage.yaml</em> :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">- alias: "Démarrage d'Home Assistant"
  trigger:
    - platform: homeassistant
      event: start
  action:
    # éteint le chauffage si celui-ci est activé au démarrage
    - service: switch.turn_off
      entity_id: switch.prise_chauffage_parent_on_off
</pre>



<h2 class="wp-block-heading">La gestion du chauffage</h2>



<p>Voici la plus grosse partie de cet article, tout ce qui suit se trouve dans le fichier <em>chauffage_parents.yaml</em> présent dans le dossier <strong>automation</strong>. Nous utiliserons les fonctions de <a href="https://www.home-assistant.io/integrations/climate/" target="_blank" rel="noreferrer noopener">climate</a>.</p>



<h3 class="wp-block-heading">Choix du mode de chauffage</h3>



<p>Afin de choisir le mode de chauffage (eco, normal et confort), celui-ci ne fonctionne que si le mode de fonctionnement manuel est en cours d&rsquo;utilisation :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Modification du mode de chauffage en manuel quand celui-ci est activé
- alias: chauffage_parent_modification_mode
  trigger:
     - platform: state
       entity_id: input_select.mode_chauffage
  condition:
    - condition: state
      entity_id: input_boolean.chauffage_manuel
      state: "on"
  action:
    - service: climate.set_temperature
      data_template:
        entity_id: climate.chauffage_parents
        temperature: "{{ states('input_number.consigne_'+ states('input_select.mode_chauffage')) | float }}"</pre>



<p>Si nous sommes en fonctionnement manuel, la consigne de température est modifiée. Sinon, le mode est préselectionné. </p>



<p>C&rsquo;est ici que le nommage des variables a son important, la température est modifiée en prenant l&rsquo;état de la consigne en fonction du mode choisi.</p>



<h3 class="wp-block-heading">Modification de la consigne de température manuellement</h3>



<p>Les trois mode de fonctionnement peuvent ne pas correspondre à un besoin ponctuelle, il est possible de modifier la température de consigne de chaque mode :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Modifie la consigne de la température eco quand le mode manuel est activé en mode éco
- alias: chauffage_parent_eco
  trigger:
    - platform: state
      entity_id: input_number.consigne_eco
  condition:
  - condition: or
    conditions:
      - condition: and
        conditions:
          - condition: state
            entity_id: input_select.mode_chauffage
            state: "eco"
          - condition: state
            entity_id: input_boolean.chauffage_manuel
            state: "on"
      - condition: and
        conditions:
          - condition: state
            entity_id: input_boolean.chauffage_auto
            state: "on"
          - condition: state
            entity_id: binary_sensor.chauffage_moment_nuit
            state: 'on'
  action:
    - service: climate.set_temperature
      data_template:
        entity_id: climate.chauffage_parents
        temperature: "{{ states('input_number.consigne_eco') | float }}"

# Modifie la consigne de la température confort quand le mode manuel ou auto est activé en mode confort
- alias: chauffage_parent_confort
  trigger:
    - platform: state
      entity_id: input_number.consigne_confort
  condition:
  - condition: or
    conditions:
      - condition: and
        conditions:
          - condition: state
            entity_id: input_select.mode_chauffage
            state: "confort"
          - condition: state
            entity_id: input_boolean.chauffage_manuel
            state: "on"
      - condition: and
        conditions:
          - condition: state
            entity_id: input_boolean.chauffage_auto
            state: "on"
          - condition: or
            conditions:
              - condition: state
                entity_id: binary_sensor.chauffage_moment_soiree
                state: 'on'
              - condition: state
                entity_id: binary_sensor.chauffage_moment_levee
                state: 'on'
  action:
    - service: climate.set_temperature
      data_template:
        entity_id: climate.chauffage_parents
        temperature: "{{ states('input_number.consigne_confort') | float }}"

# Modifie la consigne de la température normal quand le mode manuel ou auto est activé en mode normal
- alias: chauffage_parent_normal
  trigger:
    - platform: state
      entity_id: input_number.consigne_normal
  condition:
  - condition: or
    conditions:
      - condition: and
        conditions:
          - condition: state
            entity_id: input_select.mode_chauffage
            state: "normal"
          - condition: state
            entity_id: input_boolean.chauffage_manuel
            state: "on"
      - condition: and
        conditions:
          - condition: state
            entity_id: input_boolean.chauffage_auto
            state: "on"
          - condition: state
            entity_id: binary_sensor.chauffage_moment_journee
            state: 'on'
  action:
    - service: climate.set_temperature
      data_template:
        entity_id: climate.chauffage_parents
        temperature: "{{ states('input_number.consigne_normal') | float }}"
</pre>



<p>Nous mettons à jours la température de consigne du thermostat seulement si le mode en cours correspond.</p>



<p>Nous pouvons mettre à jour les autres modes mais les consignes seront prises seulement au redémarrage du mode.</p>



<p>Il s&rsquo;agit d&rsquo;un gros pavé mais dans chaque automatisation, une seule condition change. Je verrai pour simplifier ce bout de code avec un template.</p>



<h3 class="wp-block-heading">Démarrage du mode auto</h3>



<p>Voici l&rsquo;automation correspondante :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># démarre le chauffage en auto si présence des parents, le mode est pris en fonction de l'heure
- alias: chauffage_parent_auto_start
  trigger:
    - platform: state
      entity_id: input_boolean.chauffage_auto
      from: "off"
      to: "on"
  condition:
    - condition: state
      entity_id: input_boolean.absence_parents
      state: "off"
  action:
    - service: input_boolean.turn_off
      target: 
        entity_id: input_boolean.chauffage_manuel
    - service: climate.set_temperature
      data_template:
        entity_id: climate.chauffage_parents
        temperature: >
          {% if states.binary_sensor.chauffage_moment_levee.state == 'on' %}
            {{ states.input_number.consigne_confort.state | float }}
          {% elif states.binary_sensor.chauffage_moment_journee.state == 'on' %}
            {{ states.input_number.consigne_normal.state | float }}
          {% elif states.binary_sensor.chauffage_moment_soiree.state == 'on' %}
            {{ states.input_number.consigne_confort.state | float }}
          {% else %}
            {{ states.input_number.consigne_eco.state | float }}
          {% endif %}
    - service: climate.turn_on
      target:
        entity_id: climate.chauffage_parents
</pre>



<p>A la sélection du mode auto, on vient vérifier si aucune absence est en cours, les parents vu que c&rsquo;est notre chambre. Lorsque le mode vacance est activé, les parents sont mis en absence également.</p>



<p>Si la condition est respectée, on commence par éteindre le mode de chauffage manuel. Ensuite on récupère la consigne de température correspondant à la plage horaire.</p>



<p>On finit par allumer le chauffage.</p>



<h3 class="wp-block-heading">Modification de la consigne en mode auto</h3>



<p>Maintenant que notre chauffage a bien démarré en mode auto, il faut lui faire modifier sa consigne en fonction du moment de la journée :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Modification de la consigne en fonction de l'heure
- alias: chauffage_modification_consigne_auto
  trigger:
    - platform: state
      entity_id: binary_sensor.chauffage_moment_levee
      from: "off"
      to: "on"
    - platform: state
      entity_id: binary_sensor.chauffage_moment_journee
      from: "off"
      to: "on"
    - platform: state
      entity_id: binary_sensor.chauffage_moment_soiree
      from: "off"
      to: "on"
    - platform: state
      entity_id: binary_sensor.chauffage_moment_nuit
      from: "off"
      to: "on"
  condition:
    - condition: state
      entity_id: input_boolean.chauffage_auto
      state: "on"
  action:
    - service: climate.set_temperature
      data_template:
        entity_id: climate.chauffage_parents
        temperature: >
          {% if states.binary_sensor.chauffage_moment_levee.state == 'on' %}
            {{ states.input_number.consigne_confort.state | float }}
          {% elif states.binary_sensor.chauffage_moment_journee.state == 'on' %}
            {{ states.input_number.consigne_normal.state | float }}
          {% elif states.binary_sensor.chauffage_moment_soiree.state == 'on' %}
            {{ states.input_number.consigne_confort.state | float }}
          {% else %}
            {{ states.input_number.consigne_eco.state | float }}
          {% endif %}
</pre>



<p>Lorsque que le moment de la journée change (en fonction de l&rsquo;état des capteurs binaires créés), nous modifions la consigne en prenant celle correspondant au mode de fonctionnement :</p>



<ul class="wp-block-list"><li>eco pour la nuit</li><li>normal pour la journée</li><li>confort pour le levée et la soirée</li></ul>



<h3 class="wp-block-heading">Démarrage du mode manuel</h3>



<p>Pour ce qui est du mode manuel, voici son script :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># démarre le chauffage manuel si les parents sont présent en fonction du mode de chauffage choisi (eco, normal, confort)
- alias: chauffage_parent_manuel_start
  trigger:
    - platform: state
      entity_id: input_boolean.chauffage_manuel
      from: "off"
      to: "on"
  condition:
    - condition: state
      entity_id: input_boolean.absence_parents
      state: "off"
  action:
    - service: input_boolean.turn_off
      target: 
        entity_id: input_boolean.chauffage_auto
    - service: climate.set_temperature
      data_template:
        entity_id: climate.chauffage_parents
        temperature: "{{ states('input_number.consigne_'+ states('input_select.mode_chauffage')) | float }}"
    - service: climate.turn_on
      target:
        entity_id: climate.chauffage_parents
</pre>



<p>A la mise en route du mode manuel, si il n&rsquo;y pas pas d&rsquo;absence des parents, on commence par éteindre le mode auto.</p>



<p>On récupère la température de consigne correspondante au mode de chauffage sélectionné et on démarre le chauffage.</p>



<h3 class="wp-block-heading">Les arrêts de fonctionnement</h3>



<p>Voilà les deux automations pour l&rsquo;arrêt du chauffage (mode auto et manuel) :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># stoppe le chauffage manuel
- alias: chauffage_parent_manuel_stop
  trigger:
    - platform: state
      entity_id: input_boolean.chauffage_manuel
      from: "on"
      to: "off"
  action:
    - service: climate.turn_off
      target:
        entity_id: climate.chauffage_parents

# stop le chauffage en mode auto
- alias: chauffage_parent_auto_stop
  trigger:
    - platform: state
      entity_id: input_boolean.chauffage_auto
      from: "on"
      to: "off"
  action:
    - service: climate.turn_off
      target:
        entity_id: climate.chauffage_parents</pre>



<p>A présent, toutes nos automatisations fonctionnent.</p>



<h2 class="wp-block-heading">Le tableau de bord</h2>



<p>Commencer par installer le plugin <a href="https://github.com/benct/lovelace-multiple-entity-row" target="_blank" rel="noreferrer noopener">Multiple Entity Row</a>, cela permettra de mettre sur une même ligne plusieurs entités, notamment les heures pour les plages horaires. Rends toi dans <strong>HACS </strong>puis Frontend, recherches et installes<strong> Multiple Entity Row</strong> :</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="924" height="397" src="//i1.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-19.png" alt="" class="wp-image-1199" srcset="https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-19.png?w=924&amp;ssl=1 924w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-19.png?resize=300%2C129&amp;ssl=1 300w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-19.png?resize=768%2C330&amp;ssl=1 768w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-19.png?resize=150%2C64&amp;ssl=1 150w" sizes="(max-width: 900px) 100vw, 900px" /></figure></div>



<h3 class="wp-block-heading">Gestion de la présence</h3>



<p>Créer une première carte en allant sur ton tableau de bord, puis modifier et ajouter une carte manuelle, en mode <strong>YAML</strong>, ajoutes :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">type: entities
entities:
  - entity: input_boolean.vacances
  - entity: input_boolean.absence_parents
  - entity: input_boolean.absence_noemie
  - entity: input_boolean.absence_raphael
state_color: true</pre>



<p>Pour bien comprendre où mettre le script (méthode utilisée pour tous les autres visuels), voici une capture :</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="1001" height="401" src="//i1.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-20.png" alt="" class="wp-image-1203" srcset="https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-20.png?w=1001&amp;ssl=1 1001w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-20.png?resize=300%2C120&amp;ssl=1 300w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-20.png?resize=768%2C308&amp;ssl=1 768w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-20.png?resize=150%2C60&amp;ssl=1 150w" sizes="(max-width: 900px) 100vw, 900px" /></figure></div>



<h3 class="wp-block-heading">Visualisation de l&rsquo;état du thermostat</h3>



<p>On ajoute une seconde carte permettant de voir l&rsquo;état du thermostat ainsi que la température de consigne et la température mesurée mais aussi le statut du chauffage (dans mon cas la prise) :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">type: entities
entities:
  - entity: climate.chauffage_parents
  - entity: switch.prise_chauffage_parent_on_off
state_color: true</pre>



<p>Ce que cela donne :</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="354" height="109" src="//i1.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-22.png" alt="" class="wp-image-1205" srcset="https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-22.png?w=354&amp;ssl=1 354w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-22.png?resize=300%2C92&amp;ssl=1 300w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-22.png?resize=150%2C46&amp;ssl=1 150w" sizes="(max-width: 354px) 100vw, 354px" /></figure></div>



<h3 class="wp-block-heading">Carte des réglages du chauffage</h3>



<p>C&rsquo;est ici que l&rsquo;add-on <strong>Multiple Entity Row</strong> est utilisé (sur les plages horaires) :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">type: entities
title: Réglages chauffage
state_color: true
entities:
  - entity: input_boolean.chauffage_auto
    name: Chauffage automatique
  - type: section
  - entity: input_boolean.chauffage_manuel
    name: Chauffage manuel
  - entity: input_select.mode_chauffage
    name: Mode de chauffage Manuel
  - type: section
  - entity: input_datetime.heure_chauffage_debut_levee
    type: custom:multiple-entity-row
    name: Levée (confort)
    show_state: false
    entities:
      - entity: input_datetime.heure_chauffage_debut_levee
        name: Début
      - entity: input_datetime.heure_chauffage_fin_levee
        name: Fin
  - entity: input_datetime.heure_chauffage_debut_levee
    type: custom:multiple-entity-row
    name: Journée (normal)
    show_state: false
    entities:
      - entity: input_datetime.heure_chauffage_fin_levee
        name: Début
      - entity: input_datetime.heure_chauffage_fin_journee
        name: Fin
  - entity: input_datetime.heure_chauffage_debut_levee
    type: custom:multiple-entity-row
    name: Soirée (confort)
    show_state: false
    entities:
      - entity: input_datetime.heure_chauffage_fin_journee
        name: Début
      - entity: input_datetime.heure_chauffage_fin_soiree
        name: Fin
  - entity: input_datetime.heure_chauffage_debut_levee
    type: custom:multiple-entity-row
    name: Nuit (eco)
    show_state: false
    entities:
      - entity: input_datetime.heure_chauffage_fin_soiree
        name: Début
      - entity: input_datetime.heure_chauffage_debut_levee
        name: Fin
  - type: section
  - entity: input_number.consigne_confort
  - entity: input_number.consigne_normal
  - entity: input_number.consigne_eco
show_header_toggle: false
</pre>



<p>Voici le rendu :</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="354" height="580" src="//i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-21.png" alt="" class="wp-image-1204" srcset="https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-21.png?w=354&amp;ssl=1 354w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-21.png?resize=183%2C300&amp;ssl=1 183w, https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2021/11/image-21.png?resize=92%2C150&amp;ssl=1 92w" sizes="auto, (max-width: 354px) 100vw, 354px" /></figure></div>



<p>Bien entendu, libre à toi d&rsquo;imaginer ton propre tableau de bord.</p>



<h2 class="wp-block-heading">Les futures pistes d&rsquo;amélioration</h2>



<p>N&rsquo;ayant pas de thermomètre extérieur, je n&rsquo;ai pas pu ajouter une condition au démarrage du chauffage en mode automatique en fonction de la température extérieure (avec un bouton pour activer ou désactiver cette option).</p>



<p>Toujours à cause du même manque de matériel, il peut être utile de désactiver le chauffage si une fenêtre ou une porte est ouverte.</p>



<p>Il est également possible de gérer la ventilation en fonction de l&rsquo;humidité (avec une VMC par exemple).</p>



<p>Dans mon automatisation, j&rsquo;ai quelques améliorations à faire, notamment pour éviter de répéter le choix des consignes en créant un sensor que j&rsquo;appelera à la place : </p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{% if states.binary_sensor.chauffage_moment_levee.state == 'on' %}
  {{ states.input_number.consigne_confort.state | float }}
{% elif states.binary_sensor.chauffage_moment_journee.state == 'on' %}
  {{ states.input_number.consigne_normal.state | float }}
{% elif states.binary_sensor.chauffage_moment_soiree.state == 'on' %}
  {{ states.input_number.consigne_confort.state | float }}
{% else %}
  {{ states.input_number.consigne_eco.state | float }}
{% endif %}</pre>



<p>Ce sont des points que je mettrai en place dans un second temps.</p>



<p>Je mettrai à jour cet article au fur et à mesure que je rajouterai les chauffages dans les 2 autres chambres.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Voilà qui est fait, tu es arrivé au bout et j&rsquo;espère que j&rsquo;ai pu répondre à un maximum de tes interrogations, j&rsquo;ai passé beaucoup de temps à mettre en place cette automatisation, internet contenant que des bribes d&rsquo;éléments.</p>



<p>N&rsquo;hésites pas à me faire part de tes commentaires.</p>
<p>L’article <a href="https://programmation.surleweb-france.fr/home-assistant-gestion-avancee-du-chauffage/">Home Assistant, gestion avancée du chauffage</a> est apparu en premier sur <a href="https://programmation.surleweb-france.fr">La programmation sur le web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmation.surleweb-france.fr/home-assistant-gestion-avancee-du-chauffage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1190</post-id>	</item>
	</channel>
</rss>
