Une solution complète de récupération des données Eau, Gaz et Electricite

J’avais exactement la même question.
Je ne comprends pas bien la différence mais ce que j’ai pu constater c’est qu’en pulse_counter j’avais des chiffres compètement farfelus (je n’avais pas mis de filter non plus) alors que maintenant en pulse_meter (et avec filtre 200ms) les chiffres sont plausibles (je viens juste de faire la modification)

L’alimentation USB (VUSB) est en 5V.
Par contre l’ESP8266 fonctionne en 3.3V
Les capteurs inductifs ne fonctionnent pas en 3.3V donc tu est obligé de l’alimenter en VUSB 5V. Par contre la sortie du capteur rentre sur une entrée de l’ESP8266 et ne doit donc jamais dépasser 3.3V. Suivant le capteur que tu utilises, tu peux avoir besoin de mettre un pont diviseur avec 2 résistances pour réduire la tension de sortie du capteur.

Hello @Pbranly, bravo et surtout un grand merci pour ce partage passionnant !!

Je n’ai qu’un compteur d’eau à mesurer et sans LED. Si j’ai bien suivi tes posts, il suffit de :

  • relier le capteur d’impulsion au GPIO5 à travers une résistance de 1k
  • relier les GPIO15 et 25
    Soit les connexions en bleu ci dessous:

C’est bien cela? ou bien je suis passé à côté de quelque chose?
Etant nul en électronique, je ne sais pas si les autres connexions que je « supprime » influent sur cette partie du montage…

Comme mon compteur d’eau est au bout du jardin, je vais tenter un esp8266 avec antenne, alimenté par un circuit de charge de batterie 18650 + un petit panneau solaire en USB.
Je vous ferai un retour au cas où ca intéresse quelqu’un.
Merci :slight_smile:

Bonjour
Alors depuis j’ai rout changé au profit d’un bouton zigbee IKEA donc je ne sais plus bien quoi servait à quoi !
Dans le schéma initial la sortie du capteur inductif n’est pas seulement reliée à l’entrée de l’esp. tu verras qu’il y a un pont diviseur
Cela sert‘à abaisser grossièrement la sortie du capteur en 5V vers du 3.3v
En effet un esp n’accepte normalement pas du 5 V
Phil

J’ai du mal à voir le rapport entre un bouton zigbee et ton projet initial. J’avais effectivement lu cela dans les discussions mais j’ai du rater un post où tu expliquais cela…

Je n’ai pas décrit la configuration actuelle en zigbee.
Dsns le projet initial le détecteur envoit des pulses vers un esp qui fonctionne en wifi
Dans le fonctionnement actuel, le détecteur envoit des pulses vers un interrupteur zigbee IKEA
Phil

Excellent ! on peut donc connecter directement le détecteur d’impulsion à un bouton zigbee !
J’imagine qu’on connecte la masse et le data sur le bouton d’une part et la masse et le VCC sur une alimentation 5v, c’est bien cela ?

Alors ça peut fonctionner mais je ne sais plus si le bouton supporte des longues périodes en on ou off (car ton compteur est surtout longtemps au même endroit )
J’avais donc ajouté un circuit avec 2 condensateurs et une résistance qui transformait un front montant long en impulsion de quelques centaines de millisecondes
Mais je n’ai aucun souvenir des valeurs car c’était tout à fait empirique !

1 « J'aime »

C’est génial, je n’y avais pas pensé!!
A l’occasion si tu retrouves ces infos et que tu peux nous les partager, je suis certain que cela intéressera beaucoup de monde ici !

En ce qui me concerne, je privilégie le zigbee mais dans ce cas précis, le compteur étant loin je dois faire un montage avec un panneau solaire et une batterie donc je peux aussi mettre un ESP.

J’aime bien le principe de détourner les boutons zigbee, je l’ai fait pour domotiser mon siège de bureau, la boite aux lettres mais le principe était toujours celui d’un Reed sur batterie alors que pour le compteur d’eau il faut une alim.

