{"id":79,"date":"2025-03-30T11:47:57","date_gmt":"2025-03-30T09:47:57","guid":{"rendered":"https:\/\/colline3.house\/?p=79"},"modified":"2025-03-30T14:06:57","modified_gmt":"2025-03-30T12:06:57","slug":"chauffage-existant-comment-je-lai-rendu-plus-intelligent","status":"publish","type":"post","link":"https:\/\/colline3.house\/?p=79","title":{"rendered":"Chauffage existant : comment je l\u2019ai rendu plus intelligent"},"content":{"rendered":"\n<p style=\"text-transform:initial\" class=\"has-custom-transform\">\ud83d\udc47 <a href=\"#english\" data-type=\"internal\" data-id=\"#english\">English version<\/a><\/p>\n\n\n\n<p>Lorsque j\u2019ai emm\u00e9nag\u00e9 dans ma nouvelle maison \u00e0 Namur, j\u2019ai eu la bonne surprise de d\u00e9couvrir une installation de chauffage tout \u00e0 fait op\u00e9rationnelle. Pas de panne, pas de radiateurs froids, et une chaudi\u00e8re fonctionnelle. Bref, rien qui n\u00e9cessitait d\u2019intervention lourde ou de remplacement complet.<\/p>\n\n\n\n<p class=\"has-x-large-font-size\">Mais si tout marchait, rien n\u2019\u00e9tait vraiment optimis\u00e9. L\u2019installation ne b\u00e9n\u00e9ficiait d\u2019aucune automatisation, les vannes thermostatiques \u00e9taient d\u2019un autre \u00e2ge, et la gestion du chauffage reposait essentiellement sur des r\u00e9glages manuels et approximatifs.<\/p>\n\n\n\n<p>Plut\u00f4t que de tout repenser, l\u2019objectif est aujourd\u2019hui de m\u2019adapter \u00e0 l\u2019existant, et d\u2019adapter l\u2019existant \u00e0 mes besoins. En gardant la base en place, j\u2019ai entam\u00e9 une s\u00e9rie de petites am\u00e9liorations : remplacement des vannes, ajout d\u2019un pilotage plus intelligent par pi\u00e8ce, et une couche d\u2019automatisation pour rendre l\u2019ensemble plus confortable et plus r\u00e9actif au quotidien.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--1\">Adapter la chaudi\u00e8re<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228-1024x768.jpeg\" alt=\"\" class=\"wp-image-84\" srcset=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228-1024x768.jpeg 1024w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228-300x225.jpeg 300w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228-768x576.jpeg 768w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ma maison est \u00e9quip\u00e9e d\u2019un chauffage central au gaz, pas id\u00e9al d\u2019un point de vue \u00e9missions de CO\u2082, mais pour l\u2019instant, c\u2019est ce qui est en place\u2026 et \u00e7a fonctionne bien. L\u2019id\u00e9e n\u2019est donc pas (encore) de tout changer, mais de voir comment limiter la consommation \u00e0 court terme, tout en gardant une porte ouverte pour une \u00e9ventuelle conversion vers une \u00e9nergie plus propre \u00e0 moyen ou long terme.<\/p>\n\n\n\n<p>La chaudi\u00e8re en question est une&nbsp;<strong>Vaillant atmoTEC plus<\/strong>, un mod\u00e8le&nbsp;<strong>atmosph\u00e9rique<\/strong>. Contrairement aux chaudi\u00e8res \u00e0 condensation, qui r\u00e9cup\u00e8rent une partie de la chaleur des fum\u00e9es de combustion pour am\u00e9liorer leur rendement, les chaudi\u00e8res atmosph\u00e9riques comme celle-ci br\u00fblent le gaz de mani\u00e8re plus \u00ab simple \u00bb, avec une perte \u00e9nerg\u00e9tique plus importante. Bref, ce n\u2019est pas la plus efficace, mais elle a l\u2019avantage d\u2019\u00eatre relativement neuve et\u2026 surtout d\u00e9j\u00e0 l\u00e0.<\/p>\n\n\n\n<p>Premier constat \u00e0 l\u2019emm\u00e9nagement :&nbsp;<strong>aucun thermostat d\u2019ambiance<\/strong>. En fait, comme la maison \u00e9tait subdivis\u00e9e en un appartement et quatre kots, chaque espace avait ses propres vannes, mais&nbsp;<strong>aucune gestion centralis\u00e9e<\/strong>. Ajoutez \u00e0 cela&nbsp;<strong>l\u2019absence totale de sonde ext\u00e9rieure<\/strong>, et vous obtenez un syst\u00e8me qui chauffe, oui, mais \u00e0 l\u2019aveugle.<\/p>\n\n\n\n<p>Autre d\u00e9tail (plut\u00f4t absurde) : ce type de chaudi\u00e8re a besoin d\u2019avoir&nbsp;<strong>au moins un radiateur ouvert en permanence<\/strong>. Sinon, elle se met en s\u00e9curit\u00e9. Pas super pratique quand on cherche justement \u00e0 mieux contr\u00f4ler la chaleur pi\u00e8ce par pi\u00e8ce\u2026<\/p>\n\n\n\n<p><strong>Premi\u00e8re piste : \u00e9couter la chaudi\u00e8re<\/strong><\/p>\n\n\n\n<p>Pour mieux comprendre ce que fait la chaudi\u00e8re (et pourquoi), je me suis tourn\u00e9 vers&nbsp;<strong><a href=\"https:\/\/github.com\/john30\/ebusd\" data-type=\"link\" data-id=\"https:\/\/github.com\/john30\/ebusd\" target=\"_blank\" rel=\"noreferrer noopener\">ebusd<\/a><\/strong>, un projet open source qui permet de communiquer avec certaines chaudi\u00e8res Vaillant via le bus eBUS. En gros, cela permet de&nbsp;<strong>lire et collecter les donn\u00e9es internes de la chaudi\u00e8re<\/strong>&nbsp;: temp\u00e9rature de l\u2019eau, \u00e9tat de fonctionnement, pressions, etc.<\/p>\n\n\n\n<p>J\u2019ai utilis\u00e9 le chip&nbsp;<strong>eBUS C6 d\u2019Elecrow<\/strong>&nbsp;(<a href=\"https:\/\/www.elecrow.com\/ebus-adapter-stick-c6.html\" target=\"_blank\" rel=\"noreferrer noopener\">disponible ici<\/a>), qui se branche sur le bus eBUS d&rsquo;un c\u00f4t\u00e9 et de l&rsquo;autre ESP32 (donc Wifi). Tr\u00e8s vite, j\u2019ai pu visualiser pas mal d\u2019informations via ebusd. Le souci ?&nbsp;<strong>Lire, oui. Agir, non.<\/strong>&nbsp;Sans un module de contr\u00f4le Vaillant suppl\u00e9mentaire, il est tr\u00e8s difficile de&nbsp;<strong>modifier les consignes ou d\u2019interagir avec la chaudi\u00e8re<\/strong>. Dommage, car \u00e7a limite l\u2019int\u00e9r\u00eat du syst\u00e8me pour une automatisation compl\u00e8te.<\/p>\n\n\n\n<p>Je garde tout de m\u00eame ebusd actif, et il est bien int\u00e9gr\u00e9 dans <strong>Home Assistant<\/strong>, donc peut-\u00eatre que j\u2019exploiterai davantage ces donn\u00e9es \u00e0 l\u2019avenir. Un article plus technique suivra s\u00fbrement l\u00e0-dessus.<\/p>\n\n\n\n<p><strong>Solution retenue : simplicit\u00e9 et efficacit\u00e9<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226-1024x768.jpeg\" alt=\"\" class=\"wp-image-83\" srcset=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226-1024x768.jpeg 1024w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226-300x225.jpeg 300w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226-768x576.jpeg 768w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Module Shelly Mini 1 gen3 install\u00e9 dans la chaudi\u00e8re sur bornes 3 et 4.<\/figcaption><\/figure>\n\n\n\n<p>En attendant, j\u2019ai opt\u00e9 pour une solution&nbsp;<strong>KISS<\/strong>&nbsp;(Keep It Simple, Stupid). Sur la carte m\u00e8re de la chaudi\u00e8re, un connecteur permet de brancher un simple&nbsp;<strong>thermostat on\/off<\/strong> (bornes 3 et 4). J\u2019ai donc c\u00e2bl\u00e9 un petit&nbsp;<strong>Shelly 1 Mini<\/strong>, que je peux activer ou d\u00e9sactiver via Home Assistant. Quand il est \u201con\u201d, la chaudi\u00e8re chauffe (selon sa courbe interne). Quand il est \u201coff\u201d, elle reste au repos.<\/p>\n\n\n\n<p>Ce n\u2019est pas une r\u00e9gulation tr\u00e8s fine \u2014&nbsp;<strong>je ne peux pas modifier la courbe de chauffe<\/strong>, par exemple \u2014 mais c\u2019est largement mieux que rien. Et surtout,&nbsp;<strong>\u00e7a fonctionne de mani\u00e8re fiable et sans prise de t\u00eate<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--2\">Remplacer les vannes : entre attentes et compromis<\/p>\n\n\n\n<p>Au d\u00e9part, je cherchais simplement des&nbsp;<strong>vannes thermostatiques connect\u00e9es en Wi-Fi<\/strong>. Ayant d\u00e9j\u00e0 pas mal de modules Shelly dans la maison, j\u2019esp\u00e9rais secr\u00e8tement une version 2 des vannes&nbsp;<strong>Shelly TRV<\/strong>&nbsp;: quelque chose de fiable, simple \u00e0 int\u00e9grer et connect\u00e9 directement sans hub suppl\u00e9mentaire.<\/p>\n\n\n\n<p>Mais rapidement, je me suis heurt\u00e9 \u00e0 un probl\u00e8me assez classique avec les vannes Wi-Fi :&nbsp;<strong>elles consomment beaucoup de batterie<\/strong>. Et c\u2019est probablement pour \u00e7a qu\u2019on en trouve tr\u00e8s peu sur le march\u00e9, ou qu\u2019elles finissent par \u00eatre abandonn\u00e9es. Une vanne qui doit se reconnecter constamment au r\u00e9seau Wi-Fi, \u00e7a vide les piles en un rien de temps\u2026<\/p>\n\n\n\n<p><strong>L\u2019alternative Shelly : la BLU TRV<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230-1024x768.jpeg\" alt=\"\" class=\"wp-image-85\" srcset=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230-1024x768.jpeg 1024w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230-300x225.jpeg 300w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230-768x576.jpeg 768w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>J\u2019ai finalement patient\u00e9 un peu, et&nbsp;<strong>Shelly a sorti un nouveau mod\u00e8le<\/strong>, la&nbsp;<a href=\"https:\/\/www.shelly.com\/fr\/products\/shelly-blu-trv-single-pack\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>BLU TRV<\/strong><\/a>. C\u2019est une vanne&nbsp;<strong>Bluetooth<\/strong>, mais que l\u2019on peut contr\u00f4ler \u00e0 distance via un&nbsp;<strong>dongle gateway Wi-Fi\/Bluetooth<\/strong>&nbsp;(\u00e9galement propos\u00e9 par Shelly). Les vannes sont aussi compatibles&nbsp;<strong>Zigbee<\/strong>, ce qui ouvre d\u2019autres possibilit\u00e9s d\u2019int\u00e9gration (pas test\u00e9 puisque que pas de Zigbee dans mon cas).<\/p>\n\n\n\n<p>Il faut avouer que les premi\u00e8res versions \u2014 tant des vannes que des gateways \u2014 \u00e9taient un peu capricieuses. Bugs, connexions instables, comportement impr\u00e9visible\u2026 Pas id\u00e9al. Mais&nbsp;<strong>les derni\u00e8res mises \u00e0 jour ont bien stabilis\u00e9 l\u2019ensemble<\/strong>, et aujourd\u2019hui \u00e7a tourne correctement chez moi.<\/p>\n\n\n\n<p><strong>Quelques limites c\u00f4t\u00e9 ergonomie<\/strong><\/p>\n\n\n\n<p>Je dois cependant souligner deux petits d\u00e9fauts d\u2019ergonomie. D\u2019abord,&nbsp;<strong>le syst\u00e8me de commande physique<\/strong>&nbsp;: tout le tour de la vanne tourne pour faire diff\u00e9rents r\u00e9glages selon les mouvements autour du corp de la vanne (sorte d&rsquo;anneau de commande). C\u2019est\u2026 original, mais pas forc\u00e9ment intuitif. Ensuite,&nbsp;<strong>l\u2019affichage<\/strong>&nbsp;: il est situ\u00e9 dans l\u2019axe de la vanne, ce qui le rend illisible dans la majorit\u00e9 de mes configurations, sauf si il s&rsquo;agit d&rsquo;une vanne \u00ab\u00a0\u00e9querre\u00a0\u00bb (avec le module thermostatique qui se met de face).<\/p>\n\n\n\n<p>Dans mon cas, ces limitations sont secondaires :&nbsp;<strong>je n\u2019interagis jamais physiquement avec les vannes<\/strong>. Tout est automatis\u00e9, les temp\u00e9ratures sont g\u00e9r\u00e9es pi\u00e8ce par pi\u00e8ce depuis Home Assistant, et je n\u2019ai pas besoin de tourner quoi que ce soit \u00e0 la main. Mais si vous comptez les utiliser manuellement,&nbsp;<strong>ces points peuvent faire la diff\u00e9rence dans votre choix<\/strong>.<\/p>\n\n\n\n<p>Ce n\u2019est pas le produit parfait, mais pour mon usage \u2014&nbsp;<strong>z\u00e9ro interaction manuelle, tout en automatique<\/strong>&nbsp;\u2014 c\u2019est une solution coh\u00e9rente, int\u00e9gr\u00e9e et stable<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--3\">Une couche d\u2019automatisation pour tout orchestrer<\/p>\n\n\n\n<p>Pour tirer pleinement parti des vannes connect\u00e9es et rendre le syst\u00e8me de chauffage r\u00e9ellement intelligent, j\u2019ai mis en place une&nbsp;<strong>automatisation personnalis\u00e9e dans Home Assistant<\/strong>. L\u2019id\u00e9e est simple : chaque pi\u00e8ce devient&nbsp;<strong>un petit \u00e9cosyst\u00e8me autonome<\/strong>, capable de r\u00e9guler sa temp\u00e9rature selon l\u2019usage r\u00e9el.<\/p>\n\n\n\n<p>Concr\u00e8tement, pour chaque pi\u00e8ce j\u2019utilise :<\/p>\n\n\n\n<p>\u2022&nbsp;une ou plusieurs&nbsp;<strong>vannes thermostatiques connect\u00e9es (<a href=\"https:\/\/www.shelly.com\/fr\/products\/shelly-blu-trv-single-pack\" data-type=\"link\" data-id=\"https:\/\/www.shelly.com\/fr\/products\/shelly-blu-trv-single-pack\" target=\"_blank\" rel=\"noreferrer noopener\">Shelly BLU TRV<\/a>)<\/strong>,<\/p>\n\n\n\n<p>\u2022&nbsp;une&nbsp;<strong>sonde de temp\u00e9rature (<a href=\"https:\/\/www.shelly.com\/fr\/products\/shelly-blu-h-t-mocha\" target=\"_blank\" rel=\"noreferrer noopener\">Shelly BLU H\/T<\/a>)<\/strong>,<\/p>\n\n\n\n<p>\u2022&nbsp;un&nbsp;<strong>capteur d\u2019ouverture<\/strong>&nbsp;de porte ou de fen\u00eatre (<a href=\"https:\/\/www.shelly.com\/fr\/products\/shelly-blu-door-window-white\" data-type=\"link\" data-id=\"https:\/\/www.shelly.com\/fr\/products\/shelly-blu-door-window-white\" target=\"_blank\" rel=\"noreferrer noopener\">Shelly BLU Door\/Window<\/a>),<\/p>\n\n\n\n<p>\u2022&nbsp;et surtout, un&nbsp;<strong>capteur de pr\u00e9sence<\/strong>.<\/p>\n\n\n\n<p>C\u00f4t\u00e9 capteur de pr\u00e9sence, j\u2019utilise ce mod\u00e8le un peu moche mais tr\u00e8s efficace : le&nbsp;<a href=\"https:\/\/www.athom.tech\/blank-1\/human-presence-sensor\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Human Presence Sensor<\/strong>&nbsp;d\u2019Athom**<\/a>. Je reviendrai plus en d\u00e9tail sur ce capteur dans un autre article, mais pour l\u2019instant, retenez qu\u2019il fait bien le job pour&nbsp;<strong>d\u00e9tecter une pr\u00e9sence r\u00e9elle et continue<\/strong>, m\u00eame en cas d\u2019activit\u00e9 faible (lecture, travail, etc.).<\/p>\n\n\n\n<p><strong>Un template Home Assistant pour tout centraliser<\/strong><\/p>\n\n\n\n<p>J\u2019ai opt\u00e9 pour un&nbsp;<strong>blueprint g\u00e9n\u00e9rique<\/strong>, con\u00e7u avec l\u2019aide de l&rsquo;AI, et que j\u2019applique \u00e0 chaque pi\u00e8ce avec quelques param\u00e8tres.<\/p>\n\n\n\n<p>\ud83d\udc49 Disponible ici :&nbsp;<a href=\"https:\/\/github.com\/dafal\/homeassistant_blueprints\/blob\/main\/presence_climate2.yaml\"><strong>presence_climate2.yaml<\/strong><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"674\" src=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-1024x674.png\" alt=\"\" class=\"wp-image-86\" srcset=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-1024x674.png 1024w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-300x197.png 300w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-768x506.png 768w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-1536x1011.png 1536w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-2048x1348.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ce blueprint prend en compte plusieurs conditions pour ajuster la temp\u00e9rature intelligemment.<\/p>\n\n\n\n<p><strong>1. Fonctionnement normal : pr\u00e9sence d\u00e9tect\u00e9e<\/strong><\/p>\n\n\n\n<p>Si une pr\u00e9sence est d\u00e9tect\u00e9e dans une pi\u00e8ce pendant un certain temps (par exemple 10 minutes), la vanne r\u00e8gle automatiquement la temp\u00e9rature sur une valeur de confort (typiquement 21\u00b0C). En cas d\u2019absence prolong\u00e9e (aussi configurable), la temp\u00e9rature redescend \u00e0 une valeur plus basse (par exemple 17\u00b0C).<\/p>\n\n\n\n<p><strong>2. A\u00e9ration ou porte ouverte<\/strong><\/p>\n\n\n\n<p>Si une fen\u00eatre ou une porte reste&nbsp;<strong>ouverte plus de deux minutes<\/strong>, la vanne passe automatiquement \u00e0&nbsp;<strong>4\u00b0C<\/strong>&nbsp;pour ne pas chauffer dans le vide. Une s\u00e9curit\u00e9 utile quand on oublie de fermer une porte (plus personne n&rsquo;oublie de fermer les portes depuis!)ou quand on a\u00e8re une pi\u00e8ce le matin.<\/p>\n\n\n\n<p><strong>3. Pr\u00e9chauffage via calendrier<\/strong><\/p>\n\n\n\n<p>Le blueprint peut aussi s\u2019appuyer sur un&nbsp;<strong>agenda (calendrier Home Assistant)<\/strong>&nbsp;pour lancer le chauffage \u00e0 des moments pr\u00e9cis, avant m\u00eame que quelqu\u2019un ne soit d\u00e9tect\u00e9.<\/p>\n\n\n\n<p>C\u2019est ce que j\u2019utilise dans les&nbsp;<strong>pi\u00e8ces de vie le matin<\/strong>&nbsp;(chauffage qui d\u00e9marre avant le lever), ou dans le&nbsp;<strong>bureau les jours de t\u00e9l\u00e9travail<\/strong>, selon mon emploi du temps. J&rsquo;utilise l&rsquo;agenda ici pour le&nbsp;<strong>pr\u00e9-chauffage<\/strong>, le capteur de pr\u00e9sence prenant ensuite le relais pour maintenir ou couper la chauffe selon la r\u00e9alit\u00e9 du moment.<\/p>\n\n\n\n<p><strong>4. Mode absence forc\u00e9e<\/strong><\/p>\n\n\n\n<p>Un capteur binaire (virtuel ou physique) peut aussi \u00eatre utilis\u00e9 pour&nbsp;<strong>forcer une temp\u00e9rature d\u2019absence<\/strong>.  Typiquement sc\u00e8ne \u00ab\u00a0absence\u00a0\u00bb ou \u00ab\u00a0nuit\u00a0\u00bb.<\/p>\n\n\n\n<p><strong>Un syst\u00e8me souple, fiable et autonome<\/strong><\/p>\n\n\n\n<p>Chaque pi\u00e8ce suit donc sa propre logique, tout en restant&nbsp;<strong>int\u00e9gr\u00e9e dans l\u2019\u00e9cosyst\u00e8me Home Assistant<\/strong>. Je peux ajuster les param\u00e8tres \u00e0 la vol\u00e9e, surveiller les temp\u00e9ratures et les consignes, ou forcer des exceptions si besoin. Et surtout,&nbsp;<strong>plus besoin de toucher aux vannes<\/strong>&nbsp;: tout est automatis\u00e9, intelligent, et \u00e9conome..<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--4\">Contr\u00f4ler la chaudi\u00e8re et un interrupteur g\u00e9n\u00e9ral pour couper tout<\/p>\n\n\n\n<p>En compl\u00e9ment du syst\u00e8me pi\u00e8ce par pi\u00e8ce, j\u2019ai mis en place une&nbsp;<strong>automatisation suppl\u00e9mentaire<\/strong>&nbsp;qui observe l\u2019\u00e9tat de&nbsp;<strong>toutes les vannes thermostatiques<\/strong>. L\u2019id\u00e9e est simple :<\/p>\n\n\n\n<p>\u2022&nbsp;Si&nbsp;<strong>au moins une vanne est ouverte \u00e0 plus de 25\u202f%<\/strong>,&nbsp;<strong>la chaudi\u00e8re s\u2019allume<\/strong>.<\/p>\n\n\n\n<p>\u2022&nbsp;Si&nbsp;<strong>aucune vanne ne d\u00e9passe ce seuil<\/strong>, le&nbsp;<strong>chauffage reste coup\u00e9<\/strong>.<\/p>\n\n\n\n<p>Pourquoi 25\u202f% ? Parce que les\u00a0<strong>la position des corps des vannes n&rsquo;est pas toujours tr\u00e8s pr\u00e9cise<\/strong>. \u00c0 un seuil plus bas, la chaudi\u00e8re s\u2019arr\u00eatait parfois car l&rsquo;eau ne pouvais circuler.<\/p>\n\n\n\n<p>Voici l\u2019automatisation en question, dans Home Assistant :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"alias: Activation chaudi\u00e8re\ntriggers:\n  - platform: state\n    entity_id:\n      - sensor.valve_position_maximum\n  - platform: state\n    entity_id:\n      - input_boolean.heating\nactions:\n  - if:\n      - condition: numeric_state\n        entity_id: sensor.valve_position_maximum\n        above: 25\n      - condition: state\n        entity_id: input_boolean.heating\n        state: &quot;on&quot;\n    then:\n      - service: switch.turn_on\n        entity_id: switch.chaudiere\n    else:\n      - service: switch.turn_off\n        entity_id: switch.chaudiere\nmode: single\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8FBCBB\">alias<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Activation chaudi\u00e8re<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">triggers<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">platform<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">sensor.valve_position_maximum<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">platform<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">input_boolean.heating<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">actions<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">if<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">condition<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">numeric_state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">sensor.valve_position_maximum<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">above<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">25<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">condition<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">input_boolean.heating<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">state<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">on<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">then<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">service<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">switch.turn_on<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">switch.chaudiere<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">else<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">service<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">switch.turn_off<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">switch.chaudiere<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">mode<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">single<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Dernier \u00e9l\u00e9ment de l\u2019installation :&nbsp;<strong>un interrupteur g\u00e9n\u00e9ral pour le chauffage<\/strong>. C\u2019est un&nbsp;<strong>interrupteur virtuel dans Home Assistant<\/strong>&nbsp;que j\u2019active en cas de vacances, ou quand la belle saison revient. Lorsqu\u2019il est d\u00e9sactiv\u00e9, il&nbsp;<strong>force le module Shelly de la chaudi\u00e8re \u00e0 rester \u00e9teint<\/strong>, quelle que soit la demande venant des pi\u00e8ces.<\/p>\n\n\n\n<p>C\u2019est une s\u00e9curit\u00e9 simple, mais efficace, pour \u00e9viter toute consommation inutile quand il n\u2019y a vraiment plus besoin de chauffer.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>En r\u00e9sum\u00e9<\/strong><\/p>\n\n\n\n<p>Sans changer toute l\u2019installation, j\u2019ai r\u00e9ussi \u00e0&nbsp;<strong>moderniser le chauffage pi\u00e8ce par pi\u00e8ce<\/strong>, en ajoutant des capteurs, des vannes intelligentes, et une bonne dose d\u2019automatisation. Apr\u00e8s quelques semaine de tests, l\u2019ensemble est <strong>fiable, r\u00e9actif, \u00e9conome<\/strong>\u2026 et surtout adapt\u00e9 \u00e0 mes usages r\u00e9els. Tout cela avec un budget raisonnable, sans devoir tout remplacer et surtout avec aucune interaction manuelle.<\/p>\n\n\n\n<p>D\u2019autres ajustements viendront peut-\u00eatre, notamment au niveau de&nbsp;<strong>l\u2019interaction avec la chaudi\u00e8re via eBUS<\/strong>, ou de <strong>l\u2019optimisation de certaines logiques dans Home Assistant<\/strong>. Mais pour l\u2019instant, l\u2019ensemble fait le job \u2014 et bien.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"is-style-text-subtitle has-xx-large-font-size is-style-text-subtitle--5\" id=\"english\">Existing Heating System: How I Made It Smarter<\/p>\n\n\n\n<p>When I moved into my new house, I was pleasantly surprised to find a&nbsp;<strong>fully operational heating system<\/strong>. No breakdowns, no cold radiators, and a boiler that worked just fine. In short, nothing that required heavy intervention or a complete overhaul.<\/p>\n\n\n\n<p class=\"has-x-large-font-size\">But while everything worked, nothing was really optimised. The system had&nbsp;zero automation, the thermostatic valves were from another era, and heating control relied entirely on&nbsp;manual and imprecise adjustments.<\/p>\n\n\n\n<p>Rather than redesigning the whole thing, the idea is to&nbsp;<strong>adapt to the existing setup, and adapt it to my needs<\/strong>. By keeping the basic system intact, I started a series of small upgrades:&nbsp;<strong>replacing the valves<\/strong>, adding smarter&nbsp;<strong>room-by-room control<\/strong>, and a&nbsp;<strong>layer of automation<\/strong>&nbsp;to make the system more comfortable and responsive day to day.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--6\">Boiler: adapting the core<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228-1024x768.jpeg\" alt=\"\" class=\"wp-image-84\" srcset=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228-1024x768.jpeg 1024w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228-300x225.jpeg 300w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228-768x576.jpeg 768w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0228.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>My home is equipped with a&nbsp;<strong>gas central heating system<\/strong>&nbsp;\u2014 not great for CO\u2082 emissions, but for now, it\u2019s what\u2019s installed\u2026 and it works well. So the goal isn\u2019t (yet) to change everything, but to&nbsp;<strong>reduce consumption in the short term<\/strong>, while keeping options open for switching to a cleaner energy source in the future.<\/p>\n\n\n\n<p>The boiler is a&nbsp;<strong>Vaillant atmoTEC plus<\/strong>, an&nbsp;<strong>atmospheric<\/strong>&nbsp;model. Unlike&nbsp;<strong>condensing boilers<\/strong>, which recover heat from exhaust gases to improve efficiency, atmospheric boilers burn gas more \u201csimply\u201d, resulting in greater energy loss. Not ideal \u2014 but the unit is relatively new and, above all, already there.<\/p>\n\n\n\n<p>First observation when moving in:&nbsp;<strong>no central thermostat<\/strong>. Since the house was previously divided into one apartment and four student studios, each had its own manual valves, but&nbsp;<strong>no central management<\/strong>. Add to that the&nbsp;<strong>complete lack of an outdoor temperature sensor<\/strong>, and you get a system that heats \u2014 yes \u2014 but blindly.<\/p>\n\n\n\n<p>Another (rather absurd) detail: this type of boiler&nbsp;<strong>requires at least one radiator to stay open<\/strong>&nbsp;at all times. Otherwise, the boiler goes into safety mode. Not very practical when you\u2019re trying to improve room-by-room heating control\u2026<\/p>\n\n\n\n<p class=\"is-style-default\"><strong>Step one: listening to the boiler<\/strong><\/p>\n\n\n\n<p>To better understand what the boiler was doing (and why), I looked into&nbsp;<strong><a href=\"https:\/\/github.com\/john30\/ebusd\" target=\"_blank\" rel=\"noreferrer noopener\">ebusd<\/a><\/strong>, an open-source project that allows communication with some Vaillant boilers via the&nbsp;<strong>eBUS<\/strong>&nbsp;protocol. In short, it lets you&nbsp;<strong>read and collect internal data<\/strong>from the boiler: water temperature, operating status, pressure, etc.<\/p>\n\n\n\n<p>I used the&nbsp;<strong>eBUS C6 adapter from Elecrow<\/strong>&nbsp;(available&nbsp;<a href=\"https:\/\/www.elecrow.com\/ebus-adapter-stick-c6.html\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>), which connects to the eBUS line on one end and to an ESP32 (Wi-Fi capable) on the other. Pretty quickly, I was able to visualize a lot of boiler data via ebusd. The issue?&nbsp;<strong>Reading data is easy. Controlling the boiler is not<\/strong>. Without an additional Vaillant control module, it\u2019s very difficult to&nbsp;<strong>change settings or send commands<\/strong>. Too bad \u2014 it limits the system\u2019s automation potential.<\/p>\n\n\n\n<p>Still, I keep&nbsp;<strong>ebusd running and integrated with Home Assistant<\/strong>, so I may explore it more in the future. A dedicated technical article will likely follow.<\/p>\n\n\n\n<p class=\"is-style-default\"><strong>Simple and Effective: The Solution I Chose<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226-1024x768.jpeg\" alt=\"\" class=\"wp-image-83\" srcset=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226-1024x768.jpeg 1024w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226-300x225.jpeg 300w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226-768x576.jpeg 768w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0226.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Shelly Mini 1 gen3 installed  in the heating boiler mother board ( 3 and 4 pin).<\/figcaption><\/figure>\n\n\n\n<p>In the meantime, I went for a&nbsp;<strong>KISS approach<\/strong>&nbsp;(Keep It Simple, Stupid). The boiler\u2019s motherboard includes a connector for a&nbsp;<strong>basic on\/off thermostat<\/strong> (pin 3 and 4). So I hooked up a&nbsp;<strong>Shelly 1 Mini<\/strong>, which I can toggle via Home Assistant. When it\u2019s \u201con\u201d, the boiler heats (based on its internal curve). When it\u2019s \u201coff\u201d, it stays idle.<\/p>\n\n\n\n<p>It\u2019s not the most precise regulation \u2014 I can\u2019t modify the heat curve, for example \u2014 but it\u2019s&nbsp;<strong>far better than nothing<\/strong>. And above all,&nbsp;<strong>it works reliably and without headaches<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--7\">Replacing the Valves: Expectations vs. Reality<\/p>\n\n\n\n<p>At first, I was looking for&nbsp;<strong>Wi-Fi-connected thermostatic valves<\/strong>. Since I already use many&nbsp;<strong>Shelly modules<\/strong>&nbsp;in the house, I was hoping for a second-generation&nbsp;<strong>Shelly TRV<\/strong>: something reliable, easy to integrate, and working without a hub.<\/p>\n\n\n\n<p>But I quickly ran into the usual problem with Wi-Fi valves:&nbsp;<strong>they drain batteries<\/strong>. That\u2019s probably why they\u2019re rare \u2014 or end up discontinued. A valve constantly reconnecting to Wi-Fi burns through batteries in no time\u2026<\/p>\n\n\n\n<p><strong>The Shelly Alternative: BLU TRV<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230-1024x768.jpeg\" alt=\"\" class=\"wp-image-85\" srcset=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230-1024x768.jpeg 1024w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230-300x225.jpeg 300w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230-768x576.jpeg 768w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/IMG_0230.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Eventually, I waited a bit, and&nbsp;<strong>Shelly released a new model<\/strong>, the&nbsp;<strong><a href=\"https:\/\/www.shelly.com\/products\/shelly-blu-trv-single-pack\" target=\"_blank\" rel=\"noreferrer noopener\">BLU TRV<\/a><\/strong>. It\u2019s a&nbsp;<strong>Bluetooth valve<\/strong>, remotely controllable via a&nbsp;<strong>Wi-Fi\/Bluetooth gateway dongle<\/strong>&nbsp;(also from Shelly). The valves are also&nbsp;<strong>Zigbee-compatible<\/strong>, which opens up other integration options (not tested here \u2014 I don\u2019t use Zigbee).<\/p>\n\n\n\n<p>To be fair, the first firmware versions (both valves and gateways) were&nbsp;<strong>a bit buggy<\/strong>: unstable connections, weird behaviors\u2026 not great. But&nbsp;<strong>recent updates have stabilized everything<\/strong>, and the system is now working smoothly for me.<\/p>\n\n\n\n<p><strong>A Few Ergonomic Limitations<\/strong><\/p>\n\n\n\n<p>That said, two small downsides worth mentioning:<\/p>\n\n\n\n<p>\u2022&nbsp;The&nbsp;<strong>physical control ring<\/strong>: the entire outer shell of the valve rotates to change settings depending on how you move it. It\u2019s\u2026 unique, but not exactly intuitive.<\/p>\n\n\n\n<p>\u2022&nbsp;The&nbsp;<strong>display orientation<\/strong>: it\u2019s aligned with the valve\u2019s axis, which makes it unreadable in most cases \u2014 unless your valve is mounted facing forward (like with angled radiator connections).<\/p>\n\n\n\n<p>Personally,&nbsp;<strong>these limitations don\u2019t matter<\/strong>: I&nbsp;<strong>never interact with the valves manually<\/strong>. Everything is automated via Home Assistant, and I don\u2019t need to touch a thing. But if you\u2019re planning to use them manually,&nbsp;<strong>this could be a dealbreaker<\/strong>.<\/p>\n\n\n\n<p>It\u2019s not a perfect product, but for my use \u2014&nbsp;<strong>fully automated, no manual interaction<\/strong>&nbsp;\u2014 it\u2019s a solid, integrated and stable solution.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--8\">A Layer of Automation to Orchestrate It All<\/p>\n\n\n\n<p>To fully leverage the smart valves and make the heating system truly intelligent, I set up&nbsp;<strong>custom automation in Home Assistant<\/strong>. The idea: each room becomes&nbsp;<strong>a mini-autonomous climate zone<\/strong>, adjusting temperature based on actual usage.<\/p>\n\n\n\n<p>For each room, I use:<\/p>\n\n\n\n<p>\u2022&nbsp;one or more&nbsp;<strong><a href=\"https:\/\/www.shelly.com\/products\/shelly-blu-trv-single-pack\" target=\"_blank\" rel=\"noreferrer noopener\">Shelly BLU TRV<\/a> thermostatic valves<\/strong>,<\/p>\n\n\n\n<p>\u2022&nbsp;a&nbsp;<strong>temperature sensor (<a href=\"https:\/\/www.shelly.com\/products\/shelly-blu-h-t-mocha\" data-type=\"link\" data-id=\"https:\/\/www.shelly.com\/products\/shelly-blu-h-t-mocha\" target=\"_blank\" rel=\"noreferrer noopener\">Shelly BLU HT<\/a>)<\/strong>,<\/p>\n\n\n\n<p>\u2022&nbsp;a&nbsp;<strong>door or window sensor (<a href=\"https:\/\/www.shelly.com\/products\/shelly-blu-door-window-white\" data-type=\"link\" data-id=\"https:\/\/www.shelly.com\/products\/shelly-blu-door-window-white\" target=\"_blank\" rel=\"noreferrer noopener\">Shelly BLU Window\/Door<\/a>)<\/strong>,<\/p>\n\n\n\n<p>\u2022&nbsp;and most importantly, a&nbsp;<strong>presence sensor<\/strong>.<\/p>\n\n\n\n<p>For presence detection, I use this slightly ugly but very effective device: the&nbsp;<a href=\"https:\/\/www.athom.tech\/blank-1\/human-presence-sensor\"><strong>Human Presence Sensor from Athom<\/strong><\/a>. I\u2019ll go deeper into it in another article, but for now just know that&nbsp;<strong>it does a great job detecting real, continuous presence<\/strong>&nbsp;\u2014 even during quiet activities like reading or working.<\/p>\n\n\n\n<p><strong>One Automation Template to Rule Them All<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"674\" src=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-1024x674.png\" alt=\"\" class=\"wp-image-86\" srcset=\"https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-1024x674.png 1024w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-300x197.png 300w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-768x506.png 768w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-1536x1011.png 1536w, https:\/\/colline3.house\/wp-content\/uploads\/2025\/03\/image-2048x1348.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Instead of building a different automation for every room, I created a&nbsp;<strong>generic blueprint<\/strong>&nbsp;(with the help of ChatGPT) and apply it to each zone with a few parameters.<\/p>\n\n\n\n<p>\ud83d\udc49 Available here:&nbsp;<a href=\"https:\/\/github.com\/dafal\/homeassistant_blueprints\/blob\/main\/presence_climate2.yaml\"><strong>presence_climate2.yaml<\/strong><\/a><\/p>\n\n\n\n<p>The blueprint takes several scenarios into account to&nbsp;<strong>intelligently control the heating<\/strong>:<\/p>\n\n\n\n<p><strong>1. Normal behavior: presence detected<\/strong><\/p>\n\n\n\n<p>If presence is detected for a certain time (e.g., 10 minutes), the valve sets the&nbsp;<strong>comfort temperature<\/strong>&nbsp;(e.g., 21\u00b0C). After extended absence, it lowers the temperature to an&nbsp;<strong>energy-saving value<\/strong>&nbsp;(e.g., 17\u00b0C).<\/p>\n\n\n\n<p><strong>2. Window or door open<\/strong><\/p>\n\n\n\n<p>If a window or door is&nbsp;<strong>left open for more than 2 minutes<\/strong>, the valve switches to&nbsp;<strong>4\u00b0C<\/strong>&nbsp;to avoid heating into thin air. A simple but effective safeguard. (Since I implemented this\u2026 no one forgets to close doors anymore!)<\/p>\n\n\n\n<p><strong>3. Pre-heating via calendar<\/strong><\/p>\n\n\n\n<p>The blueprint can use a&nbsp;<strong>Home Assistant calendar<\/strong>&nbsp;to preheat a room before someone is even present.<\/p>\n\n\n\n<p>I use this in&nbsp;<strong>living spaces in the morning<\/strong>&nbsp;(heating kicks in before we wake up), and in the&nbsp;<strong>home office on work-from-home days<\/strong>. The calendar handles the&nbsp;<strong>pre-heating<\/strong>, while the presence sensor takes over for fine-tuned control.<\/p>\n\n\n\n<p><strong>4. Forced absence mode<\/strong><\/p>\n\n\n\n<p>A virtual or physical binary sensor can&nbsp;<strong>enforce absence temperature<\/strong>, useful for \u201caway\u201d or \u201cnight\u201d modes.<\/p>\n\n\n\n<p><strong>A Flexible, Reliable, Autonomous System<\/strong><\/p>\n\n\n\n<p>Each room follows its own logic while remaining&nbsp;<strong>fully integrated in the Home Assistant ecosystem<\/strong>. I can adjust thresholds on the fly, monitor temperatures and settings, or apply exceptions when needed. And best of all:&nbsp;<strong>no need to touch the valves<\/strong>&nbsp;\u2014 it\u2019s all automatic, smart, and energy-efficient.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--9\">Controlling the Boiler and a Master Switch to Shut Everything Down<\/p>\n\n\n\n<p>In addition to the room-by-room setup, I\u2019ve added a&nbsp;<strong>supplementary automation<\/strong>&nbsp;that monitors the&nbsp;<strong>position of all thermostatic valves<\/strong>. The idea is simple:<\/p>\n\n\n\n<p>\u2022&nbsp;If&nbsp;<strong>at least one valve is open more than 25%<\/strong>, the&nbsp;<strong>boiler is turned on<\/strong>.<\/p>\n\n\n\n<p>\u2022&nbsp;If&nbsp;<strong>none of the valves exceed that threshold<\/strong>, the&nbsp;<strong>heating stays off<\/strong>.<\/p>\n\n\n\n<p>Why 25%? Because\u00a0<strong>valve body position aren\u2019t always perfectly accurate<\/strong>. With a lower threshold, the boiler would sometimes shut off  because water cannot circulate.<\/p>\n\n\n\n<p>Here\u2019s the automation in Home Assistant:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"alias: Activation chaudi\u00e8re\ntriggers:\n  - platform: state\n    entity_id:\n      - sensor.valve_position_maximum\n  - platform: state\n    entity_id:\n      - input_boolean.heating\nactions:\n  - if:\n      - condition: numeric_state\n        entity_id: sensor.valve_position_maximum\n        above: 25\n      - condition: state\n        entity_id: input_boolean.heating\n        state: &quot;on&quot;\n    then:\n      - service: switch.turn_on\n        entity_id: switch.chaudiere\n    else:\n      - service: switch.turn_off\n        entity_id: switch.chaudiere\nmode: single\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8FBCBB\">alias<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Activation chaudi\u00e8re<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">triggers<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">platform<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">sensor.valve_position_maximum<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">platform<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">input_boolean.heating<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">actions<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">if<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">condition<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">numeric_state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">sensor.valve_position_maximum<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">above<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">25<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">condition<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">input_boolean.heating<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">state<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">on<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">then<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">service<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">switch.turn_on<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">switch.chaudiere<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">else<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">service<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">switch.turn_off<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">entity_id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">switch.chaudiere<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">mode<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">single<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The final piece of the setup is a&nbsp;<strong>master switch for the heating system<\/strong>. It\u2019s a&nbsp;<strong>virtual switch in Home Assistant<\/strong>&nbsp;that I toggle when we go on holiday or once the warm season arrives. When it\u2019s off, it&nbsp;<strong>forces the Shelly switch on the boiler to stay off<\/strong>, no matter what any room might be asking for.<\/p>\n\n\n\n<p>It\u2019s a&nbsp;<strong>simple but effective safeguard<\/strong>&nbsp;to avoid any unnecessary heating when it\u2019s clearly no longer needed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--10\">In Summary<\/p>\n\n\n\n<p>Without replacing the entire system, I\u2019ve managed to&nbsp;<strong>modernize my heating setup room by room<\/strong>, adding sensors, smart valves, and a healthy dose of automation. After a few weeks of testing, it\u2019s proving to be&nbsp;<strong>reliable, responsive, and energy-efficient<\/strong>&nbsp;\u2014 all tailored to my real-life usage.<\/p>\n\n\n\n<p>And all this with a&nbsp;<strong>reasonable budget<\/strong>, no major changes, and <strong>zero manual interaction<\/strong>.<\/p>\n\n\n\n<p>More refinements may come later, especially in terms of&nbsp;<strong>eBUS integration<\/strong>&nbsp;or&nbsp;<strong>automation logic optimisation in Home Assistant<\/strong>. But for now, the system&nbsp;<strong>just works \u2014 and works well<\/strong>.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsque j\u2019ai emm\u00e9nag\u00e9 dans ma nouvelle maison \u00e0 Namur, j\u2019ai eu la bonne surprise de d\u00e9couvrir une installation de chauffage tout \u00e0 fait op\u00e9rationnelle. Pas de panne, pas de radiateurs froids, et une chaudi\u00e8re fonctionnelle. Bref, rien qui n\u00e9cessitait d\u2019intervention lourde ou de remplacement complet.<\/p>\n<p>Mais si tout marchait, rien n\u2019\u00e9tait vraiment optimis\u00e9. L\u2019installation ne b\u00e9n\u00e9ficiait d\u2019aucune automatisation, les vannes thermostatiques \u00e9taient d\u2019un autre \u00e2ge, et la gestion du chauffage reposait essentiellement sur des r\u00e9glages manuels et approximatifs.<\/p>\n","protected":false},"author":1,"featured_media":86,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","footnotes":""},"categories":[22],"tags":[28,27,29,30],"class_list":["post-79","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-maison","tag-chauffage","tag-heating","tag-home-assistant","tag-shelly"],"_links":{"self":[{"href":"https:\/\/colline3.house\/index.php?rest_route=\/wp\/v2\/posts\/79","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/colline3.house\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/colline3.house\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/colline3.house\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/colline3.house\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=79"}],"version-history":[{"count":9,"href":"https:\/\/colline3.house\/index.php?rest_route=\/wp\/v2\/posts\/79\/revisions"}],"predecessor-version":[{"id":97,"href":"https:\/\/colline3.house\/index.php?rest_route=\/wp\/v2\/posts\/79\/revisions\/97"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/colline3.house\/index.php?rest_route=\/wp\/v2\/media\/86"}],"wp:attachment":[{"href":"https:\/\/colline3.house\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=79"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/colline3.house\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=79"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/colline3.house\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}