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

Pour compléter et afin de protéger l’entrée de l’ESP, faut mettre un résistance de 10k en série sur l’entrée GPIO (entre la sonde et l’esp), et il faut également activer la résistance de pull-down…

Ou mettre une résistance de pull down sur ton entrée . Une 10K devrait faire l’affaire si en soft ça ne fonctionne pas

Bonjour, je suis nouveau sur le domaine et je veux tout comprendre :wink:
pour le cas de l’eau comme exemple
@Pbranly lit une seule fois la valeur en pulse_meter et fait des calcules dessus, je comprends.
Les autres codes lisent en pulse_meter et pulse_counter et plusieurs fois ?

Mes questions:
as ton le droit de lire une pin plusieurs fois avec différente méthode ?
quel est la différence entre pulse_meter et pulse_counter ?
J’ai pas trouvez de doc a part celle de esphome qui invite a utiliser pulse_meter si j’ai bien compris ?

je comprend pas pourquoi c’est des l/mn

Lol moi non plus ! De toutes façons ce paramètre ne sert à rien finalement . Ce qui compte c’est la valeur absolue en litres ou en m3.

# 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: gazpar
              value: 0

comment copier la valeur dans « gazpar.hier » avant de remettre a 0 ??
le but est de l’afficher sur un mini écran oled
ça doit être trivial mais je sais pas faire !!

time:
  - platform: homeassistant

# reset a minuit des sensors et transfert vers le sensor  veille
    on_time:
      - seconds: 57
        minutes: 59
        hours: 23
        then:
          - sensor.template.publish:
              id: gazpar_gaz_veille
              state: !lambda return id(gazpar_gaz_jour).state; 
          - pulse_meter.set_total_pulses:
              id: gazpar
              value: 0  
          - sensor.template.publish:
              id: gazpar_puissance_gaz_veille
              state: !lambda return id(gazpar_puissance_gaz_jour).state;              
          - lambda: |-
              id(gazpar_puissance_gaz_jour) = 0;

trouver sur le forum : Récupération Telesignalisation GAZPAR](Récupération Telesignalisation GAZPAR) merci

