Flow debimeter avec ESP32

Mon problème

Bonjour a tous

Je possède un capteur de débit de ce type :

Les indication du capteur sont les suivante :

Je souhaite utiliser avec un ESP (car pas possible avec shelly uni), mais je n’y connais rien.

Je vous remercie par avance pour votre aide

Après plusieurs heures de recherche, il s’avère que le shelly n’est pas adapté pour utilisation que je voulais en faire.

Je me tourne maintenant vers ESP32, je sais que c’est réalisable notamment comme sur cette vidéo.

Mon souci c’est que j’y connais rien en esp32, donc je vais commencer par regarder des tutos et essayer de réaliser ce type de montage pour pouvoir utiliser le flowmeter et comptabiliser mon eau.

1 « J'aime »

Bonjour
J’ai installer ESP Home sur Home Assistant
J’ai du changer de navigateur, pour pouvoir utiliser interface web car par compatible avec firefox (problème webserial). Je suis donc passé sous chrome.

Mon premier souci est le suivant :
pour les ESP car il y a une multitude (ESP32 , ESP8266,…) de choix sur aliexpress et je ne sais pas lequel utiliser, pouvez vous me conseiller un modèle (avec lien achat) et si possible avec une carte de développement (bornier)

Je suis débutant sur ESP et en électronique aussi (Électricien t plombier de métier), donc quelque chose qui soit simple a prendre en main.

Merci par avance pour votre aide

Bonjour

Je sollicite votre aide, c’est mon premier montage en ESP 32 et en electronique aussi… :upside_down_face:

J’ai un module ESP de ce type :


Mon souci est pour le raccordement électrique de l’ensemble.
Je compte alimenté ESP par le port Micro Usb

Mais je ne sais pas comment raccordé le capteur de débit et la sonde de température cité plus haut sur ESP

Le pulse du capteur débit (fil jaune) doit être raccordé sur le GPI023 ce qui doit correspondre a la borne 23 de ESP
la sonde (fil noir) doit être raccordé sur le GPI035 ce qui doit correspondre à la borne 35 de ESP

Ou faut il brancher l’alimentation du capteur de débit (fil rouge et noir) en 3,3V ou 5V ?
Pour la sonde de température , faut il alimenter en 3,3V ou 5V et Faut il mettre une résistance 10Kohm ?

Mon code pour ESP :

Résumé
esphome:
  name: "esphome-cpt-eau"

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:


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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:


captive_portal:


# Example configuration entry

binary_sensor:
  - platform: template
    name: “Waterpump is Flowing"
    id: template_isflowing
    lambda: |-
     if (id(sensor_waterpump_litres_per_min).state > 0) {
       // Water flowing
       return true;
     } else {
       // Water not flowing
       return false;
     }

# statut
  - platform: status
        name: "Statut"

sensor:
  - platform: pulse_meter
    pin: GPIO23
    name: "Waterpump-Litres per min"
    id: sensor_waterpump_litres_per_min
    unit_of_measurement: "L/min"
    timeout: 10s
    filters:
      - multiply: 0.001818

    total:
      name: "Waterpump-Litres Total"
      unit_of_measurement: "L"
      accuracy_decimals: 3
      filters:
        - multiply: 0.001818

  - platform: adc
    pin: GPIO35
    name: “Waterpump-Temperature Raw Volts"
    id: waterpump_temperature_raw_volts
    update_interval: 15s
    accuracy_decimals: 5
    attenuation: auto

  - platform: resistance
    sensor: waterpump_temperature_raw_volts
    configuration: DOWNSTREAM
    resistor: 50kOhm
    reference_voltage: 3.3V
    name: "Waterpump-Resistance Sensor"
    id: waterpump_temperature_resistance_sensor

  - platform: ntc
    sensor: waterpump_temperature_resistance_sensor
    calibration:
      b_constant: 3950
      reference_temperature: 25°C
      reference_resistance: 47kOhm
    name: "Waterpump-Temperature NTC"
    id: waterpump_temperature_ntc
	
# Qualité du signal
  - platform: wifi_signal
    name: "Signal Wifi"
    update_interval: 60s

