{"id":3428,"date":"2024-06-01T12:13:16","date_gmt":"2024-06-01T10:13:16","guid":{"rendered":"https:\/\/domo.rem81.com\/?p=3428"},"modified":"2026-05-12T08:07:04","modified_gmt":"2026-05-12T06:07:04","slug":"ha-mesurer-le-niveau-deau-dun-puit-avec-un-esp32","status":"publish","type":"post","link":"https:\/\/domo.rem81.com\/index.php\/2024\/06\/01\/ha-mesurer-le-niveau-deau-dun-puit-avec-un-esp32\/","title":{"rendered":"HA-Mesurer le Niveau d\u2019Eau d\u2019un Puit avec un ESP32"},"content":{"rendered":"\n\n\n\n<h1 class=\"wp-block-heading\">Intro<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Dans mes projets domotiques, j\u2019aime relever des d\u00e9fis pratiques. Aujourd\u2019hui, je vous pr\u00e9sente un syst\u00e8me que j\u2019ai con\u00e7u pour mesurer le niveau d\u2019eau dans un puits situ\u00e9 trop loin de mon r\u00e9seau Wi-Fi. Pour cela, j\u2019utilise un ESP32 connect\u00e9 en Ethernet (avec une option Wi-Fi possible), un capteur Modbus avec un afficheur 4-20 mA, et une sonde de niveau 4\/20mA. La sonde de temp\u00e9rature DS18B20 est optionnelle. <\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Objectif du projet<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019objectif est de surveiller \u00e0 distance le niveau d\u2019eau d\u2019un puit \u00e9loign\u00e9, en calculant le niveau, le volume et le pourcentage de remplissage. Ces donn\u00e9es sont envoy\u00e9es \u00e0 Home Assistant via une connexion Ethernet stable, bien que le syst\u00e8me puisse aussi fonctionner en Wi-Fi si n\u00e9cessaire. Ce projet allie fiabilit\u00e9 et flexibilit\u00e9 pour une int\u00e9gration domotique compl\u00e8te.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Le mat\u00e9riel utilis\u00e9<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ESP32 avec module Ethernet WT32-ETH01<\/strong> : Une carte combinant un ESP32 et une interface Ethernet LAN8720, id\u00e9ale pour les zones hors port\u00e9e Wi-Fi.<\/li>\n\n\n\n<li><strong>Convertisseur TTL\/RS485<\/strong> : J\u2019utilise <a href=\"https:\/\/fr.aliexpress.com\/item\/1005003204223371.html\" target=\"_blank\" rel=\"noreferrer noopener\">ce mod\u00e8le<\/a> pour interfacer le capteur Modbus avec l\u2019ESP32.<\/li>\n\n\n\n<li><strong>Afficheur 4-20 mA avec RS485<\/strong> : Cet <a href=\"https:\/\/fr.aliexpress.com\/item\/1005004006945268.html\" target=\"_blank\" rel=\"noreferrer noopener\">afficheur universel<\/a> (mod\u00e8le HXDSBOXAI-485) mesure le niveau d\u2019eau via une entr\u00e9ee analogique 4-20 mA et communique via Modbus-RTU. Il est configurable pour afficher des valeurs physiques (niveau, pourcentage, etc.) et supporte une alimentation DC 6-25V.<\/li>\n\n\n\n<li><strong>Capteur de niveau<\/strong>: <a href=\"https:\/\/fr.aliexpress.com\/item\/1005007233513998.html?spm=a2g0o.detail.pcDetailTopMoreOtherSeller.2.7606QENOQENOEN&amp;gps-id=pcDetailTopMoreOtherSeller&amp;scm=1007.40050.354490.0&amp;scm_id=1007.40050.354490.0&amp;scm-url=1007.40050.354490.0&amp;pvid=43ce14fa-642f-495d-8351-6f6471d1f84c&amp;_t=gps-id:pcDetailTopMoreOtherSeller,scm-url:1007.40050.354490.0,pvid:43ce14fa-642f-495d-8351-6f6471d1f84c,tpp_buckets:668%232846%238112%231997&amp;pdp_ext_f=%7B%22order%22%3A%22173%22%2C%22eval%22%3A%221%22%2C%22sceneId%22%3A%2230050%22%7D&amp;pdp_npi=4%40dis%21EUR%2129.99%2127.99%21%21%21229.79%21214.49%21%402103856417429833319078333eba6c%2112000040524237570%21rec%21FR%21833459399%21X&amp;utparam-url=scene%3ApcDetailTopMoreOtherSeller%7Cquery_from%3A\" data-type=\"link\" data-id=\"https:\/\/fr.aliexpress.com\/item\/1005007233513998.html?spm=a2g0o.detail.pcDetailTopMoreOtherSeller.2.7606QENOQENOEN&amp;gps-id=pcDetailTopMoreOtherSeller&amp;scm=1007.40050.354490.0&amp;scm_id=1007.40050.354490.0&amp;scm-url=1007.40050.354490.0&amp;pvid=43ce14fa-642f-495d-8351-6f6471d1f84c&amp;_t=gps-id:pcDetailTopMoreOtherSeller,scm-url:1007.40050.354490.0,pvid:43ce14fa-642f-495d-8351-6f6471d1f84c,tpp_buckets:668%232846%238112%231997&amp;pdp_ext_f=%7B%22order%22%3A%22173%22%2C%22eval%22%3A%221%22%2C%22sceneId%22%3A%2230050%22%7D&amp;pdp_npi=4%40dis%21EUR%2129.99%2127.99%21%21%21229.79%21214.49%21%402103856417429833319078333eba6c%2112000040524237570%21rec%21FR%21833459399%21X&amp;utparam-url=scene%3ApcDetailTopMoreOtherSeller%7Cquery_from%3A\" target=\"_blank\" rel=\"noreferrer noopener\">Sonde 4\/20 mA<\/a> longueur de cable \u00e0 adapter (6m dans mon cas).<\/li>\n\n\n\n<li><strong>Sonde DS18B20<\/strong> : Connect\u00e9e pour mesurer la temp\u00e9rature ambiante du chalet abritant le puits .<\/li>\n\n\n\n<li><strong>C\u00e2ble Ethernet<\/strong> : Pour une connexion r\u00e9seau fiable.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"374\" height=\"184\" data-id=\"3436\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-09-58.png\" alt=\"\" class=\"wp-image-3436\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-09-58.png 374w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-09-58-300x148.png 300w\" sizes=\"auto, (max-width: 374px) 100vw, 374px\" \/><figcaption class=\"wp-element-caption\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\"><strong>Convertisseur TTL\/RS485<\/strong><\/mark><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"371\" height=\"343\" data-id=\"3435\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-09-15.png\" alt=\"\" class=\"wp-image-3435\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-09-15.png 371w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-09-15-300x277.png 300w\" sizes=\"auto, (max-width: 371px) 100vw, 371px\" \/><figcaption class=\"wp-element-caption\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\"><strong>Afficheur local<\/strong><\/mark><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"369\" height=\"357\" data-id=\"3432\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-06-42.png\" alt=\"\" class=\"wp-image-3432\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-06-42.png 369w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-26-11-06-42-300x290.png 300w\" sizes=\"auto, (max-width: 369px) 100vw, 369px\" \/><figcaption class=\"wp-element-caption\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\">Sonde 4\/20 mA<\/mark><\/strong><\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pinout utilis\u00e9 sur le WT32-ETH01 :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GPIO32 : Sonde DS18B20 (OneWire)<\/li>\n\n\n\n<li>GPIO17 : TXD pour Modbus<\/li>\n\n\n\n<li>GPIO5 : RXD pour Modbus<\/li>\n\n\n\n<li>GPIO33 : Contr\u00f4le RS485 (485_EN)<\/li>\n\n\n\n<li>GPIO23, GPIO18, GPIO16 : Pins Ethernet (MDC, MDIO, Power)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">L\u2019afficheur 4-20 mA<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019afficheur que j\u2019ai choisi est un compteur d\u2019entr\u00e9e analogique universel avec interface RS485. Voici ses caract\u00e9ristiques principales :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Compatibilit\u00e9<\/strong> : Il s\u2019adapte \u00e0 divers capteurs analogiques (temp\u00e9rature, pression, niveau, etc.) avec une entr\u00e9e 4-20 mA ou 0-10V.<\/li>\n\n\n\n<li><strong>Configuration<\/strong> : Par d\u00e9faut, il g\u00e8re 0-20 mA ou 0-10V, mais les param\u00e8tres de gain (F1-2) et de d\u00e9calage (F1-3) permettent d\u2019ajuster la plage. J\u2019ai configur\u00e9 F1-0 sur \u00ab\u00a01\u00a0\u00bb pour une entr\u00e9e 4-20 mA correspondant \u00e0 0-100 %.<\/li>\n\n\n\n<li><strong>Affichage<\/strong> : Par d\u00e9faut en pourcentage, mais j\u2019ai d\u00e9fini une plage personnalis\u00e9e (F0-3 \u00e0 F0-4) pour afficher le niveau en m\u00e8tres, \u00e0 adapter \u00e0 la sonde: 0-6 ml dans mon cas.<\/li>\n\n\n\n<li><strong>Modbus-RTU<\/strong> : Avec une adresse par d\u00e9faut de 1 (F7-0) et un baud rate de 9600 (F7-1), il communique facilement avec l\u2019ESP32.<\/li>\n\n\n\n<li><strong>Alimentation<\/strong> : 24V\/40 mA, avec protection contre les surtensions.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Cet afficheur est compact (79 \u00d7 43 \u00d7 25 mm) et robuste, parfait pour un environnement ext\u00e9rieur comme un puits.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Mise en \u0153uvre : c\u00e2blage et connexions<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Le sch\u00e9ma suivant, r\u00e9alis\u00e9 avec EasyEDA, illustre les connexions entre le WT32-ETH01, l\u2019afficheur 4-20 mA, la sonde DS18B20 et l\u2019alimentation :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"725\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Schematic_ESP32-Lecture-niveau-puit_2025-03-26-1024x725.png\" alt=\"\" class=\"wp-image-3457\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Schematic_ESP32-Lecture-niveau-puit_2025-03-26-1024x725.png 1024w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Schematic_ESP32-Lecture-niveau-puit_2025-03-26-300x212.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Schematic_ESP32-Lecture-niveau-puit_2025-03-26-768x544.png 768w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/Schematic_ESP32-Lecture-niveau-puit_2025-03-26.png 1169w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Analyse du sch\u00e9ma :<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Alimentation<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Un module MP1584EN convertit une entr\u00e9e 220V AC (via un transformateur 220V AC\/15V DC) en 5V DC pour alimenter le WT32-ETH01 et l\u2019afficheur.<\/li>\n\n\n\n<li>Les pins 5V et GND du WT32-ETH01 (broches 9 et 8) sont utilis\u00e9es pour alimenter la carte.<\/li>\n\n\n\n<li>L\u2019afficheur 4-20 mA est aliment\u00e9 via ses bornes PWR et GND (DC 6-25V), ici connect\u00e9es \u00e0 la sortie 5V du MP1584EN.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Connexion Ethernet<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Le port Ethernet (netPort0) du WT32-ETH01 est connect\u00e9 \u00e0 un c\u00e2ble RJ45 pour rejoindre mon r\u00e9seau local.<\/li>\n\n\n\n<li>Les pins GPIO23 (MDC), GPIO18 (MDIO), et GPIO16 (Power) g\u00e8rent la communication Ethernet, comme configur\u00e9 dans le code ESPHome.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Connexion Modbus (Afficheur 4-20 mA)<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Le convertisseur TTL\/RS485 (MAX485-TTL) est utilis\u00e9 pour interfacer l\u2019ESP32 avec l\u2019afficheur.<\/li>\n\n\n\n<li>C\u00f4t\u00e9 ESP32 : TX (GPIO17), RX (GPIO5), et Flow Control (GPIO33) sont connect\u00e9s au MAX485.<\/li>\n\n\n\n<li>C\u00f4t\u00e9 afficheur : Les bornes 485+ et 485- de l\u2019afficheur (HXDSBOXAI-485) sont connect\u00e9es aux bornes A et B du MAX485.<\/li>\n\n\n\n<li>La sonde de niveau (non d\u00e9taill\u00e9e dans le sch\u00e9ma) est connect\u00e9e aux bornes A+ et MA de l\u2019afficheur pour fournir le signal 4-20 mA.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Sonde DS18B20<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Connect\u00e9e \u00e0 GPIO32 (OneWire) via un connecteur JST-XH-03.<\/li>\n\n\n\n<li>Une r\u00e9sistance de pull-up de 4.7 k\u03a9 (R1) est plac\u00e9e entre les lignes de donn\u00e9es et VCC (5V) pour assurer une communication stable.<\/li>\n\n\n\n<li>Les bornes VCC, GND et DATA de la sonde sont connect\u00e9es respectivement \u00e0 5V, GND et GPIO32.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Connecteurs suppl\u00e9mentaires<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Un connecteur JST-XH-03 (Afficheur) est pr\u00e9vu pour les signaux de la sonde de niveau (A+, A-, GND).<\/li>\n\n\n\n<li>Un connecteur SX1509 (non utilis\u00e9 ici) est pr\u00e9sent pour d\u2019\u00e9ventuelles extensions.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tapes de mise en \u0153uvre :<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Alimentation<\/strong> : Connectez le module MP1584EN \u00e0 une source 220V AC via un transformateur 15V DC. Branchez la sortie 5V aux pins 5V et GND du WT32-ETH01 et de l\u2019afficheur.<\/li>\n\n\n\n<li><strong>Ethernet<\/strong> : Reliez le port Ethernet du WT32-ETH01 \u00e0 votre r\u00e9seau via un c\u00e2ble RJ45.<\/li>\n\n\n\n<li><strong>Modbus<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Connectez le convertisseur TTL\/RS485 \u00e0 l\u2019ESP32 : TX (GPIO17), RX (GPIO5), Flow Control (GPIO33).<\/li>\n\n\n\n<li>Reliez les bornes A et B du convertisseur aux bornes 485+ et 485- de l\u2019afficheur.<\/li>\n\n\n\n<li>Branchez la sonde de niveau aux bornes A+ et MA de l\u2019afficheur.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>DS18B20<\/strong> : Connectez la sonde \u00e0 GPIO32 avec une r\u00e9sistance de 4.7 k\u03a9 entre VCC et DATA.<\/li>\n\n\n\n<li><strong>Flasher l\u2019ESP32<\/strong> : Utilisez ESPHome Dashboard pour uploader le firmware via USB.<\/li>\n\n\n\n<li><strong>V\u00e9rification<\/strong> : Une fois aliment\u00e9, l\u2019ESP32 se connecte au r\u00e9seau (LED LINK sur le WT32-ETH01 s\u2019allume), et les donn\u00e9es apparaissent dans Home Assistant.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"858\" height=\"587\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-12.png\" alt=\"\" class=\"wp-image-3458\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-12.png 858w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-12-300x205.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-12-768x525.png 768w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-12-135x93.png 135w\" sizes=\"auto, (max-width: 858px) 100vw, 858px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/IMG_0579-1-768x1024.jpeg\" alt=\"\" class=\"wp-image-3459\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/IMG_0579-1-768x1024.jpeg 768w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/IMG_0579-1-225x300.jpeg 225w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/IMG_0579-1-1152x1536.jpeg 1152w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/IMG_0579-1.jpeg 1536w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">La configuration avec ESPHome<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019utilise <strong>ESPHome<\/strong> pour programmer l\u2019ESP32 et int\u00e9grer les donn\u00e9es dans Home Assistant. Voici le code YAML :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#Pin Name Description\n#1 EN1 Enable signal, active high\n#2 CFG IO32, CFG                       ---&lt;\n#3 485_EN Enable pin of IO33, RS485    ---&lt;\n#4 RXD IO5, RXD2                       ---&lt;\n#5 TXD IO17, TXD2                      ---&lt;\n#6 GND GND\n#7 3V3 3V3 power supply\n#8 GND GND\n#9 5V 5V power supply\n#10 LINK Network connection indicator pin\n#11 GND GND\n#12 IO39 IO39, only supports input\n#13 IO36 IO36, only supports input\n#14 IO15 IO15\n#15 I014 IO14\n#16 IO12 IO12\n#17 IO35 IO35, only supports input\n#18 IO4 IO4\n#19 IO2 IO2\n#20 GND GND\n\n\nsubstitutions:\n  device_name: esp174-esp32-eth0-chalet2\n  adress_ip: \"192.168.0.174\"\n  friendly_name: esp174\n  time_timezone: \"Europe\/Paris\"\n  \nesphome:\n  name: ${device_name}\n    \nesp32:\n  board: wt32-eth01 #esp-wrover-kit\n  framework:\n    type: esp-idf\n\n# Enable logging\nlogger:\n  level: info\n\n# Enable Home Assistant API\napi:\nota:\n  platform: esphome\nweb_server:\n  port: 80\n\nethernet:\n  type: LAN8720\n  mdc_pin: GPIO23\n  mdio_pin: GPIO18\n  clk_mode: GPIO0_IN\n  phy_addr: 1\n  power_pin: GPIO16\n\n  manual_ip:\n    static_ip: ${adress_ip}\n    gateway: 192.168.0.254\n    subnet: 255.255.255.0\n    dns1: 192.168.0.254\n    \n# Connection sonde(s) de temp\u00e9rature DS18b20\none_wire:\n  - platform: gpio    \n    pin: 32\n\n  \nuart:\n  id: mod_bus\n  tx_pin: 17\n  rx_pin: 5\n  baud_rate: 9600\n  stop_bits: 1\n  debug:\n    direction: BOTH\n    dummy_receiver: false\n    after:\n      timeout: 150ms\n    sequence:\n      - lambda: |-\n          UARTDebug::log_string(direction, bytes);\n\nmodbus:\n  #send_wait_time: 200ms\n  id: modbus1\n  flow_control_pin: 33\n\nmodbus_controller:\n  - id: afficheur\n    ## the Modbus device addr\n    address: 0x1\n    modbus_id: modbus1\n    update_interval: 10s\n    command_throttle: 50ms\n    # setup_priority: -10\nsensor:  \n\n# Lecture Registre F0-1 -> Valeur affich\u00e9e\n  - platform: modbus_controller\n    modbus_controller_id: afficheur\n    id: _niv_eau\n    name: \"${friendly_name}_Niveau_Puit\"\n    address: 0x0001\n    unit_of_measurement: \"mL\"\n    register_type: holding\n    value_type: U_WORD\n    accuracy_decimals: 2\n    #register_count: 1\n    #response_size: 2\n    device_class: volume\n    state_class: measurement\n    filters:\n      - multiply: 0.01\n#      - sliding_window_moving_average:\n#          window_size: 10 # moyenne sur x lectures\n#          send_every: 5 # envoi toutes les x lectures\n#          send_first_at: 1 # envoi \u00e0 la premiere lecture\n\n\n  - platform: dallas_temp\n    address: 0xab0321117f919d28\n    name: \"${friendly_name}_temperature_air\"\n    update_interval: 60s    \n    id: temp_air\n    filters:\n      - filter_out: 0.0\n\n############### TEMPLATE  ######################\"\n# Calcul volume eau\n  - platform: template\n    name: \"${friendly_name}_volume_puit\"\n    id: volume\n    icon: mdi:flash\n    unit_of_measurement: \"m\u00b3\"\n    device_class: volume\n    state_class: measurement    \n    accuracy_decimals: 2\n    lambda: |-\n      return (id(_niv_eau).state*0.6*0.6*3.14159);\n      \n  - platform: template\n    name: \"${friendly_name}_niveau_remplissage_puit\"\n    id: niveau\n    icon: mdi:flash\n    unit_of_measurement: \"%\"\n    state_class: measurement    \n    accuracy_decimals: 2\n    lambda: |-\n      return (id(_niv_eau).state\/5.8*100);\n\n  - platform: template\n    name: \"${friendly_name}_niveau_reserve_puit\"\n    id: niveau_reserve\n    icon: mdi:flash\n    unit_of_measurement: \"m\"\n    device_class: distance\n    state_class: measurement    \n    accuracy_decimals: 2\n    lambda: |-\n      return (5.8-id(_niv_eau).state);\n\n#Etat de la connection\nbinary_sensor:\n  - platform: status\n    name: \"${friendly_name} Status\"\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Explications :<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ethernet<\/strong> : Configur\u00e9 avec une IP statique (192.168.0.174) pour une connexion fiable. Les pins GPIO23, GPIO18 et GPIO16 g\u00e8rent le module LAN8720.<\/li>\n\n\n\n<li><strong>Modbus<\/strong> : L\u2019afficheur est interrog\u00e9 toutes les 10 secondes via UART (9600 bauds). Le registre 0x0001 donne le niveau brut, converti en m\u00e8tres (x0.01).<\/li>\n\n\n\n<li><strong>DS18B20<\/strong> : Mesure la temp\u00e9rature toutes les 60 secondes.<\/li>\n\n\n\n<li><strong>Capteurs calcul\u00e9s<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Volume : niveau * \u03c0 * (0.6 m)\u00b2 (puits cylindrique de 60 cm de diam\u00e8tre).<\/li>\n\n\n\n<li>Pourcentage : niveau \/ 5.8 * 100 (profondeur max de 5.8 m).<\/li>\n\n\n\n<li>R\u00e9serve : 5.8 &#8211; niveau.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Wi-Fi possible<\/strong> : En rempla\u00e7ant la section ethernet par une configuration wifi si le signal est correct.<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">Installation et mise en route<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>C\u00e2blage<\/strong> :\n<ul class=\"wp-block-list\">\n<li>Convertisseur TTL\/RS485 : TX (GPIO17), RX (GPIO5), contr\u00f4le (GPIO33).<\/li>\n\n\n\n<li>Afficheur 4-20 mA : Connect\u00e9 au convertisseur via RS485 (A+, B-).<\/li>\n\n\n\n<li>DS18B20 : Sur GPIO32.<\/li>\n\n\n\n<li>Ethernet : C\u00e2ble RJ45 au r\u00e9seau.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Configuration de l\u2019afficheur<\/strong> : R\u00e9gl\u00e9 sur 4-20 mA (F1-0=1), plage d\u2019affichage personnalis\u00e9e via F0-3\/F0-4, adresse Modbus 1.<\/li>\n\n\n\n<li><strong>Flasher l\u2019ESP32<\/strong> : Via ESPHome Dashboard avec un c\u00e2ble USB.<\/li>\n\n\n\n<li><strong>Home Assistant<\/strong> : L\u2019API d\u00e9tecte automatiquement les entit\u00e9s comme sensor.esp174_Niveau_Puit.<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">Utilisation dans Home Assistant<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Les donn\u00e9es (niveau, volume, pourcentage, temp\u00e9rature) alimentent mes automatisations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple d&rsquo;automatisme<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"> Surveillance du niveau du puit avec notification si niveau inf\u00e9rieur \u00e0 0.8ml pendant 5mn.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>alias: Notification niveau bas puits\ndescription: \"\"\nmode: single\ntriggers:\n  - entity_id:\n      - sensor.esp174_niveau_remplissage_puit\n    for:\n      hours: 0\n      minutes: 5\n      seconds: 0\n    below: 0.8\n    trigger: numeric_state\nconditions: &#091;]\nactions:\n  - data:\n      message: &gt;-\n        {{states(\"sensor.date_time\") }}{{-\"\\n\"-}} Niveau Puit\n        {{states('sensor.esp174_niveau_puit')}} ml\n      title: Niveau eau puit inferieur \u00e0 0.8 ml depuis 10mn\n    action: notify.telegram\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Surveillance de la temp\u00e9rature et notification via le Blueprint Notification \u00ab\u00a0Nagging Alerting Notification Automation\u00a0\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avec le \u00ab\u00a0binary_sensor.alarme_temp_chalet_bass\u00a0\u00bb calcul\u00e9 dans \u00ab\u00a0\/config\/helpers\/\u00a0\u00bb<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"572\" height=\"669\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-11.png\" alt=\"\" class=\"wp-image-3449\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-11.png 572w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-11-257x300.png 257w\" sizes=\"auto, (max-width: 572px) 100vw, 572px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>alias: BluePrint Notification Temp basse Chalet\ndescription: \"# Surveillance de la temperature du chalet\"\nuse_blueprint:\n  path: pavax\/nagging_alert_notification.yaml\n  input:\n    condition_entity_state: \"on\"\n    sensor_entity: binary_sensor.alarme_temp_chalet_basse\n    alert_state: \"on\"\n    alert_action:\n      - data:\n          message: &gt;-\n            {{states(\"sensor.date_time\") }} {{-\"\\n\"-}}T\u00b0 Basse Chalet\n            ={{states(\"sensor.esp174_temperature_air\") }}\u00b0C\n          title: Alarme Temperature Basse Chalet!!!\n        action: notify.telegram\n    resolved_action:\n      - data:\n          message: &gt;-\n            {{states(\"sensor.date_time\") }} {{-\"\\n\"-}}T\u00b0 Basse Chalet\n            ={{states(\"sensor.esp174_temperature_air\") }}\u00b0C\n          title: Fin Alarme Temperature Basse chalet !!!\n        action: notify.telegram\n    notify_message: \" \"\n    notify_device: 367dba31447009458e03b70e3a29b6b2\n    repeat_delay: 1800\n    resolved_message: \" \"\n    initial_delay: 300\n    max_alerts: 5\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple carte<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"435\" height=\"546\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-10.png\" alt=\"\" class=\"wp-image-3444\" style=\"width:735px;height:auto\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-10.png 435w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-10-239x300.png 239w\" sizes=\"auto, (max-width: 435px) 100vw, 435px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>type: grid\ncards:\n  - type: heading\n    heading_style: title\n    heading: NIVEAU PUIT\n  - type: custom:mushroom-entity-card\n    entity: sensor.esp174_niveau_puit\n    name: Niveau Puit\n  - type: tile\n    entity: sensor.esp174_volume_puit\n    name: Volume\n  - type: tile\n    entity: sensor.esp174_niveau_reserve_puit\n    name: Reserve\n    icon: mdi:arrow-expand-vertical\n  - type: tile\n    entity: sensor.esp174_niveau_remplissage_puit\n    name: Remplissage\n    icon: mdi:water-well-outline\n  - chart_type: line\n    period: day\n    type: statistics-graph\n    entities:\n      - sensor.esp174_niveau_puit\n    days_to_show: 3\n    hide_legend: true\n    stat_types:\n      - state\n      - min\n      - max\n      - mean\n    logarithmic_scale: false\n  - type: grid\n    cards:\n      - type: statistic\n        entity: sensor.esp174_niveau_puit\n        period:\n          calendar:\n            period: week\n        stat_type: min\n        name: Min\n      - type: statistic\n        entity: sensor.esp174_niveau_puit\n        period:\n          calendar:\n            period: week\n        stat_type: mean\n        name: Moyenne\n      - type: statistic\n        entity: sensor.esp174_niveau_puit\n        period:\n          calendar:\n            period: week\n        stat_type: max\n        name: Max\n<\/code><\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"422\" height=\"491\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-9.png\" alt=\"\" class=\"wp-image-3442\" style=\"width:735px;height:auto\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-9.png 422w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/03\/image-9-258x300.png 258w\" sizes=\"auto, (max-width: 422px) 100vw, 422px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>type: grid\ncards:\n  - type: heading\n    heading: TEMPERATURE AMBIANTE\n    heading_style: title\n    badges: &#091;]\n  - type: custom:mushroom-entity-card\n    entity: sensor.esp174_temperature_air\n    name: Temp Ambiante\n    fill_container: false\n  - chart_type: line\n    period: day\n    type: statistics-graph\n    entities:\n      - sensor.esp174_temperature_air\n    stat_types:\n      - min\n      - mean\n      - max\n    hide_legend: true\n    days_to_show: 3\n  - type: grid\n    cards:\n      - type: statistic\n        entity: sensor.esp174_temperature_air\n        period:\n          calendar:\n            period: week\n        stat_type: min\n        name: Min\n      - type: statistic\n        entity: sensor.esp174_temperature_air\n        period:\n          calendar:\n            period: week\n        stat_type: mean\n        name: Moyenne\n      - type: statistic\n        entity: sensor.esp174_temperature_air\n        period:\n          calendar:\n            period: week\n        stat_type: max\n        name: Max\n  - type: heading\n    heading_style: title\n    badges: &#091;]\n    heading: ESP CHALET et PZEM\n  - type: vertical-stack\n    cards:\n      - square: false\n        columns: 2\n        type: grid\n        cards:\n          - type: custom:mushroom-entity-card\n            entity: binary_sensor.esp174_status\n            icon: mdi:account\n            name: Status ESP174\n          - type: custom:mushroom-entity-card\n            entity: binary_sensor.esp131_pzem_chalet_status\n            icon: mdi:account\n            name: Status ESP131 (PZEM)\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Pourquoi ce syst\u00e8me ?<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Fiabilit\u00e9<\/strong> : L\u2019Ethernet assure une connexion stable l\u00e0 o\u00f9 le Wi-Fi ne passe pas.<\/li>\n\n\n\n<li><strong>Flexibilit\u00e9<\/strong> : L\u2019afficheur Modbus et le code ESPHome s\u2019adaptent \u00e0 d\u2019autres capteurs ou configurations (Wi-Fi si besoin).<\/li>\n\n\n\n<li><strong>\u00c9conomique<\/strong> : Avec un WT32-ETH01 (~15 \u20ac), un convertisseur (~2 \u20ac) et un afficheur (~10 \u20ac), c\u2019est abordable mais le plus on\u00e9reux \u00e9tant la sonde 4\/20 ma (~50\u20ac).<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Cet ESP32 avec Ethernet et Modbus me permet de surveiller le niveau d\u2019eau de mon puits avec pr\u00e9cision, m\u00eame loin de mon Wi-Fi. Int\u00e9gr\u00e9 \u00e0 Home Assistant, il enrichit mes automatisations tout en restant flexible. Si vous avez un puits ou un projet \u00e0 distance, ce syst\u00e8me pourrait vous inspirer. Des id\u00e9es pour l\u2019am\u00e9liorer ? Laissez un commentaire sur domo.rem81.com !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro Dans mes projets domotiques, j\u2019aime relever des d\u00e9fis pratiques. Aujourd\u2019hui, je vous pr\u00e9sente un syst\u00e8me que j\u2019ai con\u00e7u pour mesurer le niveau d\u2019eau dans un puits situ\u00e9 trop loin &hellip; <\/p>\n","protected":false},"author":1,"featured_media":3454,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[15],"class_list":["post-3428","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-homeassistant","tag-esp32"],"_links":{"self":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3428","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=3428"}],"version-history":[{"count":22,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3428\/revisions"}],"predecessor-version":[{"id":4392,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3428\/revisions\/4392"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/media\/3454"}],"wp:attachment":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/media?parent=3428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/categories?post=3428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/tags?post=3428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}