D’ailleurs cela me fait penser qu’un contacteur zigbee de porte/fenetre est fait pour supporter les périodes prolongées dans les deux états, il devrait donc convenir pour ce montage. Mais je me souviens que tu avais des problèmes de remontées de fausses infos que tu avais corrigé en jouant sur la durée d’impulsions et le branchement de tes gpio en cascade.
Penses tu que le problème se poserait toujours avec un capteur porte fenetre branché en direct?
Est ce que ton circuit RC a été concu pour régler ce type de problèmes (en plus de « raccourcir » l’impulsion) ?

Alors ma solution ne règle pas complètement le problème car quand je suis absent plusieurs jours, j’ai un comptage parasite d’environ 1 litre par heure qui démarre. Ça doit être un problème avec les condensateurs tantales que j’utilise.
Ça me fait croire qu’il y a une fuite !
C’est un truc que je dois toujours revoir

Ce n’est pas du tout mon domaine mais j’ai fait pas mal de recherches sur internet et j’ai trouvé cette page qui me semble intéressante.

J’ai l’impression qu’il utilise une diode. Penses-tu que cela pourrait aider a régler le problème ?

Oui ça fonctionne aussi
Mon système utilisait un pont diviseur permettant d’obtenir sensiblement du 3,3 V à partir du 5 V
Le système décrit est plus sûr car il n’est référencé qu’au plus 3,3
C’est mieux

Salut.
Je suis aussi entrain de réaliser un montage uniquement pour le compteur d’eau comme toi.
Est ce que tu est arrivé à un code stable?
Voila mon code que je n’arrive pas à compilé.

###COMPTEUR D'EAU###
  
time:
  - platform: homeassistant
    id: homeassistant_time
    
# reset a minuit des sensors et transfert vers le sensor  veille
    on_time:
      - seconds: 57
        minutes: 59
        hours: 23
        then:  

          - pulse_meter.set_total_pulses:
              id: capteur_inductif_eau_pulse
              value: 0



# Definition des GPIOs servant aux Leds d'activite eau, gaz et electricite 
output:
# Eau
  - platform: gpio
    pin: GPIO15
    id: output_blue

        
# déclaration des sensors numérique

sensor:
  - platform: wifi_signal
    name: "WiFi Signal Sensor"
    update_interval: 60s
    unit_of_measurement: dB
    accuracy_decimals: 0
    force_update: false
    icon: mdi:wifi
  - platform: uptime
    id: uptime_seconds
    name: "Uptime Sensor"
    update_interval: 60s
    unit_of_measurement: s
    accuracy_decimals: 0
    force_update: false
    icon: mdi:timer
 
###########    EAU    ##################################################################################  
# Debit detecteur compteur d´eau
  - platform: pulse_meter
    id: capteur_inductif_eau_pulse
    pin: 
      number: GPIO25
      mode: INPUT_PULLUP
    name: "Debit compteur d'eau"
    unit_of_measurement: "l/mn"
    icon: mdi:water
    internal_filter: 200ms

#########################
# Consommation Totale d'Eau Jour
    total:
      name: "Compteur Eau Jour"
      icon: mdi:water
      device_class: water   
      unit_of_measurement: 'L'
      accuracy_decimals: 0
      filters:
        - multiply: 1  # (pour resrer en l)
      id: compteur_eau_jour
      
 ######################### 
# Consommation eau du jour en m3
  - platform: template
    name: "Compteur eau Jour m3"
    lambda: |-
      return id(compteur_eau_jour).state * 0.001;
    device_class: water
    unit_of_measurement: "m³"
    accuracy_decimals: 3 
    id: compteur_eau_jour_m3
    state_class: total_increasing
    
binary_sensor:

# Statut de l'ESP
  - platform: status
    name: "Compteur eau (Statut)" 
    
# etat du capteur Inductif compteur eau brut     
  - platform: gpio
    pin:
      number: GPIO05
      mode: INPUT_PULLUP
    name: "Capteur Inductif eau"
    device_class: window 
       