# Temps de fonctionnement
  - platform: uptime
    name: "Allumé depuis (s)"
    id: uptime_sec
       
switch:
# Bouton de redémarrage
  - platform: restart
    name: "Redémarrage"

# Transformation des secondes en jours
text_sensor:
  - platform: template
    name: "Allumé depuis (j)"
    lambda: |-
      int seconds = (id(uptime_sec).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600); 
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
    icon: mdi:clock-start
    update_interval: 60s

bonjour

Pouvez vous me dire si mon schéma est correct :

J’ai bien une mesure de température, mais quand je souffle dans le capteur de debit, je n’ai pas de comptage

Merci pour votre aide

salut @pascal_ha a ta place, je ferai juste le raccordement du debit metre pour etre sur que cela fonctionne dans 1er temps avec ton code esphome , et juste pour cette partie là, oui ton cablage a l’air bon. Si tu veux le code du fichier esphome, tu me demanderas, on l’avais revu avec seb2docky à l’époque de sa video.

1 « J'aime »

Merci pour ton aide…

J’ai fait un essai, mais j’ai vu une subtilité chinoise dans le câblage


Le câblage est inversé entre les 2 connecteurs, malheureusement je ne l’ai vu qu’après avoir raccordé… :astonished: du coup le capteur a effet hall est H.S.

Mais j’ai fait un essai avec un capteur a effet hall d’adoucisseur et cela fonctionne


…sa compte. Sa compte faux mais sa compte…
Le montage fait peur a voir :rofl:

Il faut que je recommande un capteur…

Le fait d’alimenter le capteur en 5V, sa ne pose pas de problème pour ESP ?

Voici le code que j’utilise actuellement.

Résumé
esphome:
  name: "esphome-test-adoucisseur"

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  
  # ...
  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.1.190
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.1.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-D21Af8"
    password: "7WEw5SrMsT5u"

captive_portal:


# Example configuration entry

binary_sensor:
  - platform: template
    name: “Waterpump is Flowing"
    id: template_isflowing
    lambda: |-
     if (id(sensor_waterpump_litres_per_min).state > 0) {
       // Water flowing
       return true;
     } else {
       // Water not flowing
       return false;
     }

# statut
  - platform: status
    name: "Statut ESP"
        
sensor:
  - platform: pulse_meter
    pin: GPIO22
    name: "Waterpump-Litres per min"
    id: sensor_waterpump_litres_per_min
    unit_of_measurement: "L/min"
    timeout: 10s
    filters:
      - multiply: 0.001818

    total:
      name: "Waterpump-Litres Total"
      unit_of_measurement: "L"
      accuracy_decimals: 3
      filters:
        - multiply: 0.001818

  - platform: adc
    pin: GPIO35
    name: “Waterpump-Temperature Raw Volts"
    id: waterpump_temperature_raw_volts
    update_interval: 15s
    accuracy_decimals: 5
    attenuation: auto

  - platform: resistance
    sensor: waterpump_temperature_raw_volts
    configuration: DOWNSTREAM
    resistor: 50kOhm
    reference_voltage: 3.3V
    name: "Waterpump-Resistance Sensor"
    id: waterpump_temperature_resistance_sensor

  - platform: ntc
    sensor: waterpump_temperature_resistance_sensor
    calibration:
      b_constant: 3950
      reference_temperature: 25°C
      reference_resistance: 10kOhm
    name: "Waterpump-Temperature NTC"
    id: waterpump_temperature_ntc

# Qualité du signal
  - platform: wifi_signal
    name: "Signal Wifi"
    update_interval: 300s 
    
# Temps de fonctionnement
  - platform: uptime
    name: "Allumé depuis (s)"
    id: uptime_sec    

switch:
# Bouton de redémarrage
  - platform: restart
    name: "Redémarrage ESP"

# Transformation des secondes en jours
text_sensor:
  - platform: template
    name: "Allumé depuis (j)"
    lambda: |-
      int seconds = (id(uptime_sec).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600); 
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
    icon: mdi:clock-start
    update_interval: 3600s    
    
  • Mais je n’ai pas réussi a faire fonctionner le code pour faire la sauvegarde journalière …

