[Article] Gestion de sa consommation d'eau

ah punaise j’avais essayé mais en tapant card_mod !!!

Sinon je n’arrive pas à avoir le compteur qui s’active :

mon esp 32 (un mini esp32) :


Je branche mon capteur sur GND et IO16 (ces 2 pins sont côte à côte).
Déjà, le sens de branchement du capteur d’eau est-il important ?

Dans le yaml au départ, j’ai remplacé GPIO25 par GPIO16 aux 2 endroits.

Malgré cela, le compteur d’eau ne détecte rien malgré plusieurs tirage d’eau au robinet.

Le capteur marche bien, j’avais fait un montage et un prog arduino qui me servait de compteur.

Merci pour votr eaide.

Pas de sens, c’est un contact.
Pour tes tests, tu peux juste alterner contact / pas contact en branchant 2 câbles Dupont sur l’entrée pour ne pas avoir à tirer de l’eau.
Ce devrait marcher : essaie de changer de gpio, de transfo (peut être l’alim pas bonne), d’esp32.

ok, je vais essayer.

Merci

EDIT : oh punaise, honte à moi. J’ai pris un esp32 dans un placard qui avait des pins soudées… Mais seules les 4 premières étaient soudées et pas celles à partir de IO16 !!! Avec la soudure ça marche mieux ! :wink:

1 « J'aime »

J’ai quand même un problème :

Dans le vue des helpers :

Mais sur le graph et le logbook card :

Comment est-ce possible ?

Merci

Bon le graphique s’est mis à jour à 11h.

Ca, ça marche.