# etat du capteur Inductif compteur eau pulse 500ms   
  - platform: gpio
    pin:
      number: GPIO25
      mode: INPUT_PULLUP
      inverted: true
    name: "Capteur Inductif eau pulse"
    device_class: window 

       
    
switch:
  - platform: restart
    name: "${name} reboot"

Et voici le message d’erreur.

INFO ESPHome 2024.7.1
INFO Reading configuration /config/esphome/esphome-web-1cd8c8.yaml...
INFO Detected timezone 'Europe/Paris'
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
WARNING GPIO5 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
Failed config

sensor.pulse_meter: [source /config/esphome/esphome-web-1cd8c8.yaml:103]
  
  Pin 25 is used in multiple places.
  platform: pulse_meter
  id: capteur_inductif_eau_pulse
  pin: 
    number: 25
    mode: 
      input: True
      pullup: True
      output: False
      open_drain: False
      pulldown: False
    inverted: False
    ignore_pin_validation_error: False
binary_sensor.gpio: [source /config/esphome/esphome-web-1cd8c8.yaml:152]
  
  Pin 25 is used in multiple places.
  platform: gpio
  pin: 
    number: 25
    mode: 
      input: True
      pullup: True
      output: False
      open_drain: False
      pulldown: False
    inverted: True
    ignore_pin_validation_error: False
    ignore_strapping_warning: False

J’ai bien compris la logique de @Pbranly mais j’ai encore du mal dans le code.

Avant de tombé sur ce post et cette méthode, j’ai essayé avec ce code, mais j’avais des remonter de pusle n’importe quand, aléatoirement.


  # Débit d'eau instantané (0 après 8s)
  - platform: pulse_meter
    name: "Debit eau froide"
    pin:
      number: GPIO16
      inverted: true
      mode:
        input: true
        pullup: true
    internal_filter: 4s
    internal_filter_mode: EDGE
    icon: mdi:water
    timeout: 8s
    unit_of_measurement: 'l/mn'
    filters:
      - multiply: 1
# Consommation Totale d'Eau depuis démarrage
    total:
      name: "Consommation eau froide"
      icon: mdi:water
      device_class: water   
      state_class: total_increasing
      unit_of_measurement: 'm³'
      accuracy_decimals: 3
      filters:
        - multiply: 0.001 
		

Merci pour le coup de main.

Tu as utiliser le pin 25 plusieurs fois. pour le « Capteur Inductif eau pulse » et pour le « Debit compteur d’eau ».

Il me semble qu’il faut rajouter ce code

      allow_other_uses: true

En dessous des lignes « number: 25 »

Exemple:

    pin:
      number: GPIO25
      allow_other_uses: true

C’est un warning pour le gpio15 qui doit être utilisé avec précautions.

@pascal_ha Merci pour ta réponse rapide. J’essaie de modifier le code ce soir.
Que pense tu du reste du code?
Peut tu m’en dire plus sur le warning des pin 15.
Bonne journée

Je suis pas expert en ESP, tu as un lien qui explique les problèmes qu’il peut y avoir.

Si sa fonctionne sans problème, tu peux mettre ce code qui désactive l’avertissement.

ignore_strapping_warning: true

« AVERTISSEMENT GPIO15 est un code PIN de liaison et ne doit être utilisé pour les E/S qu’avec précaution.
La fixation de résistances pullup/down externes aux broches de cerclage peut provoquer des pannes inattendues. »
Voir Frequently Asked Questions — ESPHome

Hello @pascal_ha
Je viens d’essayer avec

   pin:
      number: GPIO25
      allow_other_uses: true

devant mes 2 GPIO25 et le code s’est validé.
Maleuresement, je n’avais pas de valeur pour

id: capteur_inductif_eau_pulse

Mais par contre j’ai une remonté on/off de binary_sensor du GPIO05.