je veux bien votre code Esphome révisé afin d’essayer d’avoir quelque chose de fonctionnel.

  • Y a t’il moyen que ESP garde en mémoire la valeur de comptage, sans que sa reparte a zéro quand on coupe l’alimentation ?

Merci pour ton aide

Je rencontre un souci, le flow meter compte de façon éradique, des fois il ne se stop pas, malgré que je n’ai plus de tirage d’eau… J’utilise un ESP32-vroom-32D celui ci est il bien adapté ?
J’ai testé avec un premier capteur de débit…mais suite a un branchement erroné celui ci ne compte pas…

J’ai fait un test avec une turbine adoucisseur (n’ayant aucune info je l’ai testé en 3,3V et 5V , cela fonctionne, mais des fois le comptage ne se stop pas et continu à compter malgré qu’il n’y a pas de tirage d’eau.

J’utilise la carte de développement suivante :
https://fr.aliexpress.com/item/1005004285791004.html?spm=a2g0o.order_list.0.0.203e5e5bAiSeQJ&gatewayAdapt=glo2fra

J’utilise un esp32-wroom-32D
https://fr.aliexpress.com/item/1005002196907572.html?spm=a2g0o.order_list.0.0.203e5e5bAiSeQJ&gatewayAdapt=glo2fra

L’ESP32S serait il mieux ?
https://fr.aliexpress.com/item/1005001855273414.html?spm=a2g0o.cart.0.0.59f5378dDv1ozf&mp=1&gatewayAdapt=glo2fra

Je suis novice en esphome et esp32. Merci de votre aide ou de vos conseils

j’utilise un esp32 Vroom devkit, mais a mon avis tu devrais d’abord faire le calibrage, c’est a dire de prendre un pichet ou une bouteille d’un litre ou un verre mesureur, le remplir au robinet et faire le delta entre ce que ta sonde t’indique et les 1 litre réelle :
cette exemple tu le retrouves dans mon code esphome :

    filters:
     - lambda: return (x / 5.48);
    unit_of_measurement: "l"
    filters:
    - sliding_window_moving_average:
        window_size: 7
        send_every: 1
    - lambda: return ((x - 0.1)*1.333333*10);
code
esphome:
  name: debit_chaude
  platform: ESP32
  board: esp32dev

wifi:
  ssid: "topodoco"
  password: "remplacelesopardesu"
  manual_ip:
    static_ip: 192.***.***.**
    gateway: 192.*..**.**
    subnet: 255.255.0.0
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Debit Chaude Fallback Hotspot"
    password: "qfsdfsdfvfdbdgbdfvdffgfdhbdggfhdghfnfhbdhgvfbgdnbgdfgfvngj,jhbdfsfsvstsgfvrfgshI7bE"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:


time:
  #- platform: sntp
  #  id: my_time
    
  - platform: homeassistant
    id: homeassistant_time  
    
    on_time:
      - seconds: 57
        minutes: 59
        hours: 23
        then:  
          - sensor.template.publish:
              id: template_efs_veille
              state: !lambda return id(daily_efs).state;
              
switch:
  - platform: restart
    name: "debit_chaude_restart"       
    
sensor:         
  - platform: adc
    pin: A0
    name: "debit_chaude_pression"
    update_interval: 10s
    unit_of_measurement: "bar"
    icon: mdi:gauge
    accuracy_decimals: 3
    filters:
    - sliding_window_moving_average:
        window_size: 7
        send_every: 1
    - lambda: return ((x - 0.1)*1.333333*10);
    #- lambda: return ((x - 0.1)*1.49993*10);
    
  - platform: pulse_counter
    id: water_flow_meter
    pin: GPIO02
    name: "debit_chaude_water_flow_meter"    
    update_interval: 1s
    icon: mdi:water
    filters:
     - lambda: return (x / 5.48);
    unit_of_measurement: "l"
    
  - platform: total_daily_energy
    name: "debit_chaude_conso_du_jour"
    power_id: water_flow_meter  
    unit_of_measurement: "l"
    accuracy_decimals: 2
    id: daily_efs
    
  - platform: template
    name: "debit_chaude_conso_veille"
    id: template_efs_veille
    unit_of_measurement: "l"
    accuracy_decimals: 2
    icon: mdi:water
    update_interval: 10s
    
  - platform: wifi_signal
    name: "debit_chaude_wifi_puissance"
    update_interval: 10s
    
  - platform: uptime
    name: "debit_chaude_uptime"
    update_interval: 10s
    
    
binary_sensor:
  - platform: status
    name: "debit_chaude_status"  

et ce code là qui fonctionne chez moi à été repris sur les tuto de seb2dock (e2nommy sur Youtube) dans sa video 10 ou 11 de mémoire

J’ai pas bien compris cette partie du code ? :rofl:

Le capteur de débit, il faut l’alimenter en 3,3V ou 5V ?

1 « J'aime »

Lol au lieu de masquer des infos perso je marques toujours des bêtises ^^

C est du 3v pour moi :slight_smile:

J’arrive un peu tard mais pour les branchements il y a cet article sur sigalou domotique

http://jeedom.sigalou-domotique.fr/domotiser-sa-consommation-deau

2 « J'aime »

Merci pour votre aide

Mais après plusieurs essais je pense que mon capteur a effet hall est HS.
Je vais en commander un nouveau et refaire des tests.

Bonjour,
J’ai du mal à calibrer mon débitmètre.
J’utilise ce code pour mon capteur.

#eau totale
  - platform: pulse_counter
    pin:
      number: 4
      mode:
        input: true
        pullup: true
    unit_of_measurement: 'L/min'
    accuracy_decimals: 2
    id: water_usage
    name: "Débit d'eau total instantané"
    update_interval: 5s
    filters:
    - lambda: return (x / 170); 

La valeur 170 donne 2l
si je mets 200, j’ai 1,69l
si je mets 120, j’ai 2,5l

Je pensais que c’était proportionnel (ou assez proche), mais c’est incohérent.
Merci pour votre aide

le code que j’utilise :

  - platform: pulse_counter
    id: water_flow_meter
    pin: GPIO02
    name: "debit_chaude_water_flow_meter"    
    update_interval: 1s
    icon: mdi:water
    filters:
     - lambda: return (x / 5.48);
    unit_of_measurement: "l"

x / 5.48 et j’ai juste un décallage de quelques centilitres par litre, je n’ai pas chercher pour me rapprocher de 1 litre pile poil. il faudrait essayer juste en changeant par 5.50 par exemple…
et je crois avoir utilisé cette video : (100) #11 Monitorer son puits/citerne – partie 2 – configuration de l’ESP avec ESPhome - YouTube à 45mn

1 « J'aime »

Bonjour

je crois que tu peux faire un étalonnage a plusieurs entrée
c’est a dire qui si ta variation n’est pas linéaire tu peux fournir plusieurs points d’étalonnages

voir doc ESPHOME

1 « J'aime »

Bonjour,
Merci pour vos retours, j’ai pu étalonner mes capteurs en divisant ( x / 1),
et j’ai mis ce résultat qui au final est pertinent.
J’espère que ça pourra aider d’autre personne.

1 « J'aime »

J’essaye d’installer un debimettre à effet hall sur avec un esp 32 mais je cale sur le code yaml.
Je ne connais pas encore très bien le fonctionnement et l’ecriture en yaml.

J’ai recuperer un code via le ghitub de Papamica (merci à lui pour tout son travail).

Mais j’ai des erreur en voula nt faire l’installation. Est ce que quelqu’un pourrait m’aider.
Merci.

esphome:
  name: esphome-web-252b3c
  friendly_name: Eau froide

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "Masquée"

ota:


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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-252B3C"
    password: "Masqué"

captive_portal:

# Enable logging
logger:
  baud_rate: 0
  level: INFO
#  level: DEBUG
  
# Enable Home Assistant API
api:
  
ota:
  
web_server:
  port: 80
  
time:
  - platform: homeassistant
    id: homeassistant_time
    
# Reset sensors at 00h
    on_time:
      - seconds: 57
        minutes: 59
        hours: 23
        then:  
             
          - sensor.template.publish:
              id: eau_conso_veille
              state: !lambda return id(eau_conso_jour).state; 

          - pulse_meter.set_total_pulses:
              id: eau
              value: 0  
              
          - sensor.template.publish:
              id: eau_m3_veille
              state: !lambda return id(eau_m3_jour).state;              

          - lambda: |-
              id(eau_m3_jour) = 0;
    
    
# Add sensors

sensor:
  # Wi-Fi signal
  - platform: wifi_signal
    name: "WiFi Signal Sensor"
    update_interval: 60s
    unit_of_measurement: dB
    accuracy_decimals: 0
    force_update: false
    icon: mdi:wifi

  # Uptime
  - 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    ###############################################################################
# Eau usage
  - platform: pulse_meter
    id: eau
    pin: 17
    unit_of_measurement: "l/mn"
    icon: mdi:water
    #internal_filter: 100ms
    name: "Debit Eau"
    state_class: measurement
    filters:
      - lambda: return x / 487; # 1l = 487 impulsions
      
#########################
# Total eau usage today
    total:
      unit_of_measurement: "l"
      name: 'Eau Consommation Jour'
      filters:
        - lambda: return x / 487; # (pour avoir des litres)
      accuracy_decimals: 2
      icon: mdi:water
      id: eau_conso_jour
      device_class: "water"
      
#########################
# Total eau usage yesterday
  - platform: template
    name: "Eau Consommation Veille"
    state_class: measurement
    device_class: "water"
    id: eau_conso_veille
    unit_of_measurement: "l"
    accuracy_decimals: 2
    icon: mdi:water
    update_interval: 10s 
      
######################### 
# Total eau m3 today
  - platform: template
    name: "Eau m3 Jour"
    lambda: |-
      return id(eau_conso_jour).state / 1000;
    device_class: water
    unit_of_measurement: "m³"
    accuracy_decimals: 2
    id: eau_m3_jour
    state_class: total_increasing
    
######################### 
# Total eau m3 yesterday
  - platform: template
    name: "Eau m3 Veille"
    state_class: total_increasing
    device_class: water
    id: eau_m3_veille
    unit_of_measurement: "m³"
    accuracy_decimals: 3
    icon: mdi:water
    update_interval: 10s    
    
###########    EAU    ###############################################################################


    
binary_sensor:
# ESP Status
  - platform: status
    name: "Eau (Statut)" 
      
switch:
  # Restart button
  - platform: restart
    name: "${name} reboot"

text_sensor:
  # Uptime human readable
  - platform: template
    name: "${name} - Uptime"
    update_interval: 60s
    icon: mdi:clock-start
    lambda: |-
      int seconds = (id(uptime_seconds).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600);
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      if ( days ) {
        return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( hours ) {
        return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( minutes ) {
        return { (String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else {
        return { (String(seconds) +"s").c_str() };
      }

Jusqu’à « Captive portail » c’est mon instal de base. Après c’est le code copié.

Comme erreur j’ai :

INFO ESPHome 2023.12.5
INFO Reading configuration /config/esphome/esphome-web-252b3c.yaml…
ERROR Error while reading config: Invalid YAML syntax:

Duplicate key « logger »
in «  », line 33, column 1
NOTE: Previous declaration here:
in «  », line 11, column 1

Merci Beaucoup

bonjour

Tu as des lignes dupliquer "Duplicate key « logger »
il faut que tu supprime le api: et ota: que tu as en double
Il faut déplacer web server: et logger: au dessus de captival_portal (c’est comme cela chez moi)

Je ne suis pas un pro de ESPHOME, mais tu devrais avoir quelque chose comme cela:

esphome:
  name: esphome-web-252b3c
  friendly_name: Eau froide

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  baud_rate: 0
  level: INFO
#  level: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: "Masquée"

ota:

web_server:
  port: 80


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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-252B3C"
    password: "Masqué"

captive_portal:

    
1 « J'aime »