{"id":3198,"date":"2024-09-01T19:28:51","date_gmt":"2024-09-01T17:28:51","guid":{"rendered":"https:\/\/domo.rem81.com\/?p=3198"},"modified":"2026-08-28T17:23:14","modified_gmt":"2026-08-28T15:23:14","slug":"ha-gestion-complete-dune-piscine-avec-esp32-et-esphome","status":"publish","type":"post","link":"https:\/\/domo.rem81.com\/index.php\/2024\/09\/01\/ha-gestion-complete-dune-piscine-avec-esp32-et-esphome\/","title":{"rendered":"HA-Gestion Compl\u00e8te d\u2019une Piscine avec ESP32 et ESPHome"},"content":{"rendered":"\n\n\n\n<h1 class=\"wp-block-heading\">Intro<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Dans un article <a href=\"https:\/\/domo.rem81.com\/index.php\/2022\/02\/02\/ha-gestion-piscine-1-filtration-avec-appdaemon-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">pr\u00e9c\u00e9dent<\/a>, je vous pr\u00e9sentais un module de gestion de la filtration et traitement d&rsquo;une piscine d\u00e9velopp\u00e9 sous APP DAEMON. J&rsquo;ai depuis, pour simplifier la mise en oeuvre, migr\u00e9 vers ESP Home. Je vous invite quand m\u00eame \u00e0 le parcourir, tout n&rsquo;est pas \u00e0 jeter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans ce nouveau projet, j\u2019ai d\u00e9velopp\u00e9 une solution compl\u00e8te pour automatiser la gestion de ma piscine \u00e0 l\u2019aide d\u2019un ESP32 programm\u00e9 avec ESPHome. Ce syst\u00e8me contr\u00f4le la filtration, la r\u00e9gulation du pH et du chlore, le niveau d\u2019eau, le volet roulant, et m\u00eame une protection hors gel, le tout int\u00e9gr\u00e9 \u00e0 Home Assistant. Voici les d\u00e9tails de cette r\u00e9alisation, du mat\u00e9riel au code, pour ceux qui voudraient s\u2019en inspirer !<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Update:<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>28\/08\/2026:\n<ul class=\"wp-block-list\">\n<li>Alignement de l&rsquo;article sur le code actuel (pH, chlore, appoint d&rsquo;eau, couverture flottante, mesure de pression)<\/li>\n\n\n\n<li>Passage du calcul chlore en ppm au pilotage r\u00e9el (Auto Volume \/ Auto ORP)<\/li>\n\n\n\n<li>Correction du facteur et de la dur\u00e9e max d&rsquo;injection pH (50%, 380s)<\/li>\n\n\n\n<li>Correction des d\u00e9lais r\u00e9els de la couverture flottante (1s, 20s) et ajout du mode \u00ab\u00a0At_f\u00a0\u00bb<\/li>\n\n\n\n<li>Correction du bug de seuil de pression (1.5 bar) et r\u00e9activation de la calibration du capteur<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>09\/06\/2025:\n<ul class=\"wp-block-list\">\n<li>Suppression des {&lsquo;$device_name} dans les d\u00e9finitions d&rsquo;entit\u00e9s (simplification des noms)<\/li>\n\n\n\n<li>S\u00e9paration du module \u00ab\u00a0mesure_pression\u00a0\u00bb du module principal<\/li>\n\n\n\n<li>Ajout compteur de litres dans ph et chlore<\/li>\n\n\n\n<li>Mise \u00e0 jour du sch\u00e9ma (Brochage ADS1115)<br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>21\/05\/2025:\n<ul class=\"wp-block-list\">\n<li>refonte du programme: S\u00e9paration des fichiers ph, chlore, Appoint_eau, gestion volet. Cela permet de les installer uniquement si n\u00e9cessaire.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>18\/05\/2025: \n<ul class=\"wp-block-list\">\n<li>Int\u00e9gration d&rsquo;une fonction de conversion d&rsquo;un int en  HH:MM:SS<\/li>\n\n\n\n<li>Refonte de la r\u00e9gulation pH<\/li>\n\n\n\n<li>Refonte de l&rsquo;injection Chlore<\/li>\n\n\n\n<li>Ajout d&rsquo;un script de pilotage de la couverture flottante<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Objectif du Projet<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019id\u00e9e \u00e9tait de centraliser et d\u2019automatiser toutes les fonctions essentielles de ma piscine (volume : 50 m\u00b3) :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Filtration<\/strong> : adapter la dur\u00e9e en fonction de la temp\u00e9rature de l\u2019eau, avec plusieurs modes (Palier, Classique, Abaque, Horaire).<\/li>\n\n\n\n<li><strong>R\u00e9gulation chimique<\/strong> : maintenir le pH et le chlore \u00e0 des niveaux cibles via des pompes doseuses.<\/li>\n\n\n\n<li><strong>Niveau d\u2019eau<\/strong> : g\u00e9rer l\u2019appoint automatiquement avec une \u00e9lectrovanne.<\/li>\n\n\n\n<li><strong>Volet roulant<\/strong> : ouverture\/fermeture via relais.<\/li>\n\n\n\n<li><strong>S\u00e9curit\u00e9<\/strong> : surveiller la pression du filtre, le dosage du chlore liquide, et activer un mode hors gel en hiver.<\/li>\n\n\n\n<li><strong>Monitoring<\/strong> : notifications Telegram, journalisation locale des \u00e9v\u00e9nements, et affichage local sur un \u00e9cran LCD.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le tout repose sur une carte ESP32 et un circuit imprim\u00e9 maison pour simplifier les raccordements.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Mat\u00e9riel Utilis\u00e9<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Carte ESP32<\/strong> : J\u2019ai choisi une carte avec 8 relais int\u00e9gr\u00e9s, disponible sur <a href=\"https:\/\/fr.aliexpress.com\/item\/1005003999413945.html?spm=a2g0o.productlist.main.1.4a111bceOzplYO&amp;algo_pvid=4613c13a-4ea3-4ac3-ac96-385655633748&amp;algo_exp_id=4613c13a-4ea3-4ac3-ac96-385655633748-0&amp;pdp_ext_f=%7B%22order%22%3A%2265%22%2C%22eval%22%3A%221%22%7D&amp;pdp_npi=4%40dis%21EUR%2115.29%2115.29%21%21%2117.20%2117.20%21%40211b876717506132233944049ee6a7%2112000033558811727%21sea%21FR%21833459399%21X&amp;curPageLogUid=ecgq83LwQUCD&amp;utparam-url=scene%3Asearch%7Cquery_from%3A\" data-type=\"link\" data-id=\"https:\/\/fr.aliexpress.com\/item\/1005003999413945.html?spm=a2g0o.productlist.main.1.4a111bceOzplYO&amp;algo_pvid=4613c13a-4ea3-4ac3-ac96-385655633748&amp;algo_exp_id=4613c13a-4ea3-4ac3-ac96-385655633748-0&amp;pdp_ext_f=%7B%22order%22%3A%2265%22%2C%22eval%22%3A%221%22%7D&amp;pdp_npi=4%40dis%21EUR%2115.29%2115.29%21%21%2117.20%2117.20%21%40211b876717506132233944049ee6a7%2112000033558811727%21sea%21FR%21833459399%21X&amp;curPageLogUid=ecgq83LwQUCD&amp;utparam-url=scene%3Asearch%7Cquery_from%3A\" target=\"_blank\" rel=\"noreferrer noopener\">AliExpress<\/a>. Elle offre assez de sorties pour piloter la pompe de filtration, les pompes doseuses, l\u2019\u00e9lectrovanne, et le volet.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"571\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/06\/image.png\" alt=\"\" class=\"wp-image-3200\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/06\/image.png 960w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/06\/image-300x178.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/06\/image-768x457.png 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Circuit Imprim\u00e9 Personnalis\u00e9<\/strong> : Con\u00e7u pour connecter facilement les capteurs (temp\u00e9rature, pH, pression) et les actionneurs via des borniers.<\/li>\n\n\n\n<li><strong>Capteurs<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Sonde Dallas DS18B20 (temp\u00e9rature eau).<\/li>\n\n\n\n<li>Un module mesure de ph&nbsp;<a href=\"https:\/\/atlas-scientific.com\/embedded-solutions\/ezo-ph-circuit\/\" target=\"_blank\" rel=\"noreferrer noopener\">EZO<\/a><\/li>\n\n\n\n<li>Une sonde pH&nbsp;<a href=\"https:\/\/atlas-scientific.com\/probes\/consumer-grade-ph-probe\/\" target=\"_blank\" rel=\"noreferrer noopener\">EZO<\/a>. J\u2019utilise celle ci mais il existe des mod\u00e8les compatibles industriels beaucoup plus chers et des mod\u00e8les chinois beaucoup moins chers, c\u2019est selon l\u2019importance et le budget que vous accorderez \u00e0 la fiabilit\u00e9 et la p\u00e9rennit\u00e9 de la mesure.<\/li>\n\n\n\n<li>Un module d\u2019isolation galvanique&nbsp;<a href=\"https:\/\/atlas-scientific.com\/carrier-boards\/electrically-isolated-ezo-carrier-board-gen-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">EZO<\/a>.<\/li>\n\n\n\n<li>Sonde ORP <a href=\"https:\/\/atlas-scientific.com\/probes\/consumer-grade-orp-probe\/\" data-type=\"link\" data-id=\"https:\/\/atlas-scientific.com\/probes\/consumer-grade-orp-probe\/\" target=\"_blank\" rel=\"noreferrer noopener\">EZO<\/a> ou <a href=\"https:\/\/fr.aliexpress.com\/item\/1005007575561954.html?spm=a2g0o.order_list.order_list_main.22.5aa75e5ba5DQEF&amp;gatewayAdapt=glo2fra\" data-type=\"link\" data-id=\"https:\/\/fr.aliexpress.com\/item\/1005007575561954.html?spm=a2g0o.order_list.order_list_main.22.5aa75e5ba5DQEF&amp;gatewayAdapt=glo2fra\" target=\"_blank\" rel=\"noreferrer noopener\">Ali Express<\/a>.<\/li>\n\n\n\n<li>Capteur de pression ADS1115 (filtre).<\/li>\n\n\n\n<li>un module <a href=\"https:\/\/www.amazon.fr\/Hopbucan-PZEM-004T-Amp%C3%A8rem%C3%A8tre-num%C3%A9rique-Fr%C3%A9quence\/dp\/B0BFQXZSX8\/ref=sr_1_3?crid=RQCG5I9R76N9&amp;dib=eyJ2IjoiMSJ9.4XspIaX3c4J7xoE56rGimSS7eLB8_Yh14HBKR_Q9l7T3PVHeHO7ql6s9KaSoqXbAG8_Y5RSNxBcVMuj2-AoLVQ-jd__Jfg22PjEQ0KmFSGgBOwGUkepTJr7s82UNQh5Q58Pbr6YlPoykwrwarvaHNs3Roi30Om0NHg3yjxRRp-tNO_AMK6sxjhfxjryx6QHI_7z5jZicYDgDjjii3d_7modpzNIMuhljd5Hr59nCP-Q-8NGJKouU9aowARcZBNkX91oqdir9idgIiwcj8hG6FhLUdaSUmbheTIfKyVO57b7xg9tW1d_jkdmNm54oSffDwEZYQX8Fm3u3IpxRFGAnLjlbbr9ItV4VvWwVmTn8HKZrTVDAQgxxTkNGrdu_U0ULNSIPkQZsdXO9Tec5oQ2paYiGSKJ2qLC38hHDZhAnSaizByLrAh2O89Mntdi66ECR._G9emuWca-TwdJUaJaNOjr-SQlqch1RUNlCM3eSElDc&amp;dib_tag=se&amp;keywords=pzem-004t+v3&amp;qid=1742888346&amp;sprefix=pzem%2Caps%2C125&amp;sr=8-3\" target=\"_blank\" rel=\"noreferrer noopener\">PZEM-004T 100A<\/a> permettant de mesurer des courants de 0-100A sous une tension alternative de 80-260V.<\/li>\n\n\n\n<li>D\u00e9tecteurs de niveau (LSH, LSL via SX1509). Voir article sur <a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/04\/02\/home-assistant-gestion-piscine-1_mise-a-niveau-automatique\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2021\/04\/02\/home-assistant-gestion-piscine-1_mise-a-niveau-automatique\/\" target=\"_blank\" rel=\"noreferrer noopener\">la mesure de niveau<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Actionneurs<\/strong> : Relais pour pompe filtration (12 m\u00b3\/h), pompes doseuses (pH-, chlore), \u00e9lectrovanne eau, et volet roulant.<\/li>\n\n\n\n<li><strong>Afficheur LCD 16&#215;2 I2C<\/strong> : Pour un suivi local (pH, pression, temp\u00e9rature).<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Conception du Circuit Imprim\u00e9<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Pour \u00e9viter un c\u00e2blage anarchique, j\u2019ai con\u00e7u un PCB qui regroupe toutes les connexions n\u00e9cessaires. Voici une vue du PCB final, con\u00e7u avec EasyEda et fabriqu\u00e9 par JLCPCB :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"797\" height=\"341\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image.png\" alt=\"\" class=\"wp-image-3294\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image.png 797w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-300x128.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-768x329.png 768w\" sizes=\"auto, (max-width: 797px) 100vw, 797px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le PCB inclut :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Connecteurs pour capteurs<\/strong> : Borniers pour la sonde Dallas (temp\u00e9rature eau), les sondes EZO (pH et ORP), l\u2019ADS1115 (pression), et les d\u00e9tecteurs de niveau (LSH, LSL).<\/li>\n\n\n\n<li><strong>Interfaces de communication<\/strong> : I2C pour l\u2019afficheur et les EZO, UART pour le PZEM-004T.<\/li>\n\n\n\n<li><strong>Extension SX1509<\/strong> : Pour g\u00e9rer plus d\u2019entr\u00e9es\/sorties (niveaux, LEDs).<\/li>\n\n\n\n<li><strong>Alimentation<\/strong> : R\u00e9gulateurs 12V\/5V\/3.3V pour alimenter l\u2019ESP32 et les capteurs.<\/li>\n\n\n\n<li><strong>Sorties vers les relais<\/strong> : Connecteurs pour piloter la pompe de filtration, les pompes doseuses, l\u2019\u00e9lectrovanne, et le volet roulant.<\/li>\n\n\n\n<li><strong>Connecteurs suppl\u00e9mentaires<\/strong> : Pour des extensions futures (ex. : capteur ORP).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le PCB est \u00e9tiquet\u00e9 clairement (ex. : \u00ab\u00a0PZEM-004T\u00a0\u00bb, \u00ab\u00a0ADS1115\u00a0\u00bb, \u00ab\u00a0PH-EZO\u00a0\u00bb) pour faciliter les raccordements. Les borniers \u00e0 vis permettent de brancher\/d\u00e9brancher facilement les capteurs et actionneurs sans soudure. La conception a \u00e9t\u00e9 finalis\u00e9e le 25\/07\/2024, comme indiqu\u00e9 sur le PCB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Le Gerber et la liste du mat\u00e9riel sont disponibles ici: <\/strong><a href=\"https:\/\/github.com\/remycrochon\/domo.rem81\/tree\/main\/extension_platine-relais_esp32\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/remycrochon\/domo.rem81\/tree\/main\/extension_platine-relais_esp32<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Sch\u00e9ma de C\u00e2blage<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Pour mieux comprendre les connexions, voici le sch\u00e9ma de c\u00e2blage r\u00e9alis\u00e9 sous Easyeda :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au format EasyEDA:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/remycrochon\/domo.rem81\/blob\/main\/Platine%20gestion%20piscine%20juillet%202024\/SCH_Extension-Platine-Relais-ESP32-Veth_V07-2024.json\">https:\/\/github.com\/remycrochon\/domo.rem81\/blob\/main\/Platine%20gestion%20piscine%20juillet%202024\/SCH_Extension-Platine-Relais-ESP32-Veth_V07-2024.json<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et le PCB au format EasyEDA<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/remycrochon\/domo.rem81\/blob\/main\/Platine%20gestion%20piscine%20juillet%202024\/PCB_PCB-eth-V07-2024.json\">https:\/\/github.com\/remycrochon\/domo.rem81\/blob\/main\/Platine%20gestion%20piscine%20juillet%202024\/PCB_PCB-eth-V07-2024.json<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au format PNG:<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-f81b6ed3-fe9e-423a-aa1a-981c5a354de5\" href=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/Schematic_Extension-Platine-Relais-ESP32-Veth_2025-06-09.png\">Schematic_Extension-Platine-Relais-ESP32-Veth_2025-06-09<\/a><a href=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/Schematic_Extension-Platine-Relais-ESP32-Veth_2025-06-09.png\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-f81b6ed3-fe9e-423a-aa1a-981c5a354de5\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"517\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-5-1024x517.png\" alt=\"\" class=\"wp-image-4064\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-5-1024x517.png 1024w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-5-300x152.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-5-768x388.png 768w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-5.png 1138w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le sch\u00e9ma montre :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ESP32<\/strong> : C\u0153ur du syst\u00e8me, connect\u00e9 via GPIO aux capteurs et actionneurs.<\/li>\n\n\n\n<li><strong>Capteurs<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Sonde Dallas (GPIO16) pour la temp\u00e9rature de l\u2019eau.<\/li>\n\n\n\n<li>EZO pH\/ORP via I2C (SDA GPIO15, SCL GPIO22).<\/li>\n\n\n\n<li>ADS1115 (pression filtre) sur I2C.<\/li>\n\n\n\n<li>PZEM-004T (puissance) via UART (RX GPIO3, TX GPIO1).<\/li>\n\n\n\n<li>D\u00e9tecteurs de niveau (LSH, LSL) via SX1509.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Actionneurs<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Relais pour la pompe de filtration (GPIO32), pompes doseuses (GPIO33, GPIO25), \u00e9lectrovanne (GPIO12), et volet roulant (GPIO27, GPIO14).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Extensions<\/strong> :\n<ul class=\"wp-block-list\">\n<li>SX1509 pour g\u00e9rer les entr\u00e9es\/sorties suppl\u00e9mentaires (niveaux, LEDs).<\/li>\n\n\n\n<li>Afficheur LCD 16&#215;2 sur I2C.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Alimentation<\/strong> : R\u00e9gulateurs 12V\/5V\/3.3V pour l\u2019ESP32 et les capteurs.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ce sch\u00e9ma est essentiel pour comprendre comment tout est interconnect\u00e9 et pour reproduire le projet.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Fonctionnement et Code ESPHome<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Le programme ESPHome (ESP178) est structur\u00e9 autour de plusieurs scripts et capteurs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le corps principal du programme g\u00e8re les diff\u00e9rents modes de filtration. Vous pouvez ins\u00e9rer ou pas les sous programmes suivants en commentant la ligne correspondante sous l&rsquo;instruction \u00ab\u00a0Includes\u00a0\u00bb:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>packages:\n<ul class=\"wp-block-list\">\n<li>ph: !include pack_esp178\/ph.yaml<\/li>\n\n\n\n<li>chlore: !include pack_esp178\/chlore.yaml<\/li>\n\n\n\n<li>volet: !include pack_esp178\/couverture_flottante.yaml<\/li>\n\n\n\n<li>appoint_eau: !include pack_esp178\/appoint_eau.yaml<\/li>\n\n\n\n<li>hors_gel: !include pack_esp178\/hors_gel.yaml<\/li>\n\n\n\n<li>mesure_elec: !include pack_esp178\/mesure_elec.yaml <\/li>\n\n\n\n<li>mesure_pression: !include pack_esp178\/mesure_pression.yaml<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"321\" height=\"178\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-4.png\" alt=\"\" class=\"wp-image-4048 size-full\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-4.png 321w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-4-300x166.png 300w\" sizes=\"auto, (max-width: 321px) 100vw, 321px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\">Les fichiers .yaml doivent stock\u00e9s dans un sous_dossier de ESPhome, \u00ab\u00a0pack_esp178\u00a0\u00bb dans mon cas.<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Filtration<\/strong> : <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quatre modes de fonctionnement:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><em>Palier<\/em> <\/strong>: Dur\u00e9e fix\u00e9e par paliers.<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la dur\u00e9e est calcul\u00e9e manuellement par rapport au volume de la piscine: Vol=9*4*1.4=50.4 m3<\/li>\n\n\n\n<li>et le d\u00e9bit de la pompe: Qppe Th\u00e9orique=12m3\/h -&gt; retenu:12m3\/h<\/li>\n\n\n\n<li>donc 1 cycle= 50.4\/12=4.2h<\/li>\n\n\n\n<li>il faut filtrer au minimum:<\/li>\n\n\n\n<li>T\u00b0eau&lt;10\u00b0 = 1h de filtration (s\u00e9curit\u00e9 minimale, ind\u00e9pendante du calcul par cycle)<\/li>\n\n\n\n<li>10\u00b0&lt;T\u00b0eau&lt;15\u00b0 = 1 cycle = 4.2h =&gt; 4h<\/li>\n\n\n\n<li>15\u00b0&lt;T\u00b0eau&lt;20\u00b0 = 2 cycles = 8.4h =&gt; 8h<\/li>\n\n\n\n<li>20\u00b0&lt;T\u00b0eau&lt;25\u00b0 = 3 cycles = 12.6h =&gt; 12h<\/li>\n\n\n\n<li>25\u00b0&lt;T\u00b0eau = 3 ou 4 cycles = 12.6h =&gt; 12h<\/li>\n\n\n\n<li>T\u00b0eau&gt;25\u00b0 =&gt; 14h<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><em><strong>Classique<\/strong><\/em> : Dur\u00e9e = temp\u00e9rature \/ 2 (min 5h, max 23h).<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Solution largement. Exemple : \u00c0 20\u00b0C, dur\u00e9e = 10h.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><em>Abaque<\/em> <\/strong>: Dur\u00e9e calcul\u00e9e par une formule polynomiale cubique :<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"679\" height=\"379\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-3.png\" alt=\"\" class=\"wp-image-3312\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-3.png 679w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-3-300x167.png 300w\" sizes=\"auto, (max-width: 679px) 100vw, 679px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><br><em><strong>Horaire<\/strong><\/em> : Plage horaire fixe (ex. : hiver).<\/h3>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>R\u00e9gulation pH<\/strong> :<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans ce chapitre, je vous explique comment j\u2019ai mis en place un syst\u00e8me intelligent pour ajuster automatiquement le pH en injectant un produit acidifiant, avec des notifications et une gestion fine des dur\u00e9es. L\u2019objectif est de maintenir un pH optimal (g\u00e9n\u00e9ralement entre 7.2 et 7.6), essentiel pour le confort des baigneurs et l\u2019efficacit\u00e9 du chlore.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Contexte et objectif<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ma piscine est \u00e9quip\u00e9e d\u2019une pompe doseuse pour injecter un produit pH- (acidifiant) lorsque le pH mesur\u00e9 d\u00e9passe la cible d\u00e9finie. Je r\u00e9cup\u00e8re la valeur mesur\u00e9e du pH via <code>id(g_memoire_ph)<\/code> et la cible via <code>id(_ph_cible)<\/code>. L\u2019id\u00e9e est de calculer une dur\u00e9e d\u2019injection proportionnelle \u00e0 l\u2019\u00e9cart entre la mesure et la cible, en utilisant les caract\u00e9ristiques de ma piscine (43,2 m\u00b3) et du produit pH Moins Ultra (0,2 l pour 0,1 unit\u00e9 de pH pour 10 m\u00b3). Le syst\u00e8me s\u2019active uniquement en mode automatique et lorsque la filtration est en marche.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La configuration ESPHome<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Voici le script que j\u2019ai int\u00e9gr\u00e9 dans mon fichier ESPHome pour r\u00e9guler le pH de mani\u00e8re pr\u00e9cise et automatis\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez le code complet fin d\u2019article.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce script est appel\u00e9 une fois par jour, \u00e0 une heure unique et configurable via l&rsquo;entit\u00e9 <code>Heure Injection pH<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fonctionnement d\u00e9taill\u00e9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ce script, ex\u00e9cut\u00e9 en mode <code>single<\/code>, r\u00e9gule le pH de mani\u00e8re intelligente. Voici comment il op\u00e8re \u00e9tape par \u00e9tape :<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Condition d\u2019activation<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Le script se d\u00e9clenche uniquement en mode Auto. Il v\u00e9rifie si le pH mesur\u00e9 (<code>g_memoire_ph<\/code>) d\u00e9passe la cible (<code>_ph_cible<\/code>) de plus de 0,1 unit\u00e9 (d\u00e9finie dans <code>_ph_hysteresis<\/code>), si la filtration est active, et qu&rsquo;une temporisation de recirculation (<code>flag_tempo_ppe_filtre<\/code>) est bien \u00e9coul\u00e9e, afin de laisser le temps \u00e0 la mesure de pH de se stabiliser avant d&rsquo;autoriser une injection.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Calcul de la dur\u00e9e d\u2019injection<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019\u00e9cart entre la mesure et la cible est calcul\u00e9, et la dur\u00e9e d\u2019injection est d\u00e9termin\u00e9e directement en fonction de cet \u00e9cart, du volume de la piscine, et du d\u00e9bit de la pompe :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Quantit\u00e9 n\u00e9cessaire<\/strong> : On calcule la quantit\u00e9 de produit \u00e0 injecter pour corriger l\u2019\u00e9cart total, en se basant sur les donn\u00e9es du produit (0,2 l pour 0,1 unit\u00e9 de pH pour 10 m\u00b3). Pour ma piscine de 43,2 m\u00b3, cela repr\u00e9sente 0,864 l pour 0,1 unit\u00e9 de pH.<\/li>\n\n\n\n<li><strong>Dur\u00e9e th\u00e9orique<\/strong> : On d\u00e9termine le temps n\u00e9cessaire pour injecter cette quantit\u00e9, en fonction du d\u00e9bit de la pompe (<code>_debit_ppe_moins<\/code>, par exemple 4,272 l\/h, soit environ 1,187 ml\/s).<\/li>\n\n\n\n<li><strong>Facteur de correction<\/strong> : Pour \u00e9viter une sur-correction, seule une fraction de l\u2019\u00e9cart est corrig\u00e9e par cycle. Ce facteur est ajustable via un param\u00e8tre (<code>facteur_correction_ph<\/code>), fix\u00e9 par d\u00e9faut \u00e0 50 %.<\/li>\n\n\n\n<li><strong>Limites<\/strong> : La dur\u00e9e est born\u00e9e par un maximum configurable (<code>duree_max_injection_phmoins<\/code>), r\u00e9glable entre 60 et 600 secondes et fix\u00e9 par d\u00e9faut \u00e0 380 secondes, pour \u00e9viter une surdose.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Conversion et affichage<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Le temps calcul\u00e9 est converti en heures, minutes et secondes, puis affich\u00e9 via un composant <code>datetime<\/code> (<code>duree_injection_ph<\/code>) pour une lecture facile dans Home Assistant.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Gestion de la pompe<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si une dur\u00e9e positive est calcul\u00e9e, la pompe (<code>cde_ppe_ph_moins<\/code>) s\u2019active pour cette dur\u00e9e. Des notifications Telegram sont envoy\u00e9es au d\u00e9but et \u00e0 la fin de l\u2019injection, avec les d\u00e9tails du pH mesur\u00e9, de la cible et de la dur\u00e9e. Si aucune action n\u2019est requise, la pompe reste \u00e9teinte. Une s\u00e9curit\u00e9 compl\u00e9mentaire interrompt l\u2019injection en cours si le pH mesur\u00e9 repasse sous la cible avant la fin du cycle.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Logs et suivi<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Des messages de log permettent de suivre les valeurs mesur\u00e9es, les quantit\u00e9s calcul\u00e9es, le d\u00e9bit, le facteur de correction et la dur\u00e9e finale, facilitant le d\u00e9bogage.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemple pratique<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Supposons que ma cible soit 7.4 et que le pH mesur\u00e9 soit 8.0 (\u00e9cart de 0.6) :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Quantit\u00e9 n\u00e9cessaire : (0,6 \/ 0,1) x 0,2 x (43,2 \/ 10) = 5,184 l (soit 5184 ml).<\/li>\n\n\n\n<li>D\u00e9bit de la pompe : 4,272 l\/h = 1,187 ml\/s.<\/li>\n\n\n\n<li>Dur\u00e9e totale : 5184 \/ 1,187 = 4368 secondes (environ 73 minutes).<\/li>\n\n\n\n<li>Avec un facteur de correction de 50 % : 4368 x 0,5 = 2184 secondes, mais limit\u00e9 \u00e0 380 secondes (dur\u00e9e maximale par d\u00e9faut).<\/li>\n\n\n\n<li>R\u00e9sultat : La pompe s\u2019active pendant 380 secondes, injectant environ 451 ml, et le processus se r\u00e9p\u00e8te au prochain cycle jusqu\u2019\u00e0 atteindre la cible.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Conseils pour adapter cette solution<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ajustez le facteur de correction<\/strong> : Modifiez <code>facteur_correction_ph<\/code> (fix\u00e9 par d\u00e9faut \u00e0 50 %, par exemple passez \u00e0 70 % pour une correction plus rapide) selon la r\u00e9activit\u00e9 de votre produit pH-.<\/li>\n\n\n\n<li><strong>V\u00e9rifiez le d\u00e9bit<\/strong> : Assurez-vous que le d\u00e9bit de la pompe (<code>_debit_ppe_moins<\/code>) est correct et ajustez-le si n\u00e9cessaire.<\/li>\n\n\n\n<li><strong>Validez les mesures<\/strong> : Utilisez un kit d\u2019analyse pour confirmer les ajustements et affinez si besoin.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Un dispositif similaire a \u00e9t\u00e9 d\u00e9crit dans ces articles :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li> <a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/08\/14\/ha-gestion-piscine-5_regulation-du-ph\/\">https:\/\/domo.rem81.com\/index.php\/2021\/08\/14\/ha-gestion-piscine-5_regulation-du-ph\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/05\/11\/home-assistant-gestion-piscine-4_mesure-ph\/\">https:\/\/domo.rem81.com\/index.php\/2021\/05\/11\/home-assistant-gestion-piscine-4_mesure-ph\/<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Injection Chlore<\/strong> :<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;objectif est de piloter pr\u00e9cis\u00e9ment l&rsquo;injection de chlore liquide (javel \u00e0 9.6%) via une pompe doseuse connect\u00e9e, selon deux strat\u00e9gies possibles : un volume cible \u00e0 injecter chaque jour (mode \u00ab\u00a0Auto Volume\u00a0\u00bb), ou un asservissement proportionnel \u00e0 la mesure ORP (mode \u00ab\u00a0Auto ORP\u00a0\u00bb). Voici comment j&rsquo;ai proc\u00e9d\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Contexte et objectif<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ma piscine est \u00e9quip\u00e9e d\u2019une pompe doseuse connect\u00e9e via ESPHome, qui injecte de la javel \u00e0 9.6% de chlore actif (96 g\/L). Je voulais un syst\u00e8me capable de calculer automatiquement le temps d\u2019injection, soit en fonction d\u2019un volume cible de chlore liquide \u00e0 injecter chaque jour (mode \u00ab\u00a0Auto Volume\u00a0\u00bb), soit en fonction de l\u2019\u00e9cart par rapport \u00e0 une consigne ORP en mV (mode \u00ab\u00a0Auto ORP\u00a0\u00bb), et du d\u00e9bit de la pompe. De plus, j\u2019ai ajout\u00e9 des fonctionnalit\u00e9s pour afficher le temps sous forme lisible (heures, minutes, secondes) et envoyer des notifications via Telegram.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La configuration ESPHome<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Voici le script que j\u2019ai int\u00e9gr\u00e9 dans mon fichier ESPHome pour g\u00e9rer l\u2019injection de chlore. Ce script fonctionne dans diff\u00e9rents modes (automatique, manuel forc\u00e9, ou arr\u00eat\u00e9 forc\u00e9) et s\u2019active uniquement lorsque la filtration est en marche.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez le code complet fin d\u2019article.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Ce script est appel\u00e9 une fois par jour, \u00e0 une heure unique et configurable via l&rsquo;entit\u00e9 <code>Heure Injection Chlore<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fonctionnement d\u00e9taill\u00e9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le script s\u2019ex\u00e9cute dans un mode single, ce qui garantit qu\u2019il ne se r\u00e9p\u00e8te pas ind\u00e9finiment. Voici comment il fonctionne \u00e9tape par \u00e9tape :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Calcul du dosage<\/strong> :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"526\" height=\"264\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-1.png\" alt=\"\" class=\"wp-image-3938\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-1.png 526w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/09\/image-1-300x151.png 300w\" sizes=\"auto, (max-width: 526px) 100vw, 526px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Conversion du temps<\/strong> :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le temps calcul\u00e9 est converti en heures, minutes, et secondes, puis affich\u00e9 via un composant datetime (duree_injection_chlore). Cela me permet de visualiser facilement la dur\u00e9e dans Home Assistant.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Gestion de la Pompe:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En mode Auto, si un temps positif est calcul\u00e9 et que la filtration est en marche, la pompe (cde_ppe_chlore) s\u2019active pour la dur\u00e9e calcul\u00e9e, et une notification Telegram est envoy\u00e9e avec le temps d\u2019injection.<\/li>\n\n\n\n<li>Si aucun temps n\u2019est requis ou si la filtration est arr\u00eat\u00e9e, la pompe s\u2019arr\u00eate.<\/li>\n\n\n\n<li>En mode Ma_f (manuel forc\u00e9), la pompe s\u2019active tant que la filtration est en marche, quelle que soit la concentration.<\/li>\n\n\n\n<li>En mode At_f (arr\u00eat forc\u00e9) ou si la filtration est d\u00e9sactiv\u00e9e, la pompe s\u2019arr\u00eate automatiquement.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Logs et d\u00e9bogage<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Des messages de log sont g\u00e9n\u00e9r\u00e9s \u00e0 chaque \u00e9tape (d\u00e9but du script, temps calcul\u00e9, activation\/arr\u00eat de la pompe), avec des d\u00e9tails comme la quantit\u00e9 inject\u00e9e et le temps. Cela me permet de suivre l\u2019op\u00e9ration en temps r\u00e9el.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Mesure de Pression:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le capteur de pression est reli\u00e9 \u00e0 l&rsquo;entr\u00e9e N\u00b00 (A0) du convertisseur Analogique ADS1115<\/li>\n\n\n\n<li>Le dispositif a \u00e9t\u00e9 d\u00e9crit dans cet article <a href=\"https:\/\/domo.rem81.com\/index.php\/2022\/05\/13\/ha-gestion-piscine-7_mesure-de-pression\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/domo.rem81.com\/index.php\/2022\/05\/13\/ha-gestion-piscine-7_mesure-de-pression\/<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Appoint d\u2019Eau<\/strong> :<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019objectif ici est d\u2019assurer automatiquement le maintien du niveau d\u2019eau dans la piscine gr\u00e2ce \u00e0 une \u00e9lectrovanne command\u00e9e par un ESP32 sous ESPHome, tout en prenant en compte les diff\u00e9rents niveaux d\u2019eau d\u00e9tect\u00e9s par des sondes de niveau. Le tout fonctionne de mani\u00e8re autonome ou manuelle, avec un suivi des dur\u00e9es d\u2019ouverture et une protection contre les d\u00e9fauts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le dispositif mis en oeuvre a \u00e9t\u00e9 d\u00e9crit dans cet article: <a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/04\/02\/home-assistant-gestion-piscine-1_mise-a-niveau-automatique\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/domo.rem81.com\/index.php\/2021\/04\/02\/home-assistant-gestion-piscine-1_mise-a-niveau-automatique\/<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Contexte et objectif<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ma piscine est \u00e9quip\u00e9e de deux sondes de niveau connect\u00e9es \u00e0 un module d\u2019extension SX1509 (LSH = haut, LSL = bas), permettant de d\u00e9tecter quatre \u00e9tats : niveau haut, interm\u00e9diaire, bas, ou d\u00e9faut (cas incoh\u00e9rent). Une \u00e9lectrovanne pilot\u00e9e par un relais ESP32 se charge d\u2019ajouter de l\u2019eau quand n\u00e9cessaire. L\u2019objectif est de g\u00e9rer l\u2019appoint d\u2019eau de mani\u00e8re fiable, avec une s\u00e9curit\u00e9 anti-d\u00e9bordement et une logique de fonctionnement automatique ou forc\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trois modes sont propos\u00e9s via une entit\u00e9 <code>select<\/code> dans Home Assistant :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Auto<\/strong> : Appoint automatique uniquement si la couverture est ouverte, sans d\u00e9faut, et en fonction du niveau mesur\u00e9.<\/li>\n\n\n\n<li><strong>Ma_f (manuel forc\u00e9)<\/strong> : Ouverture manuelle de l\u2019\u00e9lectrovanne tant que ce mode est actif.<\/li>\n\n\n\n<li><strong>At_f (arr\u00eat forc\u00e9)<\/strong> : Blocage total de l\u2019appoint d\u2019eau, utile en hiver ou lors de maintenance.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">La configuration ESPHome<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un script principal <code>_regul_eau<\/code> pilote l\u2019ouverture\/fermeture de l\u2019\u00e9lectrovanne selon les niveaux d\u2019eau d\u00e9tect\u00e9s, les conditions de s\u00e9curit\u00e9, et le mode choisi. Ce script peut \u00eatre d\u00e9clench\u00e9 automatiquement ou via un bouton virtuel dans Home Assistant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un second script <code>_calcul_niveau_eau<\/code>, ex\u00e9cut\u00e9 toutes les 5 secondes, analyse l\u2019\u00e9tat des deux sondes pour d\u00e9terminer pr\u00e9cis\u00e9ment le niveau global de la piscine (haut, interm\u00e9diaire, bas ou d\u00e9faut).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un compteur <code>duty_time<\/code> mesure quotidiennement le temps d\u2019ouverture de l\u2019\u00e9lectrovanne, remis \u00e0 z\u00e9ro chaque nuit \u00e0 minuit gr\u00e2ce \u00e0 une synchronisation SNTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez le code complet fin d\u2019article.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fonctionnement d\u00e9taill\u00e9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Analyse des niveaux d\u2019eau<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Les deux sondes permettent d\u2019interpr\u00e9ter 4 \u00e9tats logiques :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Niveau haut<\/strong> : LSH = ON, LSL = ON<\/li>\n\n\n\n<li><strong>Niveau interm\u00e9diaire<\/strong> : LSH = OFF, LSL = ON<\/li>\n\n\n\n<li><strong>Niveau bas<\/strong> : LSH = OFF, LSL = OFF<\/li>\n\n\n\n<li><strong>D\u00e9faut<\/strong> : LSH = ON, LSL = OFF (\u00e9tat incoh\u00e9rent)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Chaque \u00e9tat est publi\u00e9 via un <code>binary_sensor<\/code> pour un affichage clair dans Home Assistant.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">R\u00e9gulation de l\u2019eau<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>En mode Auto<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Si le niveau est bas ou interm\u00e9diaire, et que le volet est ouvert, l\u2019\u00e9lectrovanne s\u2019ouvre automatiquement, avec une coupure de s\u00e9curit\u00e9 au bout de 15 minutes si le niveau ne remonte pas, et une dur\u00e9e maximale absolue de 60 minutes dans tous les cas (deux timeouts de s\u00e9curit\u00e9 distincts).<\/li>\n\n\n\n<li>Deux d\u00e9clenchements automatiques suppl\u00e9mentaires existent : \u00e0 une seconde heure configurable (<code>Heure Appoint Eau Auto 2<\/code>, 17h00 par d\u00e9faut), et automatiquement quelques minutes apr\u00e8s l\u2019ouverture du volet.<\/li>\n\n\n\n<li>Si le niveau est haut ou en d\u00e9faut, la vanne est imm\u00e9diatement ferm\u00e9e.<\/li>\n\n\n\n<li>Une s\u00e9curit\u00e9 renforc\u00e9e surveille en continu les sondes incoh\u00e9rentes, un niveau haut persistant, une absence de mont\u00e9e du niveau, et le d\u00e9passement de la dur\u00e9e maximale, avec coupure automatique de la vanne et alerte Telegram en cas de d\u00e9faut.<\/li>\n\n\n\n<li>Le tout est logu\u00e9 en d\u00e9tail (mode actif, \u00e9tat de la vanne, etc.).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>En mode Ma_f (manuel forc\u00e9)<\/strong> :\n<ul class=\"wp-block-list\">\n<li>L\u2019\u00e9lectrovanne s\u2019ouvre d\u00e8s que ce mode est activ\u00e9, quel que soit le niveau, tant que la filtration est en fonctionnement.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>En mode At_f (arr\u00eat forc\u00e9)<\/strong> :\n<ul class=\"wp-block-list\">\n<li>La vanne reste ferm\u00e9e en toute circonstance.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Logs et surveillance<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Chaque activation de la vanne est horodat\u00e9e et consign\u00e9e dans les logs. Le capteur <code>duty_time<\/code> permet de visualiser le temps d\u2019ouverture cumul\u00e9 sur la journ\u00e9e, un bon indicateur de fuite \u00e9ventuelle ou de sur-remplissage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enfin, l&rsquo;ensemble de cette logique est compl\u00e8tement int\u00e9gr\u00e9e dans Home Assistant avec affichage des niveaux, du mode actif, du bouton d\u2019appoint manuel, et des dur\u00e9es de fonctionnement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fonctionnement Hors Gel : Protection Automatis\u00e9e de la Piscine en Hiver<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Afin de prot\u00e9ger le local technique et le circuit hydraulique de la piscine contre le gel, j\u2019ai mis en place une <strong>fonction de hors gel intelligente<\/strong> dans ESPHome. Cette logique permet d\u2019enclencher automatiquement la pompe de filtration en cas de temp\u00e9rature ext\u00e9rieure n\u00e9gative, selon deux seuils personnalisables.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Objectif<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Lors de temp\u00e9ratures proches ou en dessous de z\u00e9ro, le risque de gel dans les canalisations est r\u00e9el, en particulier si l\u2019eau est stagnante. La circulation de l\u2019eau suffit g\u00e9n\u00e9ralement \u00e0 emp\u00eacher ce ph\u00e9nom\u00e8ne. Plut\u00f4t que de laisser tourner la pompe en continu, j\u2019ai opt\u00e9 pour un fonctionnement ponctuel <strong>conditionn\u00e9 par la temp\u00e9rature ext\u00e9rieure<\/strong>, avec des <strong>alertes Telegram<\/strong> \u00e0 chaque d\u00e9clenchement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Principe de fonctionnement<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le fonctionnement repose sur deux seuils configurables depuis Home Assistant :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Seuil 1<\/strong> : en dessous duquel la pompe tourne pendant <strong>15 minutes<\/strong>,<\/li>\n\n\n\n<li><strong>Seuil 2<\/strong> : en dessous duquel elle tourne pendant <strong>30 minutes<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La logique est test\u00e9e toutes les 15 minutes. Un <strong>flag interne<\/strong> emp\u00eache que plusieurs cycles ne soient lanc\u00e9s simultan\u00e9ment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Int\u00e9gration dans ESPHome<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez le code complet fin d\u2019article.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Notifications et suivi<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 chaque d\u00e9clenchement ou arr\u00eat d\u2019un cycle hors gel, une <strong>notification Telegram<\/strong> est envoy\u00e9e. Cela me permet de suivre \u00e0 distance l\u2019activit\u00e9 hivernale de la piscine.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Automatisation de la couverture flottante<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans ce chapitre je vous explique comment j\u2019ai automatis\u00e9 la gestion de la couverture flottante de ma piscine gr\u00e2ce \u00e0 ESPHome. Cette couverture prot\u00e8ge l\u2019eau des impuret\u00e9s, r\u00e9duit l\u2019\u00e9vaporation et conserve la chaleur, mais l\u2019ouvrir et la fermer manuellement peut \u00eatre fastidieux. J\u2019ai donc cr\u00e9\u00e9 un syst\u00e8me qui pilote automatiquement l\u2019ouverture et la fermeture en fonction de l\u2019heure et du mode de fonctionnement. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour information ma couverture flottante est un :<a href=\"https:\/\/www.abriblue.com\/solutions\/immax\/\">https:\/\/www.abriblue.com\/solutions\/immax\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai raccord\u00e9 un contact NO des relais de commande d&rsquo;ouverture et de fermeture en parall\u00e8le sur le boitier \u00e0 clef fourni avec le volet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Attention:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n&rsquo;est pas conforme de fermer un volet sans visuel, mais je le fais en connaissance de cause et je vous conseille de modifier les scripts de fermeture: Vous pouvez automatiser l&rsquo;ouverture et d\u00e9clencher la fermeture manuellement avec un visuel sur le volet<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Contexte et objectif<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ma piscine est \u00e9quip\u00e9e d\u2019une couverture flottante motoris\u00e9e, contr\u00f4l\u00e9e par deux interrupteurs : <code>cde_volet_ouverture<\/code> pour ouvrir et <code>cde_volet_fermeture<\/code> pour fermer. Je voulais automatiser ce processus selon deux modes :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mode \u00ab\u00a0Horaire\u00a0\u00bb<\/strong> : L\u2019ouverture et la fermeture se font \u00e0 des heures fixes, d\u00e9finies par <code>h_ouv_volet<\/code> et <code>h_ferm_volet<\/code>.<\/li>\n\n\n\n<li><strong>Mode \u00ab\u00a0Auto\u00a0\u00bb<\/strong> : L\u2019ouverture est d\u00e9clench\u00e9e 15 minutes apr\u00e8s le d\u00e9marrage de la filtration (selon ses modes : \u00ab\u00a0Horaire\u00a0\u00bb, \u00ab\u00a0Palier\u00a0\u00bb, \u00ab\u00a0Classique\u00a0\u00bb, ou \u00ab\u00a0Abaque\u00a0\u00bb), et la fermeture 30 minutes apr\u00e8s la fin de la filtration \u2014 ces horaires calcul\u00e9s sont ind\u00e9pendants de <code>h_ouv_volet<\/code>\/<code>h_ferm_volet<\/code>, qui ne servent qu&rsquo;au mode \u00ab\u00a0Horaire\u00a0\u00bb.<\/li>\n\n\n\n<li><strong>Mode \u00ab\u00a0At_f\u00a0\u00bb (arr\u00eat forc\u00e9)<\/strong> : bloque tout mouvement automatique du volet, utile pour une intervention manuelle ou une maintenance.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">De plus, j\u2019ai ajout\u00e9 un \u00e9clairage (<code>cde_eclairage<\/code>) qui s\u2019allume apr\u00e8s la fermeture pour des raisons de s\u00e9curit\u00e9, et un script pour arr\u00eater manuellement le mouvement si n\u00e9cessaire. Par s\u00e9curit\u00e9, l&rsquo;ouverture et la fermeture sont \u00e9galement bloqu\u00e9es si les sondes de niveau d&rsquo;eau signalent un d\u00e9faut ou un niveau bas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La configuration ESPHome<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez le code complet fin d\u2019article.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fonctionnement d\u00e9taill\u00e9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ce script pilote la couverture flottante de mani\u00e8re intelligente, en fonction de l\u2019heure et du mode choisi. Voici les \u00e9tapes principales :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>V\u00e9rification de l\u2019heure<\/strong> :<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le script utilise <code>sntp_time<\/code> pour r\u00e9cup\u00e9rer l\u2019heure actuelle et s\u2019assure qu\u2019elle est valide. Des logs permettent de comparer l\u2019heure actuelle avec les heures programm\u00e9es pour l\u2019ouverture (<code>h_ouv_volet<\/code>) et la fermeture (<code>h_ferm_volet<\/code>).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Mode \u00ab\u00a0Horaire\u00a0\u00bb<\/strong> :<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si le mode est d\u00e9fini sur \u00ab\u00a0Horaire\u00a0\u00bb, le script v\u00e9rifie si l\u2019heure actuelle correspond \u00e0 l\u2019heure d\u2019ouverture ou de fermeture d\u00e9finie. Si c\u2019est le cas, il ex\u00e9cute respectivement <code>script_ouv_volet<\/code> ou <code>script_ferm_volet<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Mode \u00ab\u00a0Auto\u00a0\u00bb<\/strong> :<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En mode \u00ab\u00a0Auto\u00a0\u00bb, l\u2019ouverture est d\u00e9clench\u00e9e 15 minutes apr\u00e8s l\u2019heure de d\u00e9marrage de la filtration (<code>h_debut<\/code>), mais uniquement si la filtration est configur\u00e9e dans un mode compatible (\u00ab\u00a0Horaire\u00a0\u00bb, \u00ab\u00a0Palier\u00a0\u00bb, \u00ab\u00a0Classique\u00a0\u00bb, ou \u00ab\u00a0Abaque\u00a0\u00bb).<\/li>\n\n\n\n<li>La fermeture est d\u00e9clench\u00e9e 30 minutes apr\u00e8s l\u2019heure de fin de filtration (<code>h_fin<\/code>), ind\u00e9pendamment de <code>h_ferm_volet<\/code> qui ne sert qu&rsquo;en mode \u00ab\u00a0Horaire\u00a0\u00bb.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scripts d\u2019ouverture et de fermeture<\/strong> :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ouverture (<code>script_ouv_volet<\/code>)<\/strong> : Si le niveau d&rsquo;eau n&rsquo;est pas en d\u00e9faut, \u00e9teint la commande de fermeture, attend 1 seconde, active la commande d\u2019ouverture pendant 1 seconde, puis l\u2019\u00e9teint (impulsion relay\u00e9e ensuite par le bo\u00eetier \u00e0 cl\u00e9 du volet).<\/li>\n\n\n\n<li><strong>Fermeture (<code>script_ferm_volet<\/code>)<\/strong> : Si le niveau d&rsquo;eau n&rsquo;est pas en d\u00e9faut, \u00e9teint la commande d\u2019ouverture, attend 1 seconde, active la commande de fermeture pendant 1 seconde puis l\u2019\u00e9teint, puis allume l\u2019\u00e9clairage pendant 20 secondes avant de l\u2019\u00e9teindre.<\/li>\n\n\n\n<li><strong>Arr\u00eat (<code>script_stop_volet<\/code>)<\/strong> : Arr\u00eate les deux moteurs, effectue une petite impulsion de fermeture pour s\u00e9curiser, et \u00e9teint l\u2019\u00e9clairage.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Exemple pratique<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Imaginons que je configure mon syst\u00e8me ainsi :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mode \u00ab\u00a0Horaire\u00a0\u00bb.<\/li>\n\n\n\n<li>Heure d\u2019ouverture : 8h00 (<code>h_ouv_volet<\/code>).<\/li>\n\n\n\n<li>Heure de fermeture : 20h00 (<code>h_ferm_volet<\/code>).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 8h00 pr\u00e9cises, le script <code>script_ouv_volet<\/code> s\u2019ex\u00e9cute : une impulsion d&rsquo;1 seconde d\u00e9clenche l&rsquo;ouverture de la couverture, laissant la piscine accessible. \u00c0 20h00, <code>script_ferm_volet<\/code> se d\u00e9clenche : une impulsion d&rsquo;1 seconde d\u00e9clenche la fermeture, et l\u2019\u00e9clairage s\u2019allume pendant 20 secondes pour des raisons de s\u00e9curit\u00e9. Si besoin, je peux arr\u00eater manuellement avec <code>script_stop_volet<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conseils pour adapter cette solution<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ajustez les dur\u00e9es<\/strong> : Modifiez les d\u00e9lais (impulsions d&rsquo;1 seconde pour l\u2019ouverture et la fermeture, 20 secondes pour l\u2019\u00e9clairage) selon la vitesse de votre moteur.<\/li>\n\n\n\n<li><strong>Ajoutez des notifications<\/strong> : Comme pour mes autres scripts, vous pouvez int\u00e9grer des messages Telegram pour \u00eatre inform\u00e9 de chaque ouverture ou fermeture.<\/li>\n\n\n\n<li><strong>Testez les modes<\/strong> : Essayez le mode \u00ab\u00a0Auto\u00a0\u00bb pour voir s\u2019il convient \u00e0 votre routine de filtration, et ajustez les heures si n\u00e9cessaire.<\/li>\n\n\n\n<li><strong>Ne pas reproduire la fermeture automatique<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Monitoring<\/strong> :<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rapports journaliers Telegram \u00e0 23h59 (filtration \u00e0 23:59:00, pH \u00e0 23:59:05, chlore \u00e0 23:59:40 \u2014 temps de filtration, conso, etc.).<\/li>\n\n\n\n<li>Alerte si la pression du filtre d\u00e9passe le seuil r\u00e9glable <code>pression_max<\/code> (1,5 bar dans la configuration actuelle), et suivi du dosage du chlore liquide.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Mesures \u00c9lectriques : Surveillance de la Consommation de la Piscine<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Afin de surveiller avec pr\u00e9cision la consommation \u00e9lectrique de l\u2019ensemble du local technique piscine (pompe de filtration, \u00e9lectrolyseur, r\u00e9gulation, etc.), j\u2019ai int\u00e9gr\u00e9 un module <strong>PZEM-004T (version TTL 100A)<\/strong> \u00e0 mon ESP32. Ce module permet de mesurer en temps r\u00e9el la tension, le courant, la puissance active, et l\u2019\u00e9nergie consomm\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Objectif et contexte<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mon objectif \u00e9tait de disposer d\u2019un suivi pr\u00e9cis de la consommation \u00e9lectrique de la piscine pour :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>D\u00e9tecter un fonctionnement anormal (pompe bloqu\u00e9e, consommation excessive&#8230;),<\/li>\n\n\n\n<li>Calculer le co\u00fbt r\u00e9el de fonctionnement,<\/li>\n\n\n\n<li>Optimiser la planification de certaines t\u00e2ches en fonction du tarif horaire de l\u2019\u00e9lectricit\u00e9.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le PZEM est connect\u00e9 au circuit principal d\u2019alimentation de la piscine, et communique avec l\u2019ESP32 via l\u2019interface <strong>UART (RX\/TX)<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La configuration ESPHome<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez le code complet fin d\u2019article.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fonctionnement et visualisation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les valeurs mesur\u00e9es sont mises \u00e0 jour toutes les <strong>30 secondes<\/strong> et affich\u00e9es dans Home Assistant via ESPHome. Cela me permet de :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Visualiser la <strong>puissance instantan\u00e9e<\/strong> consomm\u00e9e,<\/li>\n\n\n\n<li>Acc\u00e9der \u00e0 l\u2019<strong>historique de l\u2019\u00e9nergie<\/strong> consomm\u00e9e chaque jour.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Avantages<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cette mesure pourrait me permet, par exemple, de d\u00e9tecter rapidement un dysfonctionnement de la pompe de filtration, qui tourne \u00e0 vide suite \u00e0 un d\u00e9samor\u00e7age. Le courant absorb\u00e9 \u00e9tant anormalement bas, une alerte pourrait \u00eatre g\u00e9n\u00e9r\u00e9e, \u00e9vitant un fonctionnement prolong\u00e9 inutile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n&rsquo;est qu&rsquo;une suggestion car inutile dans mon cas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Code ESPHOME<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Programme Principal:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour information, les codes ci-dessous ne sont certainement pas \u00e0  jour, de ce fait vous les trouverez en t\u00e9l\u00e9chargement sur:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La derni\u00e8re version  du programme principal est disponible ici:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/remycrochon\/home-assistant\/blob\/master\/esphome\/esp178-piscine.yaml\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/remycrochon\/home-assistant\/blob\/master\/esphome\/esp178-piscine.yaml<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et les sous programmes ici:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/remycrochon\/home-assistant\/tree\/master\/esphome\/pack_esp178\">https:\/\/github.com\/remycrochon\/home-assistant\/tree\/master\/esphome\/pack_esp178<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Int\u00e9gration dans Home Assistant<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019ESP178 s\u2019int\u00e8gre via l\u2019API ESPHome. Dans HA, j\u2019ai cr\u00e9\u00e9 un dashboard avec :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Graphiques : pH, temp\u00e9rature, pression, puissance.<\/li>\n\n\n\n<li>R\u00e9glages : consignes pH\/chlore, modes filtration, seuils hors gel.<\/li>\n\n\n\n<li>Notifications Telegram via un text_sensor d\u00e9di\u00e9.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Notification avec Telegram<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N&rsquo;ayant pas trouver de programme de notification \u00ab\u00a0T\u00e9l\u00e9gram\u00a0\u00bb fonctionel dans ESP Home, j&rsquo;utilise ma notification telegram fonctionnelle dans HA. Un automatisme surveille un changement de valeur dans le \u00ab\u00a0sensor.esp178_message_notif_telegram\u00a0\u00bb et notifie en cas de chanement de valeur.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>alias: Notification message Telegram de ESP178\ndescription: \" Notifie sur Telegram le message mis \u00e0 jour par l'ESP178 Piscine\"\nmode: single\ntriggers:\n  - entity_id:\n      - sensor.esp178_message_notif_telegram\n    for:\n      hours: 0\n      minutes: 0\n      seconds: 0\n    trigger: state\nconditions:\n  - condition: not\n    conditions:\n      - condition: or\n        conditions:\n          - condition: state\n            entity_id: sensor.esp178_message_notif_telegram\n            state: unavailable\n          - condition: state\n            entity_id: sensor.esp178_message_notif_telegram\n            state: unknown\nactions:\n  - data:\n      message: \"{{states('sensor.esp178_message_notif_telegram')}}\"\n      title: Message ESP178!!!\n    action: notify.telegram\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple de carte HA<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"313\" height=\"601\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-4.png\" alt=\"\" class=\"wp-image-3318\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-4.png 313w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-4-156x300.png 156w\" sizes=\"auto, (max-width: 313px) 100vw, 313px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>type: custom:pool-monitor-card\ndisplay:\n  compact: false\n  show_names: true\n  show_labels: true\n  show_last_updated: false\n  show_icons: true\n  show_units: true\n  gradient: true\n  language: fr\ncolors:\n  normal_color: \"#00b894\"\n  low_color: \"#fdcb6e\"\n  warn_color: \"#e17055\"\n  cool_color: \"#00BFFF\"\n  marker_color: \"#000000\"\n  hi_low_color: \"#00000099\"\nsensors:\n  temperature:\n    - entity: sensor.esp178_temperature_eau\n      setpoint: 30\n      step: 3\n  ph:\n    - entity: sensor.esp178_ph_ezo\n      setpoint: 7.2\n      step: 0.2\n  free_chlorine:\n    - entity: sensor.my_sampling_point_pl_chlorine_free\n      setpoint: 2\n      chlorine_step: 1\n  total_chlorine:\n    - entity: sensor.my_sampling_point_pl_chlorine_total\n      setpoint: 3\n      step: 1\n  cya:\n    - entity: sensor.my_sampling_point_pl_cyanuric_acid\n      setpoint: 37.5\n      step: 12.5\n  alkalinity:\n    - entity: sensor.my_sampling_point_pl_alkalinity\n      setpoint: 90\n      step: 30\n  pressure:\n    - entity: sensor.esp178_pression_filtre\n      unit: bar\n      setpoint: 1\n      step: 1\n  product_weight:\n    - entity: sensor.esp129_poids_ph_moins<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez utiliser \u00ab\u00a0auto-entites\u00a0\u00bb, vous visualisez ainsi toutes les entit\u00e9s contenant \u00ab\u00a0ESP178\u00a0\u00bb dans mon cas (c&rsquo;est le nom de mon ESP).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type: custom:auto-entities\ncard:\n  type: entities\n  show_header_toggle: false\n  title: ESP 178\nfilter:\n  include:\n    - entity_id: \"*esp178*\"\n      options: {}\n  exclude: &#091;]\nsort:\n  method: entity_id\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Am\u00e9liorations Possibles<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ajouter une sonde ORP calibr\u00e9e pour une r\u00e9gulation chlore plus pr\u00e9cise.<\/li>\n\n\n\n<li>Int\u00e9grer une pr\u00e9vision m\u00e9t\u00e9o pour ajuster la filtration.<\/li>\n\n\n\n<li>Tester le mode Ethernet (comment\u00e9 dans le code) pour plus de stabilit\u00e9.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Ce syst\u00e8me offre une gestion autonome et personnalisable de ma piscine, avec un co\u00fbt mat\u00e9riel raisonnable (&lt; 100\u20ac hors PCB). Le PCB maison et le sch\u00e9ma de c\u00e2blage ont grandement simplifi\u00e9 l\u2019installation et la maintenance. Le code est perfectible, mais il r\u00e9pond d\u00e9j\u00e0 \u00e0 mes besoins. Si vous voulez les fichiers PCB, le sch\u00e9ma EasyEda, ou des pr\u00e9cisions, laissez un commentaire !<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Liste des publications en lien avec cet article:<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Filtration avec <a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/21\/ha-gestion-complete-dune-piscine-avec-esp32-et-esphome\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/21\/ha-gestion-complete-dune-piscine-avec-esp32-et-esphome\/\" target=\"_blank\" rel=\"noreferrer noopener\">ESPHome et ESP32<\/a><\/li>\n\n\n\n<li>Filtration avec \u00ab\u00a0<a href=\"https:\/\/domo.rem81.com\/index.php\/2022\/02\/02\/ha-gestion-piscine-1-filtration-avec-appdaemon-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">AppDaemon\u00a0\u00bb<\/a><\/li>\n\n\n\n<li>Filtration avec \u00ab\u00a0<a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/01\/20\/home-assistant-gestion-piscine-filtration-poolpump\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pool Pump Manager<\/a>\u00ab\u00a0<\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/02\/24\/home-assistant-gestion-piscine-2_mesure-de-puissance-electrique\/\" target=\"_blank\" rel=\"noreferrer noopener\">Mesure de puissance \u00e9lectrique<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/04\/02\/home-assistant-gestion-piscine-1_mise-a-niveau-automatique\/\" target=\"_blank\" rel=\"noreferrer noopener\">Mise \u00e0 niveau automatique<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/05\/11\/home-assistant-gestion-piscine-4_mesure-ph\/\" target=\"_blank\" rel=\"noreferrer noopener\">Mesure du pH<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/08\/14\/ha-gestion-piscine-5_regulation-du-ph\/\" target=\"_blank\" rel=\"noreferrer noopener\">R\u00e9gulation du Ph<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2021\/11\/30\/ha-gestion-piscine-6_mode-hors-gel\/\" target=\"_blank\" rel=\"noreferrer noopener\">Mise Hors Gel<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2022\/05\/13\/ha-gestion-piscine-7_mesure-de-pression\/\" target=\"_blank\" rel=\"noreferrer noopener\">Mesure de pression<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/04\/04\/ha-mesurer-la-consommation-deau-de-ma-piscine-avec-un-esp8266-et-esphome\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/04\/04\/ha-mesurer-la-consommation-deau-de-ma-piscine-avec-un-esp8266-et-esphome\/\" target=\"_blank\" rel=\"noreferrer noopener\">Mesure consommation d&rsquo;eau<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/04\/11\/ha-panneau-de-commande-pour-piscine-avec-un-esp32-openhasp-et-home-assistant\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/04\/11\/ha-panneau-de-commande-pour-piscine-avec-un-esp32-openhasp-et-home-assistant\/\" target=\"_blank\" rel=\"noreferrer noopener\">Panneau de contr\u00f4le avec un ESP32<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/04\/13\/ha-analyse-de-leau-de-piscine-avec-le-poollab-2-0-et-integration-dans-home-assistant\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/04\/13\/ha-analyse-de-leau-de-piscine-avec-le-poollab-2-0-et-integration-dans-home-assistant\/\" target=\"_blank\" rel=\"noreferrer noopener\">Analyse de l&rsquo;eau avec PoolLAB2.0<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Intro Dans un article pr\u00e9c\u00e9dent, je vous pr\u00e9sentais un module de gestion de la filtration et traitement d&rsquo;une piscine d\u00e9velopp\u00e9 sous APP DAEMON. J&rsquo;ai depuis, pour simplifier la mise en &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[15,33],"class_list":["post-3198","post","type-post","status-publish","format-standard","hentry","category-homeassistant","tag-esp32","tag-piscine"],"_links":{"self":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/comments?post=3198"}],"version-history":[{"count":80,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3198\/revisions"}],"predecessor-version":[{"id":4410,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3198\/revisions\/4410"}],"wp:attachment":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/media?parent=3198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/categories?post=3198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/tags?post=3198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}