maintenant pour les 50 derniers tirages je reste désespérément à 0L.
En revanche si je teste :
(outils de dev -->modele–> et j copie/colle :
states(‹ sensor.eau_froide_annuel ›)|float(0)*1000

HA répond : Ce modèle n’écoute aucun événement et ne se mettra pas à jour automatiquement.

Donc là je pense que le contenu de mon automation ne focntionne pas, pourtant j’ai fait un copié/collé du tuto !!!

Merci pour votre aide.

PS : j’ai bien des apostrophes et pas des < > à l’intéreiru des parenthèses. En validant mon message, les symboles sont changés !

Salut,
A priori un pb de syntaxe :wink: il doit manquer les accolades {{ et }} ?

J’avais un soucis depuis le début vec consommation_annuelle et consommation_annuel en tout début de tuto !
Certains paramètres ne sont plus les mêmes dans HA entre la date du tuto et auj.

Certes, il peut être créé dans le fichier de configuration YAML, mais Home Assistant permet l’utilisation de helper : aller dans Paramètres - Appareils et Services - Entrées puis créer un Compteur de Services appelé eau_froide_annuel.

    ID de l’entité : eau_froide_annuel
    Nom: consommation eau froide annuelle
    Le capteur d’entrée est l’entité fournie par ESPHome consommation_eau_froide.
    Le compteur sera remis à 0 chaque début d’année. Le cycle de remise à 0 est annuel.
    Laisser les autres informations par défaut

Nul part on peut entrer le ID de l(entité quand on crée le helper !!!
Du coup eau_froide_annuel n’existe pas !
En revhance en mettant consommation eau froide annuelle dans l’automation ça fonctiàonne !!!

Salut,
Content que ça fonctionne correctement. Deux petites remarques néanmoins :

  • Les tutos sont parfois trompeur et souvent « vite » dépassés du aux évolutions rapides de HA. Les evol de HA sont à mon avis une bonne choses, et les tuto doivent être pris comme une source plus que comme une bible intangible
  • Il est possible de modifier les ID des entités créés par Helper. Mais uniquement après la création, et avec parcimonie, car une fois utilisé dans les automatisations ou autre, ce n’est pas évident de faire la chasse au ID modifié et qui ne fonctionne plus :wink:

2 « J'aime »

Il me reste un pb avec le script envoyé sur l’esp je pense.
Mon compteur (gioanola) est un 1l par impulsion.
Chez moi la pression est pas énorme, donc il me faut plus de 5s pour avoir une impulsion (enfin le temps que l’aiguille fasse le tour)
Donc avec le script d’origine, le nombre de litres d’eau est bien correct, en revanche j’ai toujours 0 en débit; donc aucun automation ne fonctionne.
En mettant 20s au lieu de 5s, le debit retourné n’est plus égal à 0.

J’ai modifié le programme pour faire clignoter la led interne à chaque impulsion, et le code fonctionne bien : à chaque passage de l’aiguille sur le compteur, la led clignote, une impulsion est bien détectée

esphome:
  name: esp-eau
  friendly_name: esp-eau

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "CVhrn27ot57jybcL6BQ1l26rIIjPdURidS5UUZHDWYo="

ota:
  - platform: esphome
    password: "d75b300f322d07f83e6122c742b3e10b"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp-Eau Fallback Hotspot"
    password: "YkS06g0usSiM"

captive_portal:

globals:
  # Variable interne pour compter nombre litres
  - id: ef_compteur_litres
    type: float
    initial_value: "0"

binary_sensor:
  # comptage du nombre de litres : 1 impulsion ajoute 0.25 (compteur 0.25 / litre)
  - platform: gpio
    id: ef_pulse
    pin:
      number: GPIO16
      allow_other_uses: true
      mode: INPUT_PULLUP
      inverted: True
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms
    on_press:
      then:
        - lambda: |-
            id(ef_compteur_litres) += 1;
            id(ef_compteur_m3).publish_state(id(ef_compteur_litres)/1000);
        - output.turn_on: led_internal
        - delay: 200ms
        - output.turn_off: led_internal

sensor:
  # Débit d'eau instantané (0 après 10s)
  - platform: pulse_meter
    name: "Debit eau froide"
    pin:
      number: GPIO16
      inverted: true
      allow_other_uses: true
      mode:
        input: true
        pullup: true
    internal_filter: 100ms
    icon: mdi:water
    timeout: 20s
    unit_of_measurement: 'l/mn'

  # Comptage en m³
  - platform: template
    name: "Consommation eau froide"
    id: ef_compteur_m3
    unit_of_measurement: 'm³'
    accuracy_decimals: 5
    state_class: total_increasing
    device_class: water 

  # Permet de mesurer que le signal wifi est suffisant
  - platform: wifi_signal
    name: "Signal"
    update_interval: 10min
    unit_of_measurement: dB
    accuracy_decimals: 0
    force_update: false
    icon: mdi:wifi

text_sensor:
  # Info adresse IP
  - platform: wifi_info
    ip_address:
      name: "adresse IP"
      update_interval: 60min

switch:
  # Switch permettant de redémarrer ESP
  - platform: restart
    name: "esp_eau_reboot"

output:
  # Déclaration de la LED interne de l'ESP32
  - platform: gpio
    id: led_internal
    pin: GPIO2

Bonjour,
Je suis à mon tour en train d’installer un esp8266 couplé à une turbine effet hall.
Après de multiples essais les données ne sont pas fiables, si une personne a une idée je suis preneur car je tourne un peu en rond là…
Merci par avance!

Le dernier code testé:

substitutions:
  name: esp-compteur-eau
  friendly_name2: "Compteur EF"
  friendly_name5: "ESP Compteur EF"
 

esphome:
  name: ${name}
  platform: ESP8266
  board: esp01_1m
  # Boards tested: ESP-01S (ESP8266), Wemos D1 Mini (ESP8266); ESP32 Wifi-DevKit2

# Enable logging
logger:
  # ESP8266 only - disable serial port logging, as the HeatPump component
  # needs the sole hardware UART on the ESP8266
  baud_rate: 0

# Enable Home Assistant API
api:

  #encryption:
    #key: !secret api_key

# Allow Over-The-Air updates
ota:
- platform: esphome

# Optional manual IP
#manual_ip:
  #static_ip: 192.168.1.145
  #gateway: 192.168.1.254
  #subnet: 255.255.255.0

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  power_save_mode: none



# Enable Web server.
web_server:
  port: 80

  # Sync time with Home Assistant.
time:
  - platform: homeassistant
    id: homeassistant_time

# Text sensors with general information.
text_sensor:
  # Expose ESPHome version as sensor.
  - platform: version
    name: ${name} ESPHome Version
  # Expose WiFi information as sensors.
  - platform: wifi_info
    ip_address:
      name: ${name} IP
    ssid:
      name: ${name} SSID
    bssid:
      name: ${name} BSSID

# Sensors with general information.
#sensor:
  # Uptime sensor.
  #- platform: uptime
   # name: ${name} Uptime



# Create a button to restart the unit from HomeAssistant. Rarely needed, but can be handy.
button:
  - platform: restart
    name: "Restart ${friendly_name}"


                        # Programme eau
globals:
    
  - id: ef_pulse_counter
    type: float #Le counter n'est pas integer car il sert aussi pour la division m3
    initial_value: "0" 

#################
# Binary Sensor #
#################

# binary sensor comptage impulsion eau froide
binary_sensor:

##############
# EAU FROIDE #
##############

  - platform: gpio
    pin:
      number: GPIO13
      allow_other_uses: true
      mode: INPUT_PULLUP
      inverted: True
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms 
    name: "${friendly_name2} counter state"
    id: ef_counter_state

    on_press:
      then:

        - lambda: |-
            // increment le compteur EF puis publish mqtt
            id(ef_pulse_counter) += 1;
            id(ef_counter_pulse).publish_state(id(ef_pulse_counter));
            id(ef_counter_l).publish_state(id(ef_pulse_counter)/0.25);
            id(ef_counter_m3).publish_state(id(ef_pulse_counter)/0.00025);

##  Status ESP connexion   
  - platform: status
    name: ${friendly_name5} status

#####################################################
#                       sensor                      #
#####################################################
sensor:
#####################################################
#                  EAU FROIDE                       #
#       Débit d'eau instantané (0 après 10s)        #
#  Ne pas utiliser pour comptage (comptage erroné)  #
#####################################################

  - platform: pulse_meter
    name: "${friendly_name2} pulse"
    id: pulse_id_ef
    pin:
      number: GPIO13
      allow_other_uses: true
      inverted: true
      mode:
        input: true
        pullup: true
    internal_filter: 100ms    
    icon: mdi:water
    timeout: 100s
    unit_of_measurement: 'l/mn'
    filters:
      - multiply: 0.25

# Comptage impulsion  
  - platform: template
    name: "${friendly_name2} counter pulse"
    id: ef_counter_pulse
    unit_of_measurement: ''
    accuracy_decimals: 0  # Précision en entiers
    icon: "mdi:counter"
    #update_interval: 5s  # Mise à jour sur changement de valeur
 
# Comptage litres 
  - platform: template
    name: "${friendly_name2} counter l"
    id: ef_counter_l
    unit_of_measurement: 'L'
    accuracy_decimals: 0  # Précision en entiers
    state_class: total_increasing    
    device_class: water

# Comptage m³ (utilisé pour le compteur services HA)
  - platform: template
    name: "${friendly_name2} counter m3"
    id: ef_counter_m3
    unit_of_measurement: 'm³'
    accuracy_decimals: 3  # Précision en entiers
    state_class: total_increasing
    device_class: water    





La log après 1 litre:

Bonsoir,

tu as mis le code pour un compteur de 0.25 l par impulsion es tu certain de cette caractéristique

Moi j’ai les deux et voici le code pour le compteur à effet de hall avec comme Caractéristiques d’impulsion d’écoulement: (6.6 * Q)Q = L/Min ± 3%. donc 6.6*60 = 396.

la source du code

  - platform: pulse_counter
    pin: 
      number: 27
      mode:
        input: true
        pullup: true
    unit_of_measurement: 'L/min'
    name: "Debit eau instantane"
    id: eau_usage
    update_interval: 5s
    accuracy_decimals: 2
    filters:
      - lambda: return (x / 396);
    total:
      name: "Total eau exterieur"
      unit_of_measurement: "L"
      id: total_eau_exterieur
      accuracy_decimals: 2
      filters: 
        - lambda: return (x / 396);

  - platform: integration
    name: "Eau total en M3"
    unit_of_measurement: 'm³'
    accuracy_decimals: 2
    state_class: total_increasing
    device_class: water
    sensor: eau_usage
    time_unit: min
    filters:
      - lambda: return (x / 1000);

à vérifier

1 « J'aime »

Ton compteur est un compteur a effet Hall (généralement x impulsion =1 Litre) ou un compteur a impulsion (généralement 1 impulsion = x Litres)

Car pour les compteurs a effet Hall, c’est le pulse meter qui est utilisé pour le comptage. Sous conditions d’avoir les bonnes valeurs.

Si c’est un compteur a impulsion, c’est le binary sensor qui est utilisé pour le comptage des impulsions.

Le compteur utilisé est la référence YF-B5 dont effectivement d’après la doc technique donné pour 396 pulses/ litre mais une fois le volume mesuré était juste mais les autres mesures ne l’étaient pas donc je suspectais une erreur à un autre endroit.
Je fais refaire qq tests avec le 396 alors pour voir…

Merci pour le partage , ça a de suite mieux fonctionné avec ce code!
j’ai juste eu à descendre le nbre d’impulsions pour être au plus juste.

1 « J'aime »

Merci @Sweepy et @vail34070, on va pouvoir préciser ce code dans l’article pour les compteurs à effet hall.
L’énorme avantage des articles sur les tutos YouTube est que l’on peut les mettre mettre à jour… :stuck_out_tongue_winking_eye:

2 « J'aime »

Hello Merci @Sweepy et @vail34070,
J’ai rajouté le code pour le scompteurs à effet hall en modifiant les noms de variables pour pouvoir utiliser la suite du tuto.

Pouvez vous vérifier que c’est bon ?
Pour info, je n’utilisais pas de pulse meter car il ne donnait pas de bons résultats. Vous confirmez que c’est bon avec un compteur à effet hall qui produit plus d’impulsions ?

Merci.

Salut @Argonaute

C’est ok pour moi

1 « J'aime »

Bonjour , j’ai installer un 8266 , je pense qu’il est également possible d’installer le proget ; mais par quoi on remplace le gpio 25 ?
Merci

INFO ESPHome 2024.12.4
INFO Reading configuration /config/esphome/esp-eau-1.yaml…
Failed config

binary_sensor.gpio: [source /config/esphome/esp-eau-1.yaml:39]
platform: gpio
id: ef_pulse
pin:

ESP8266: Invalid pin number: 25.
number: GPIO25
allow_other_uses: True
mode: INPUT_PULLUP
inverted: True

filters:
- delayed_on: 50ms
- delayed_off: 50ms
on_press:
then:

Bonjour,

J’ai également utilisé un ESP8266 et j’ai retenu le GPIO10.

Il faut donc modifier le code à 2 endroits :

binary_sensor:
  # comptage du nombre de litres : 1 impulsion ajoute 0.25 (compteur 0.25 / litre)
  - platform: gpio
    id: ef_pulse
    pin:
      number: GPIO10

et

sensor:
  # Débit d'eau instantané (0 après 10s)
  - platform: pulse_meter
    name: "Debit eau froide"
    pin:
      number: GPIO10
1 « J'aime »

Bonjour,

Merci @Argonaute pour ce super tuto. Il n’y a qu’à dérouler.
J’ai également un Gioanola 1 L/impulsion. J’ai fait les 2 modifications dans re code de l’ESP pour l’intégrer (et non celui à 0.25L/impulsion).
Par contre comme @David_Marlinge le nombre de litre est correct mais en revanche le débit, l’usage/h et les derniers tirages restent à 0.


Que faut-il modifier pour l’adapter à un comptage 1L/impulsion ?

Merci pour vos retours.