Un nouvel article est publié sur le portail HACF. Nous vous proposons de connecter votre compteur d’eau et d’exploiter ses données : maîtrise des coûts, identification des sources de consommation, détection des fuites, etc
Bonne lecture, n’hésitez pas à commenter ou poser vos questions.
Bonjour @Argonaute
Je me suis inspirée de ton article pour améliorer le suivi de consommation de mon réseau d’eau
Mais je voudrais faire les actions suivante, mais je ne trouve pas comment faire (cela n’est peut etre pas possible.
-
pour remettre le compteur à zéro :
Comment faire pour re-initialiser le compteur de consommation annuelle ? -
pour lui donner une valeur de départ:
Comment faire pour donner une valeur prédéfini au départ pour le compteur consommation annuelle ?
Merci pour ton aide
Salut @pascal_ha
Si tu as suivi l’article, tu as créé un compteur de services:
Et dans « cycle de remise à zéro du compteur », tu choisis Annuel.
Tu vas dans services et tu utilises utility_meter.calibrate en choisissant ton compteur :
merci @Giga77
J’ai bien trouvé pour calibré ou remettre à zéro le compteur.
Par contre lors de la création du compteur de service, j’ai choisi options Cycle « annuel » , comment modifier cette option ? faut il supprimer le compteur et le recréer, ou la modification est possible sans le supprimer.
Je crains qu’il ne faille le détruire et recréer. Il n’y a pas dans les options de l’entité compteur la fréquence.
Ok merci @Argonaute
Je me doutais de la réponse.
C’est un peu dommage de devoir supprimer, pour recréer.
Ca me semble logique de ne pas pouvoir modifier. Si tu pouvais modifier le cycle, comment ferais-tu pour distinguer les données avant/après modification ? Le compteur n’aurait plus aucun sens.
Ce que tu peux faire, ce sont plusieurs compteurs avec différents cycles.
bonjour
J’ai utilisé le tuto de @Argonaute pour faire le relevé de mes consommations d’eau.
Mais j’ai un souci dans le comptage, comme ci il y avait des impulsions fantôme avec le pulse meter. (je tiens a préciser que j’ai le même phénomène sur 3 compteur différent.
J’ai raccordé mes compteur de cette manière :
J’ai utilisé ce code pour ESP :
code ESP
# Débit d'eau instantané (0 après 10s)
- platform: pulse_meter
name: "${friendly_name1} pulse"
id: pulse_id_ecs
pin:
number: GPIO32
inverted: true
mode:
input: true
pullup: true
internal_filter: 300ms
icon: mdi:water
timeout: 10s
unit_of_measurement: 'l/mn'
filters:
- multiply: 1
# Consommation Totale d'Eau depuis démarrage
total:
name: "Consommation eau chaude"
icon: mdi:water
device_class: water
state_class: total_increasing
unit_of_measurement: 'm³'
accuracy_decimals: 3
filters:
- multiply: 0.001
voici un exemple du décalage sur 4 jours :
Avez vous ce problème ?
J’ai lu dans un article qu’on peux mettre une résistance pour éviter ce phénomène, Si quelqu’un as déjà fait et peut me dire comment je dois mettre la résistance. (si je peux éviter de grille l’ ESP)
Merci pour votre aide
J’ai constaté une légère différence aussi sur une longue période mais moins de 1%.
Une résistance pour un contact sec ne me semble pas indispensable, car les GPIO ont cette résistance en interne. Mais strictement aucun risque a brancher 10k comme indiqué sur ton lien (entre gpio 25 utilisé et un pin +5v de l’ESP donc). Je ne peux essayer étant en voyage, n’hésite pas a tester et faire un retour.
Autrement pour éviter les rebonds, tu peux tenter d’augmenter le paramètre internal_filter (50 ms proposé mais peut-être trop faible)
Bonjour
pour ma part j’ai une dérive beaucoup plus importante que 1% ce serai plutôt 10 à 15% (peut être due au fait que le compteur soit 1L/impulsion)
Ayant 3 compteurs voila ce que j’ai fait :
- compteur eau chaude : pose de la résistance et internal filter réglé à 100ms
- compteur eau froide général : réglage internal filter à 100ms
- Compteur eau adoucie : réglage inchangé
Je vais patienter pour voir ce que cela donne.
Salut
Alors en essai depuis environ 3 jours, le résultat est toujours mitigé.
Que ce soit avec la résistance 10Kohm ou sans j’ai toujours un écart,
d’environ 10% pour EF et EA et beaucoup plus pour le compteur ECS mais je sais pas vraiment la raison…
la première rangée de compteur est avec le pulse-meter
la deuxième rangée de compteur est avec les impulsions
J’ai essayé de changer de GPIO sur ECS le 25, sur EF le 32 et EA 33
J’utilise deux ESP le 1er pour ECS et un second pour EF et EA
J’ai donc modifié ma programmation ESP, pour utiliser le mode pulse-meter pour le débit instantanée et j’utilise le mode impulsion pour le comptage.
J’ai supprimé la résistance qui ne m’apportait rien
voici le code utilisé : (si sa peut servir à d’autres)
Édit: 21/12/2023 mise a jour code suivant Esphome 2023.12.1
Résumé
# Name device mask
substitutions:
name: compteur_ecs
friendly_name: "Compteur ecs"
friendly_name1: "Sensor ECS"
friendly_name2: "Compteur ECS"
globals:
- id: ecs_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:
- platform: gpio
pin:
number: GPIO25
allow_other_uses: true #ajout depuis ESPhome2023.12.1
mode: INPUT_PULLUP
inverted: True
filters:
- delayed_on: 100ms
- delayed_off: 100ms
name: "${friendly_name1} counter state"
id: ecs_counter_state
on_press:
then:
- lambda: |-
// increment le compteur ECS puis publish mqtt
id(ecs_pulse_counter) += 1;
id(ecs_counter_pulse).publish_state(id(ecs_pulse_counter));
id(ecs_counter_l).publish_state(id(ecs_pulse_counter)/1);
id(ecs_counter_m3).publish_state(id(ecs_pulse_counter)/1000);
##########
# sensor #
##########
sensor:
# Débit d'eau instantané (0 après 10s)
- platform: pulse_meter
name: "${friendly_name1} pulse"
id: pulse_id_ecs
pin:
number: GPIO25
allow_other_uses: true #ajout depuis ESPhome2023.12.1
inverted: true
mode:
input: true
pullup: true
internal_filter: 500ms
icon: mdi:water
timeout: 300s
unit_of_measurement: 'L/mn'
filters:
- multiply: 1
#############################
# Comptage en mode impulsion
# ###########################
# Comptage impulsions
- platform: template
name: "${friendly_name2} counter pulse"
id: ecs_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 en litres
- platform: template
name: "${friendly_name2} counter l"
id: ecs_counter_l
unit_of_measurement: 'L'
accuracy_decimals: 0 # Précision en entiers
state_class: total_increasing
device_class: water
# Comptage en m³
- platform: template
name: "${friendly_name2} counter m3"
id: ecs_counter_m3
unit_of_measurement: 'm³'
accuracy_decimals: 3 # Précision en entiers
state_class: total_increasing
device_class: water
Merci pour ton retour.
Ce n’est pas encourageant ça. Es tu plus précis avec le pulse_counter ? De combien?
Tu ne mets pas ce qui devrait être les vrais valeurs.
Autrement vu pour la résistance, ce qui ne m’étonne pas vraiment. Il y a déja ce type de résistance en interne.
Une autre piste serait d’essayer de mettre le compteur sur le 5v et plus GND (et modifier le code en conséquence).
Pour cerner le pb, il faudrait rajouter une led qui s’allume a chaque impulsion. La question est de savoir si c’est un rebond ou une impulsion intempestive.
Il faut aussi essayer d’éloigner les fils d’alimentation et du compteur. Il peut y avoir de l’induction.
Je suis en voyage et ne peux faire de tests a court terme. Compliqué aussi pour moi n’ayant pas ces forts écarts.
La bonne valeur c’est le compteur du bas.
A chaque impulsion sa compte, et je n’ai pas de rebond.
C’est un peu plus précis, mais il y a malgré tous un décalage.
Je vais voir pour essayer de faire un montage.
Mais la led je la met sur une sortie de esp avec un code, ou faut faire autrement ?
Les esp pour EF et EA sont a 1m des compteurs, je ne pense pas qu’il y ai induction
J’ai pas bien compris, tu aurais un schéma ?
Il n’y a rien d’urgent, je ne peux regarder que le weekend.
Pour le branchement au 5v et pas GND, il suffit de mettre le fil actuellement sur GND sur 5V.
Dans le code, il fait supprimer inverted = true.
Ton lien parlant de la résistance présente d’ailleurs les 2 branchements.
Pour la LED, je ferai des tests à mon retour. Il faut mettre la LED sur un GPIO libre avec une résistance de 220 ohms en série, écrire du code en utilisant un binary_sensor pour capter les impulsions, et un output pour piloter la led.
Pour cette partie je pense que c’est bon, j’ai posé une led avec une résistance 330 ohms (j’avais que cela de dispo). sa fonctionne sa s’allume bien a chaque impulsion
Code esp
binary_sensor:
- platform: gpio
pin:
number: GPIO25
mode: INPUT_PULLUP
inverted: True
filters:
- delayed_on: 100ms
- delayed_off: 100ms
name: "${friendly_name1} counter state"
id: ecs_counter_state
on_press:
then:
- lambda: |-
// increment le compteur ECS puis publish mqtt
id(ecs_pulse_counter) += 1;
id(ecs_counter_pulse).publish_state(id(ecs_pulse_counter));
id(ecs_counter_l).publish_state(id(ecs_pulse_counter)/1);
id(ecs_counter_m3).publish_state(id(ecs_pulse_counter)/1000);
- output.turn_on: ecs_impulsion_led_output
# - delay: 0.5s
# - output.turn_off: ecs_impulsion_led_output
on_release:
then:
- output.turn_off: ecs_impulsion_led_output
## Status ESP connexion
- platform: status
name: ${friendly_name} status
##########
# OUTPUT #
##########
## Sortie Leds GPIO 21
output:
# - id: impulsion ecs cpt_led_output
# LED Impulsion Compteur EF
- id: ecs_impulsion_led_output
platform: gpio
pin: GPIO21
Si j’ai bien compris je branche en pulldown.(pas encore fait)
Mais si Je câble en mode pulldown, sans utiliser de résistance je dois pas mettre sur 3,3V ?
(il me semblait avoir lu qu’il faut pas dépasser les 3,3v sur les esp.)
(EN 5V Avec la résistance 10 kohms en pullup, j’ai pas vu de différence pour moi elle sert a rien, puisque ESP le gère en interne)
je pensais qu’il fallait remplacer
mode:
input: true
pullup: true
par
mode:
input: true
pulldown: true
J’ai pas vraiment compris à quoi sert inverted.
Excellent pour la led. Et rajouter un compteur est une bonne idée. Je suis curieux de ton retour.
Autrement, ma compréhension est que inverted = true inverse le lien entre les tensions et états en entrée.
Après vérification pulldown et pullup active ou non les résistances internes de tirages (celle que tu voulais rajouter).
Donc sauf erreur tu as raison, il faut activer la résistance pulldown si on envoie une tension sur le GPIO. Je pensais qu’un inverted = true en pulldown était équivalent a un inverted = false en pullup, et j’ai un gros doute du coup. Je n’ai pas testé, et si quelqu’un a la réponse…
Oups oui, désolé pour l’erreur, c’est bien en 3.3v sur les entrées des GPIO, et pas 5v bien sûr.
Je suis pas expert en esp32, mais voilà ce que je crois avoir compris :
Pour un montage direct (sans ajout de résistance) en pulldown faut 3,3V.
Dans le cas où on alimente en 5v, il faut ajouter la résistance en 10 kohms pour faire chuter la tension, comme sur le schéma ( enfin c’est ce que je crois avoir compris)
Pour le inverted, pour moi c’est un mystère .
Autre point important :
Sur mon compteur ECS (n’étant pas raccordé actuellement) je simulé l’impulsion avec un micro Switch.
Ce n’est pas une bonne méthode, car le micro Switch engendre de nombreuse impulsion fantôme (rebond).
J’ai donc raccordé le contact ILS sur esp et utilisé un aimant pour les essais.
C’est beaucoup beaucoup mieux !
Malgré tous le comptage en utilisant pulse-meter ou pulse-counter a tendance à dériver un peu je dirais entre 2 et 5%.
En utilisant le comptage impulsion (binary sensor) je n’ai quasi pas de différence <1%.
J’ai donc opté pour le comptage (totalisateur) le binary sensor associé avec un utility meter (compteur service)sur HA.
Pour le débit instantané j’utilise le pulse meter (notamment pour avoir la détection de fuite lente)
Merci. Ton retour indique que ce serait le pulse_meter qui aurait un pb (donc probablement une config pas optimale) et qu’il n’y a pas d’impulsions fantômes physiques sur le compteur autre que d’éventuels rebonds.
Je vais creuser cela… Pas de raison que le pulse_meter ne marche pas.
Tu as fait des tests en pulldown ?
Il fonctionne, mais sa compte pas juste…sur une semaine j’ai un écart de 110 litres sur une consommation réel de 700 litres environ
Non pas pour le moment, je vais essayer de le faire ce week end.
Par contre je sais toujours pas si je dois modifier le inverted dans le code si je passe en pulldown. Ou simplement modifier le pullup en pulldown ? (si je pouvais eviter de griller ESP, car je dois mettre le compteur en place ce week …)
Ben, si le pulse_meter ne compte pas juste, on peut pas dire qu’il marche
Pour inverted, aucun risque de griller car ça inverse juste un état logique. J’essaierai de mettre a false ou supprimer la ligne car au final inverser n’a pas forcément de sens.