You are currently viewing Compteur d’eau à impulsion avec ESP32 sous ESPHome pour HA

Compteur d’eau à impulsion avec ESP32 sous ESPHome pour HA

tags : Compteur d’eau à impulsion avec ESP32 sous ESPHome pour HA

Matériel requis :

  • Un ESP32 ou esp32 Cam (11€)
  • Détecteur M18 inductif NPN NO 5V (14€)
  • Une alimentation facilement accessible près du compteur d’eau

Logiciel :

  • ESPHome installé sur Home Assistant

Information avant travaux ou achat :

Il faut vérifier que votre compteur fonctionne avec un disque gris avec un micro-aimant dessus (Sigle Ha + Ti sur Diehl correspondant au mien).

Le qualité du capteur inductif est primordial et surtout doit fonctionner sur 5V ce qui n’est pas souvent le cas. Voici celui que j’ai utilisé :

Voici le capteur avec un lien sponsorisé

Installation

  1. Brancher en USB l’ESP32 sur un port USB de votre machine avec Home Assistant.
  2. Allez dans ESPHome -> New Device -> Continue -> Nom -> ESP32 (copiez le code) -> Skip.

Et c’est parti pour le code ci-dessous :

esphome:
name: watermeter friendly_name: Watermeter
esp32:
board: esp32dev framework:
type: arduino
# Enable logging logger:
# Enable Home Assistant API api:
encryption:
key: "APIKEY"
ota:
password: "PASSWORD"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails ap:
ssid: "Watermeter Fallback Hotspot" password: "PASSWORD2"
captive_portal:

Nous venons ici d’obtenir le nom de l’ESP32 affiché sur votre réseau, le type de carte ESP, la clé API servant à la communication avec Home Assistant, les paramètres de votre réseau sans fil et un portail wifi en cas d’échec de connection au réseau wifi de votre domicile.

Configuration de la fonction compteur d’eau

switch:
-	platform: restart
name: "watermeter_reboot" sensor:
# Débit d'eau instantané (0 après 10s)
-	platform: pulse_meter name: "Debit eau froide" pin:
number: 12 inverted: true mode:
input: true pullup: true
internal_filter: 50ms icon: mdi:water timeout: 10s
unit_of_measurement: 'L' filters:
-	multiply: 1.00 total:
name: "Consommation eau froide" icon: mdi:water
device_class: water state_class: total_increasing unit_of_measurement: 'L' accuracy_decimals: 2 filters:
-	multiply: 1

Voila ! Le gros du boulot est là !

Détaillons un peu le pourquoi et comment du code :

  1. Création d’un interrupteur pour remettre à zero le suivi de comptage (Pratique si on fait des essais avec un aimant) mais ne servira probablement plus jamais.
  2. Création du sensor avec deux usages distincts :
  3. Platform : Pulse_meter

Il va compter le nombre d’impulsion jusqu’a l’arrêt du tirage d’eau.

Passé 10s sans tirer d’eau, il reprendra le comptage à zéro

pin :

number:12 (Celui qui correspond à mon ESP32) inverted: True

mode:

input: true pullup: true

(Capteur qui fonctionne en reliant le PIN 12 au GND de l’ESP comme un simple interrupteur)

internal_filter: 50ms (Evite les fausses détections) unit_of_measurement: « L/min »

Filters:

– multiply: 1.00 (Ajuster si votre compteur fait une impulsion autre que 1L/impulsion)

Total:

name: « Consommation d’eau froide » (Nom de l’entité) icon: « mdi:water » (Icône affiché)

device_class: water (Type d’entité)

state_class: total_increasing (Méthode de calcul) unit_of_measurement: « L » (Unité)

accuracy_decimals: « 2 » (Honnêtement inutile mais bon ca fait jolie) filters:

– multiply: 1.00 (Ajuster si votre compteur fait une impulsion autre que 1L/impulsion)

Allez ! On sauvegarde et on installe

Installation du matériel :

  • Le capteur, je l’ai collé grace à un double face de marque Cyanolit sur le compteur. (Cf : Photo du début)
  • Il existe surement des modèles 3D pour fixer le capteur à votre compteur d’eau
  • L’ESP32, il faudra le mettre dans un boitier resistant à l’humidité IP55 minimum si vous voulez être serein.

Affichage de la consommation journalière

Dans Home Assistant :

  1. Paramètres -> Entrées -> Créer une entrée -> Compteur de services publics.
  2. Choisir le capteur « consommation d’eau » et cycle de remise à zéro quotidien.

Une fois fait nous avons la consommation de m3/jour affichable. Personnellement, je préfère avoir l’affichage en L/jour

N’ayant pas trouvé la possibilité de choisir l’unité de mesure dans les entrées. J’ai donc créer une nouvelle entité afin de faire la conversion

Go dans le fichier « configuration.yaml » pour faire une multiplication

template:
  - sensor:
      - name: "Suivi Eau en Litre"
        unit_of_measurement: "L"
        state: "{{ (states('sensor.eau') | float(default=0)*1000)| round(2)}}"

Save -> Outils de développement -> Vérifier et redémarrer -> Redémarrer

Une fois redémarrer une nouvelle entité « Suivi Eau en Litre » est créer ! Et cela ce remettra à zéro tout les jours !


Conclusion

Avec cette installation, vous pouvez suivre votre consommation d’eau en temps réel, détecter les fuites, et optimiser votre consommation via des automatisations Home Assistant.

Fabien EON