[Article] Gestion de sa consommation d'eau

Bonjour

Pour éviter ce problème. J’ai modifié le code pour le comptage, j’utilise un binary_sensor pour compter, au lieu du pulse_meter.
J’ai un résultat plus précis et un écart mensuel inférieur a 1% sur un mois de consommation d’eau.

J’ai conservé le pulse Meter, uniquement pour avoir le débit L/mm.

Le code est à adapter à tes besoins, notamment pour les friendly_name

Code pour compteur

# binary sensor comptage impulsion eau froide et adoucie
##############################################
binary_sensor:

  - platform: gpio
    pin:
      number: GPIO32
      allow_other_uses: true
      mode: INPUT_PULLUP
      inverted: True
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms 
    name: "${friendly_name1} 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)/1);
            id(ef_counter_m3).publish_state(id(ef_pulse_counter)/1000);


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

  - platform: pulse_meter
    name: "${friendly_name1} pulse"
    id: pulse_id_ef
    pin:
      number: GPIO32
      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: 1

# 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    


Tu peux retrouver le code complet ici : (dans code esp32)

1 « J'aime »

Bonjour à vous 2,

Désolé pour le délai de réponse un peu long, j’essayai d’avoir des données fiables avant de répondre.

Je n’étais pas chez moi pendant 24h j’ai donc pu être sûr des données. J’ai encore eu de nombreuses comptages fantômes.

J’avais pris une photo de l’index du compteur avant de partir et je confirme il n’y a eu aucun tirage pendant mon absence (ouf :smiley: ), il y a donc bien un problème avec le pulse_meter.

J’ai mis en place le code de @pascal_ha en parallèle pour pouvoir comparer et voir si j’observe le même phénomène, réponse d’ici quelques jours :+1:

2 « J'aime »

Excellent tuto, c’est vraiment parfait.
Suite à un tuyau qui a laché dans le jardin j’ai perdu 14m3 cette nuit, je me suis dis « plus jamais » et je suis tombé sur ton article.
Merci beaucoup, tu me fais gagner beaucoup de temps :slight_smile:

1 « J'aime »

Bonjour,

Je reviens donner des nouvelles après une semaine de double utilisation des 2 solutions.

Le comptage par impulsion fourni par @pascal_ha fonctionne très bien, aucun litre fantôme (ou en tout cas trop peu pour que je puisse les voir).

C’est donc la solution que je retiens désormais !

Merci :slight_smile:

1 « J'aime »

Bonjour à tous!
J’ai installé la version du code de l’article pour relever les mesures de mes 3 compteurs Gioanola (eau froide, eau chaude, eau jardin)
Pour le moment, on ne peut pas dire que je sois satisfait du résultat.
Les mesures remontées sur les 50 derniers tirages me semblent bizarres… (une chasse d’eau à 12L me parait énorme… je vais devoir faire un relevé visuel du compteur pour comparer…)
D’autre part j’ai des relevés dans l’historique de petits tirages en pleine nuit (correspondant à 1, 2 ou 3 impulsions sur mes compteurs 0.25L/imp). Etonnant… Encore une fois, il faut que je fasse des relèves manuelles le soir et que je vérifie au matin…
Enfin dernier point, j’ai remarqué dans le logbook des 50 derniers tirages qu’un tirage ayant un volume identique au précédent n’apparaitra pas dans l’historique… Surement une histoire de mise à jour de l’input_text qui ne se fait pas puisque la valeur précédent est égale à la nouvelle valeur… Je ne sais pas comment corriger ce comportement du coup…

Merci @K20 pour ce test et ton retour d’expérience. Je me rend donc à l’évidence.

Je n’ai perso pas ce type de problème avec le pulse meter, et je n’arrive pas à comprendre pourquoi il ne marche pas chez vous. Il est fait pour cet usage. Mais je propose de tester également puis mettre comme alternative dans l’article le code avec le binary_sensor proposé par @pascal_ha. Ce code a l’avantage de donner la maîtrise sur la capture des impulsions et évitera donc d’éventuels déboires vu vos retours.

@pierrick : une chasse d’eau consomme une dizaine de litre en moyenne, donc pas aberrants. Enfin, si tu as un chauffe-eau électrique, il y a toujours un peu de pertes quand il chauffe. Il te faut effectivement comparer les consos du compteur principal.
Tu peux essayer le code de @pascal_ha ou attendre la mise à jour de l’article…