A partir de la j’arrive à crée avec HA un compteur qui s’incrémente avec un automatisme qui à chaque fois qu’il passe de on à off, il me compte 1 litre. C’est parfait.
Je viens de faire un test sur 3h et j’ai pas de parasites qui me génère des litres non consommés.
Le code sur l’esp est beaucoup moins grand du coup!! :slight_smile:

# déclaration des sensors numérique

sensor:
  - platform: wifi_signal
    name: "WiFi Signal Sensor"
    update_interval: 60s
    unit_of_measurement: dB
    accuracy_decimals: 0
    force_update: false
    icon: mdi:wifi
  - platform: uptime
    type: seconds
    name: Uptime Sensor
  
 
###########    EAU    ##################################################################################  

    
binary_sensor:

# Statut de l'ESP
  - platform: status
    name: "Compteur eau (Statut)" 
    
# etat du capteur Inductif compteur eau brut     
  - platform: gpio
    pin:
      number: GPIO05
      mode: INPUT_PULLUP
    name: "Capteur Inductif eau"
    device_class: window 
       

Le code de l’automatisme apres avoir crée un compteur. counter.comptage_pulse_eau

alias: Comptage litre eau
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.esphome_web_1cd8c8_capteur_inductif_eau
    from: "on"
    to: "off"
condition: []
action:
  - service: counter.increment
    data: {}
    target:
      entity_id: counter.comptage_pulse_eau
mode: single

J’ai ensuite crée une template sur HA

###Conso eau froide potable

### Capteur pour le compteur de service publique (de binary_sensor à sensor) à partir des impultions du compteur d'eau.
    - name: Consommation eau potable en litre
      unit_of_measurement: L
      device_class: water
      state_class: total_increasing
      unique_id: capteur_conso_eau_en_litre
      state: >-
        {% set count = (states('counter.comptage_pulse_eau') | float) %}
        {% set mm = count * 1 %}
        {% if count >= 0 %}
        {{ mm|round(1, 'floor') }}
          {% endif %}

et je retrouve mes valeurs en litre pour alimenter mon dashboard energy.
Je vais voir si ça fonctionne sur le long terme.
Merci pour le coup de main.

Bonjour,
Bon, c’était trop beau pour être vrai.
Voila 2 jours qu’à environ 1h30 du mat, j’ai des litres qui s’incrémentent tout seul et pas à d’autres moment j’ai l’impression.


Avant ces 2 gros couak, j’avai rajouté par précaution des

filters:
      - delayed_on: 2s
      - delayed_off: 2s

mais ça n’a pas empêché les valeurs parasites visiblement.

Je vais essayer de mettre 3s et je vais surveiller de plus prés pk 2 fois à cette heure ci.

Auriez vous d’autres piste? Merci et bonne soirée.

Bonjour,
Je suis dans le même cas que quelques posts plus haut.
Je possède un ESP32-WROOM-32U et une sonde LJ18A3-8-Z/BX-5V NPN NO. J’ai connecté le bleu sur GND, le brun sur 5V, et le noir sur une entrée GPIO25. Aucune pulsion n’est remontée. Lorsque je touche avec mon doigt l’entrée, il y a des pulsions qui sont remontées.
J’ai mis une résistance de 10kOhm entre le noir et l’entrée, rien ne se passe. J’ai activé aussi la résistance interne (INPUT_PULLDOWN), également rien. J’ai pris les tensions, j’ai environ 4.8V entre le noir le GND et aussi entre le brun et GND. Entre le noir et le brun, environ 0.70V et lorsque j’active la sonde, ca baisse à 0.5V.
La led derrière la sonde s’allume bien, donc la sonde marche bien.
Je m’arrache les cheveux! En tout cas, les schémas simples sur le web ne sont pas correctes.
Merci pour votre aide.

Bonjour,
Si tu simules ta sonde avec des impulsions de 3.3 volts ça compte ?
Valide d’abord ta config d’ESP
Par ailleurs, les entres d’ESP sont en 3,3 V et non en 5 Volts
Tu as peut être cramé ton ESP.
Il faut diminuer la tension max sortant de ta sonde
Phil