bonjour
j’ai des erreur de comptage .
j’ai un capteur LJ18A3-8-Z/BX-5V brancher sur un wemos d1 mini directement ( le + et - du capteur sur le wemos et le signal a la borne D1

mon sensor esphome :

sensor:
# Debit detecteur compteur d´eau
  - platform: pulse_meter
    id: capteur_inductif_eau_pulse
    pin: 
      number: GPIO5
      mode: INPUT_PULLUP
    name: "Debit compteur d'eau"
    unit_of_measurement: "l/mn"
    icon: mdi:water
    internal_filter: 1200ms

#########################
# 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

j’ai essayer de modifier l’emplacement du capteur .
petite info le wemos et a 30 mètres du capteur
le problème peut venir de la trop grande distance

Donc tu alimentes le détecteur en 3.3 V ? C’est peut être trop faible .
Et si tu l’alimentes en 5 V sa tension de sortie est de 5 V donc trop haute pour l’esp.
Je n’utilise plus d’esp mais un poussoir zigbee IKEA ….
Phil

Et quelles erreurs de comptage ? En plus ou/et en moins ? Regarde mon code. J’y avais ajouté des filtres et des forçages de niveau sur les entrées
Phil

bonjour
j’ai des erreur de comptage en positif

J’en ai aussi mais c’est marginal . Sauf quand je suis absent longtemps . Après quelques jours d’absence, ça détecte quelques faux litres par jour.
De ton côté, quel niveau d’erreur ? Et as tu mis les filtres en place dans ton code ?

Bonjour et merci pour le partage,

J’ai copié ton code et je remarque des aberrations de comptage en plus.

Quand même aujourd’hui c’est 700 litres en trop.

Quand je regarde il semble que le compteur s’incrémente sans que le capteur ne semble changer d’état.

Pour être précis j’utilise en fait un compteur équipé d’un capteur Reed, donc un peu plus simple.

Quelqu’un a déjà vu ça?

Sur la capture d’écran ci dessous on voit bien que tout est normal ou presque vers 18h21, neuf pulse et neuf litres. Mais a 18h28, aucun pulse et pourtant 12 litres de comptés…

Si quelqu’un a une idée je prends, ça avait bien tourné pendant 3 jours avant.

Cdt

Tu veux dire que tu ne puisse pas de l’eau mais que ça compte quand même des impulsions ?

Si c’est ça, c’est pas un problème de résistance mal calibrée ?
Et vérifier aussi si ce problème arrive que en NO ou NF ou indifféremment.
Il peut y avoir des parasites aussi qui font que ça détecte des impulsions. Genre le câble qui longe un autre câble courant fort.

Bonsoir,

Oui j’y ai pensé, mais je suis en Capteur reed, donc en gros c’est un ILS si je ne me trompe pas, il est connecté au +3.3V et le pin est en Pull Down, donc assez peu probable.

Le pire c’est que comme tu vois sur le graphe les changement d’état du capteur sont bien visibles quand de l’eau coule.

En plus il y a bien la tempo de 200 ms dans le programme donc là je suis sec…

A+

ça arrive quand le contact est ouvert et jamais quand il est fermé ?

En effet j’ai la même chose avec le contact ouvert (7h44) ou fermé (7h30) même combat.

tu peux nous montrer comment est fait ton sensor ?

Je n’utilise pas pulse metter et autre bidule car il a un comportement bizarre (j’ai peut être mal fait)

En testant esphome, et les différente possibilité qu’il y a en général, j’ai preferé faire mon propre compteur accumulateur. Je n’ai pas de problème avec le gazpar quiest impulsionnel. Si je pars sur ce principe, c’est aussi dans le but d’y ajouter une query mqtt pour récuperer la dernieère valeur envoyée vers « HA ». Comme ça en cas de reboot, mon compteur ne commence pas à 0.

Essaye ce genre de code pour voir si le problème est identique au tiens.

esphome:
  name: wdesphome-gazpar
  #friendly_name: gazpar
  on_loop:
    then:
      - lambda: |-
          id(loops_counter) += 1;
          id(increment_and_toggle).execute();

esp32:
  board: esp32dev
  framework:
    type: arduino

globals:
  - id: loops_counter
    type: int
    initial_value: "0"
  - id: loops_delay_gazpar_red_led
    type: int
    initial_value: "0"    
  - id: gazpar_pulse_counter
    type: float #Le counter n'est pas integer car il sert aussi pour la division kWh et m3
    initial_value: "0" 

switch:
- platform: gpio
  pin: GPIO32
  id: gpio_led_Red_gazpar


binary_sensor:
  - platform: gpio
    pin: 34
    name: "gazpar_counter_state"
    on_press:
      then:
        - lambda: |-
            // allume la led apres impulsion gazpar (pour un delay)
            id(loops_delay_gazpar_red_led) = 10;
            id(gpio_led_Red_gazpar).turn_on();
            // increment le compteur gazpar puis publish mqtt
            id(gazpar_pulse_counter) += 1;
            id(gazpar_counter_pulse).publish_state(id(gazpar_pulse_counter));
            id(gazpar_counter_kwh).publish_state(id(gazpar_pulse_counter)/10);
            id(gazpar_counter_m3).publish_state(id(gazpar_pulse_counter)/100);


sensor:
  - platform: template
    name: "gazpar_counter_pulse"
    id: gazpar_counter_pulse
    unit_of_measurement: 'dal'
    accuracy_decimals: 0  # Précision en entiers
    icon: "mdi:counter"
    #update_interval: 5s  # Mise à jour sur changement de valeur
  - platform: template
    name: "gazpar_counter_kwh"
    id: gazpar_counter_kwh
    unit_of_measurement: 'kWh'
    accuracy_decimals: 3  # Précision en entiers
    icon: "mdi:counter"    
  - platform: template
    name: "gazpar_counter_m3"
    id: gazpar_counter_m3
    unit_of_measurement: 'm3'
    accuracy_decimals: 3  # Précision en entiers


script:      
  - id: increment_and_toggle
    then:
      - lambda:  |-

          // clignotement de la led loop (visualisation de la charge CPU par exemple)
          if (id(loops_counter) >= id(Led_loop_white_xs).state) {
            id(loops_counter) = 0;
            id(Led_loop_white_io).toggle();
          }
          // delay pour la led gazpar (s'allume après impulsion pendant un nombre défni de loop)
          if (id(loops_delay_gazpar_red_led) > 0) {
            id(loops_delay_gazpar_red_led) -=1;
          } else {
            id(gpio_led_Red_gazpar).turn_off();
          }

Comme cela :

C’est un capteur Reed, il doit y avoir un aimant sur la roue noir de compteur.

A+

Salut et merci beaucoup, c’est exactement ce que je cherchais, car le pulse_meter permet de mesurer des fréquences très élevées (et donc des parasites). Je ne suis pas sûr que le filtre qu’il propose soit efficace, je suis monté à 300 ms et toujours le problème.

Je teste ce soir et vous redis.

A+