1 « J'aime »

Merci @Argonaute pour ta réponse, je vais effectivement voir du coté du code de @pascal_ha. Par contre, est ce que le problème d’historisation des tirages sur même valeur est également constaté chez les autres utilisateurs?

Pour forcer l’envoi de la valeur même si identique à la précédente tu peux essayer l’option force_update au niveau du sensor . Ça peut avoir un impact au niveau de la db ha mais a mon avis limité dans ce cas d’usage. Peu de valeur identiques.

Hello @SebCaps, le problème est que ce n’est pas un sensor mais un input_text. En tout cas, c’est comme cela que c’est configuré selon l’article sur HACF

Bonjour et merci pour le tuto que j’ai utilisé. Mon problème c’est le esp_eau_debit_eau_froide
En effet, je n’ai pas d’ESP pour compter les « tic » mais un module zwave fortress qui envoie une impulsion pour chaque litre. Comment puis-je créer ce sensor de débit ? Merci

Bonjour,
Je viens d’envoyer le code suivant sur mon ESP pour la gestion de mon compteur d’eau froide.
C’est basé sur le code de @pascal_ha mais avec quelques modifications sur le type de certaines variables.

globals:
  - id: eau_froide_compteur_impulsion_esp #Variable interne à l'ESP: nb d'impulsions depuis reboot
    type: int
    initial_value: "0"

binary_sensor:
##############
# EAU FROIDE #
##############
  - platform: gpio
    pin:
      number: GPIO12
      allow_other_uses: true
      mode: INPUT_PULLUP
      inverted: True
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms 
    id: eau_froide_etat_pin
    on_press:
      then:
        - lambda: |-
            id(eau_froide_compteur_impulsion_esp) += 1;
            id(eau_froide_compteur_impulsion).publish_state(id(eau_froide_compteur_impulsion_esp));
            id(eau_froide_compteur_litre).publish_state(id(eau_froide_compteur_impulsion_esp)*0.25);
            id(eau_froide_compteur_m3).publish_state(id(eau_froide_compteur_impulsion_esp)*0.00025);

sensor:
##############
# EAU FROIDE #
##############
  - platform: pulse_meter
    name: "eau_froide_debit"
    id: eau_froide_debit
    pin:
      number: GPIO12
      allow_other_uses: true
      inverted: true
      mode:
        input: true
        pullup: true
    internal_filter: 100ms    
    icon: mdi:water
    timeout: 5s
    unit_of_measurement: 'l/mn'
    filters:
      - multiply: 0.25

# Comptage impulsion  (temporaire pour debug)
  - platform: template
    name: "eau_froide_compteur_impulsion"
    id: eau_froide_compteur_impulsion
    unit_of_measurement: ''
    accuracy_decimals: 0
    icon: "mdi:counter"
 
# Comptage litres 
  - platform: template
    name: "eau_froide_compteur_litre"
    id: eau_froide_compteur_litre
    unit_of_measurement: 'L'
    accuracy_decimals: 2
    state_class: total_increasing    
    device_class: water

# Comptage m³
  - platform: template
    name: "eau_froide_compteur_m3"
    id: eau_froide_compteur_m3
    unit_of_measurement: 'm³'
    accuracy_decimals: 3
    state_class: total_increasing
    device_class: water 

D’après mes premiers tests sur un lab (et non en conditions réelles sur mon compteur), ça a l’air de fonctionner.
En revanche, à chaque reboot de l’ESP, cela va remettre toutes mes valeurs de consommation à 0, y compris sur le dahsboard et dans les stats.
Il faudrait qu’à chaque boot de l’ESP, je puisse instancier une valeur de départ qui résulterait de la lecture de la valeur de mon entrée dans HA… Mais je ne sais pas comment faire pour que l’ESP puisse lire cette valeur…

Bonjour

J’ai créé un compteur dans HA, qui me sert a totaliser le comptage des impulsions de ESP.

Celui ci ne se remet pas a jour et conserve la dernière valeur avant reboot.

Bonsoir, j’ai suivi exactement le tuto sauf que mon compteur Ginolia envoie une impulsion chaque litre. C’est la seule chose qui change.
Comme l’impulsion est tous les litres, j’ai modifié le code esp (j’espère que je ne me suis pas trompé)

 Débit d'eau instantané (0 après 10s)
  - platform: pulse_meter
    name: "Debit eau froide"
    pin:
      number: GPIO25
      inverted: true
      mode:
        input: true
        pullup: true
    internal_filter: 50ms
    icon: mdi:water
    timeout: 4s
    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: 5
      filters:
        - multiply: 0.001

le truc c’est que je n’ai jamais de débit qui change et donc jamais de tirage qui s’enregistre et jamais le seuil qui s’active


Qu’est-ce que j’ai raté ?
Est-ce que ça ne serait pas la valeur de 4s qui est trop faible pour détecter

[18:47:26][D][sensor:094]: 'Consommation eau froide': Sending state 0.00100 m³ with 5 decimals of accuracy
[18:47:26][D][pulse_meter:095]: No pulse detected for 4s, assuming 0 pulses/min
[18:47:26][D][sensor:094]: 'Debit eau froide': Sending state 0.00000 l/mn with 2 decimals of accuracy
[18:47:29][D][sensor:094]: 'Consommation eau froide': Sending state 0.00200 m³ with 5 decimals of accuracy
[18:47:33][D][pulse_meter:095]: No pulse detected for 4s, assuming 0 pulses/min
[18:47:33][D][sensor:094]: 'Debit eau froide': Sending state 0.00000 l/mn with 2 decimals of accuracy
[18:47:42][D][sensor:094]: 'Consommation eau froide': Sending state 0.00300 m³ with 5 decimals of accuracy
[18:47:46][D][pulse_meter:095]: No pulse detected for 4s, assuming 0 pulses/min
[18:47:46][D][sensor:094]: 'Debit eau froide': Sending state 0.00000 l/mn with 2 decimals of accuracy
[18:47:54][D][sensor:094]: 'Consommation eau froide': Sending state 0.00400 m³ with 5 decimals of accuracy
[18:47:58][D][pulse_meter:095]: No pulse detected for 4s, assuming 0 pulses/min
[18:47:58][D][sensor:094]: 'Debit eau froide': Sending state 0.00000 l/mn with 2 decimals of accuracy
[18:48:07][D][sensor:094]: 'Consommation eau froide': Sending state 0.00500 m³ with 5 decimals of accuracy
[18:48:11][D][pulse_meter:095]: No pulse detected for 4s, assuming 0 pulses/min
[18:48:11][D][sensor:094]: 'Debit eau froide': Sending state 0.00000 l/mn with 2 decimals of accuracy

Je pense que ton Time Out est trop court. Je l’ai mis a 100 sur mon esp.

1 « J'aime »

Merci 100 au lieu de 4s ??

C’est ce que j’ai mis c’est pas une science exacte :grin:, mais tu peux essayer avec moins et voir ce que sa donne.

D’accord merci pour la piste

Bonjour, j’essaie d’installer ton dernier code mais je reçois ce message

          Couldn't find ID 'ef_pulse_counter'. Please check you have defined an ID with that name in your configuration. These IDs look similar: "ecs_pulse_counter", "ef_counter_l", "ef_counter_m3".
          lambda: !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)/1);
            id(ef_counter_m3).publish_state(id(ef_pulse_counter)/1000); [source /config/esphome/esp-eau2.yaml:64]
  disabled_by_default: False
Couldn't find ID 'ef_pulse_counter'. Please check you have defined an ID with that name in your configuration. These IDs look similar: "ecs_pulse_counter", "ef_counter_l", "ef_counter_m3".

Couldn't find ID 'ef_pulse_counter'. Please check you have defined an ID with that name in your configuration. These IDs look similar: "ecs_pulse_counter", "ef_counter_l", "ef_counter_m3".

D’où cela vient-il ?

Il doit te manquer la ligne ID pour le sensor pulse meter
ou tu ne lui as pas donné le même nom, dans ce cas, il faut modifier.

Comme j’ai le même compteur que toi (Gionala 1l), pourrais-tu de copier le code complet stp de l’esp ? Que je reparte sur une bonne base. J’ai bricolé sur. plusieurs codes et je me mélange les crayons.
Merci d’avance