Connecter un adoucisseur d'eau et récupération info débitmètre

Bonjour,

Je me suis lancé il y a quelques semaine dans un petit projet à base d’ESP32 (que j’ai découvert pour l’occasion, c’est génial) afin de « domotiser » enfin plutôt « connecter » mon adoucisseur d’eau (Vanne Fleck 5800 SXT).

L’objectif était de récupérer différentes informations comme l’état de la génération, l’état du niveau de sel et surtout l’information du débitmètre intégré, j’y suis parvenu et je vous partage tout cela.

Le plus gros problème a été la récupération de l’info du débitmètre intégré (12V), j’avais laissé tombé pour partir sur un débitmètre externe (suite à la vidéo de @SeByDocky que je remercie au passage pour son aide) mais après installation je constate que ce dernier commence à compatibilisé la consommation d’eau qu’a partir de 1,5L/Minutes en moyenne ce qui est loin d’être précis dans le cas d’utilisation sur l’arrivé d’eau générale d’une habitation, par exemple le lave vaisselle déclenche rarement le comptage, idem pour les robinets ouvert très légèrement, du coup tout est faussé, et exit l’automatise prévu de détection d’une éventuelle fuite lente, donc retour à la case départ afin d’essayer de récupéré l’info du débitmètre de mon adoucisseur d’eau qui est bien plus précis et comptabilise la moindre goute d’eau :slight_smile:

Matériel :

1 x ESP32 Dev Kit V1 (NodeMCU WROOM)
1 x Sonde DS18B20
1 x Capteur ultrason
1 x Adoucisseur Fleck 5800 SXT avec débitmètre intégré
ou
1 x Débitmètre externe (3/4 YF-B6 ou 1" YF-B10)

Le débitmètre intégré (3 fils, +12V, GND et Signal) de mon adoucisseur Fleck 5800 SXT est alimenté en 12V directement par la carte électronique de l’adoucisseur. Le débitmètre en direct sur l’ESP32 fonctionne, j’avais bien des valeurs mais il me fallait récupérer ces valeurs tout en le laissant connecté à l’adoucisseur.

Afin d’avoir un signal 3.3V pour l’ESP32, @SebByDocky m’a parlé du pont diviseur 3K et 7K, j’ai donc réalisé le montage, j’ai testé le pont avec une alim 12V et j’avais bien une tension de 3.3v en sortie, mais une fois mis en place ça ne fonctionnait pas, la valeur obtenu est inférieur à 1V :frowning:

La carte de l’adoucisseur délivre bien 12V quand le débitmètre n’est pas connecté mais quand il est connecté il n’y a que 10V environ, du coup, j’ai adapté le pont diviseur et là même résultat, valeur à peine supérieur à 1V, insuffisant pour l’ESP.

Alors j’y suis allez en tâtonnant et j’ai mis 2.7K en R1 et 9.1 en R2 et là j’obtient en moyenne 2.58V en sortie et ça fonctionne !!!
L’ESP détecte bien les impulsions du débitmètre de l’adoucisseur et ce dernier est effectivement bien plus précis, le moindre tirage est bien détecté, parfait pour détecter les éventuelles fuites lentes, cependant je n’explique pas ces valeurs, si vous avez des explication ça m’intéresse de comprendre :slight_smile:

Ensuite, afin d’avoir une valeur conforme, il faut calculer la valeur à renseigner en « lambda » dans ESPHOME :

  • Prévoir une bouteille ou un récipient de 1 litre
  • Ouvrir le robinet à moitié et remplir le récipient jusqu’à 1 litre
  • Relevé dans « total_dayli_energy » la différence entre la valeur avant avoir écoulé les 1 litres et après
  • (Mettre 3 décimales sur ce capteur le temps de l’étalonnage pour plus de précisions)
  • Ajouter la valeur obtenue dans le lambda du filtre du capteur

J’ai effectué cette étalonnage 10 fois, puis j’ai pris la moyenne, dans mon cas 0.62 pour 1 litre.

Maintenant que le débitmètre est fonctionnel , voici mon schéma général.

L’objectif est atteint et j’arrive à récupérer :

  • L’information du débitmètre, et donc la consommation d’eau général de l’habitation grâce à un utility meter (merci @SeByDocky)
  • L’état de la régénération à partir du relais inutilisé de l’adoucisseur, le relais s’active le temps de la régénération (voir notice installateur pour l’activer)
  • Le niveau de sel (contacteur avec un poids pour le moment, capteur à ultrason en route)
  • La température approximative de l’eau (via une sonde DS18B20 placé en contact avec un accord laiton) + delta de -2
  • La température de la pièce (via une autre sonde DS18B20)
  • J’ai aussi installé deux LED afin d’avoir un voyant pour l’état de la régénération et le niveau de sel

Matériel utilisé :

  • 1 x ESP32 Dev Kit V1 (NodeMCU WROOM-32)
  • 2 x Sonde DS18B20
  • 1 x Contacteur
  • 1 x Capteur ultrason (en route, remplacera le contacteur)
  • 2 x LED
  • 1 x Adoucisseur Fleck 5800 SXT avec débitmètre intégré

Fichier yaml de mon esp32 :


# Carte ESP

esphome:
  name: esp_adoucisseur
  platform: ESP32
  board: esp32dev

  
  
# Configuration du WIFI  

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


  # Point d'accès de secours
  
  ap:
    ssid: !secret ap_ssid
    password: !secret ap_password


# Activation du WEB Serveur

captive_portal:

web_server:
  port: 80


# Activation des Logs

logger:

# Activation de l'API Home Assistant

api:
  password: !secret api_password

# Activation de la mise à jour OTA

ota:
  password: !secret ota_password


time:
 
  - platform: homeassistant
    id: homeassistant_time
 
    on_time:
      - seconds: 57
        minutes: 59
        hours: 23
        then:  
          - sensor.template.publish:
              id: esp_adoucisseur_consommation_eau_hier_fleck
              state: !lambda return id(esp_adoucisseur_consommation_eau_du_jour_fleck).state;
              
# Activation sonde DS18B20 (D14)

dallas:
  - pin: 14

# Boutons
  
switch:
  - platform: restart
    name: "ESP Adoucisseur (Reboot)"


# LEDs  (D18 et D19)

  - platform: gpio
    pin: 18
    name: "ESP Adoucisseur (LED Bleu)"
    id: esp_adoucisseur_led_bleu
    restore_mode: RESTORE_DEFAULT_ON
    
  - platform: gpio
    pin: 19
    name: "ESP Adoucisseur (LED Rouge)"
    id: esp_adoucisseur_led_rouge
    restore_mode: RESTORE_DEFAULT_ON


# Capteurs numériques
  
sensor: 

# Puissance du Signal WIFI de l'ESP

  - platform: wifi_signal
    name: "ESP Adoucisseur (Puissance WIFI)"
    update_interval: 60s
 
# Durée de disponibilité de l'ESP
 
  - platform: uptime
    name: "ESP Adoucisseur (Uptime en seconde)"
    id: uptime_sec

# Sonde DS18B20 (D14)

  - platform: dallas
    address: 0x7AC0985441E67GF98
    name: "ESP Adoucisseur Temperature Eau"
    filters:
      - offset: -2.0  # Necessaire car la sonde est en contact avec le laiton et non directement avec l'eau
 
  - platform: dallas
    address: 0xBH7A6E241G64GF58
    name: "ESP Adoucisseur Temperature Local"
    

 
# Débimètre
    
  - platform: pulse_counter
    id: debimetre_fleck
    pin: GPIO27
    name: "ESP Adoucisseur Débimètre Fleck"
    update_interval: 1s
    icon: mdi:water
    filters:
      - lambda: return (x / 0.62); # Pour obtenir cette valeur, faire couler 1 litre d'eau robinet mi-ouvert et relevé la valeur de du capteur "total_daily_energy" 
    unit_of_measurement: "l/hr"

 
# Consommation Total d'Eau Journalière
 

  - platform: total_daily_energy
    name: "ESP Adoucisseur Consommation Eau du Jour Fleck"
    power_id: debimetre_fleck
    unit_of_measurement: "l"
    accuracy_decimals: 2 # mettre à 3 pour l'étalonnage
    id: esp_adoucisseur_consommation_eau_du_jour_fleck
 
# Consommation Total d'Eau de la Veille 
    
  - platform: template
    name: "ESP Adoucisseur Consommation Eau Hier Fleck"
    id: esp_adoucisseur_consommation_eau_hier_fleck
    unit_of_measurement: "l"
    accuracy_decimals: 2
    icon: mdi:water
    update_interval: 10s 
 
# Capteur Binaires

binary_sensor:

# Statut de l'ESP

  - platform: status
    name: "ESP Adoucisseur (Statut)" 
    
    
# Entrée pour le statut de la régénération (D4)

  - platform: gpio
    name: "ESP Adoucisseur (Régénération)"
    pin:
      number: 4
      inverted: True
      mode: INPUT_PULLUP    
    on_press:
      then:
        - switch.turn_on: esp_adoucisseur_led_rouge 
    on_release:
      then:
        - switch.turn_off: esp_adoucisseur_led_rouge
        
# Entrée pour le niveau du sel (D5)      
      
  - platform: gpio
    name: "ESP Adoucisseur (Niveau Sel)" 
    pin:
      number: 5
      inverted: True
      mode: INPUT_PULLUP
    on_press:
      then:
        - switch.turn_on: esp_adoucisseur_led_bleu 
    on_release:
      then:
        - switch.turn_off: esp_adoucisseur_led_bleu 
        
text_sensor:
  - platform: template
    name: "Esp Adoucisseur (Uptime)"
    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) +" Jours, " + String(hours) +" h, " + String(minutes) +" m, "+ String(seconds) +" s").c_str() };
    icon: mdi:clock-start
    update_interval: 113s
    



utility_meter.yaml (pour avoir le comptage par semaine, mois, année ) :

utility_meter:

#Compteur dernière heure
  eau_consommation_heure:
    source: sensor.esp_adoucisseur_consommation_eau_du_jour_fleck
    cycle: hourly

#Compteur journalier
  eau_consommation_jour:
    source: sensor.esp_adoucisseur_consommation_eau_du_jour_fleck
    cycle: daily

#Compteur semaine
  eau_consommation_semaine:
    source: sensor.esp_adoucisseur_consommation_eau_du_jour_fleck
    cycle: weekly
    
#Compteur mensuel
  eau_consommation_mois:
    source: sensor.esp_adoucisseur_consommation_eau_du_jour_fleck
    cycle: monthly
    
#Compteur annuel
  eau_consommation_annee:
    source: sensor.esp_adoucisseur_consommation_eau_du_jour_fleck
    cycle: yearly
    

Rendu Lovelace :

Prochaine étape, mettre des résistances sur les LEDs (il parait qu’il en faut) et surtout pouvoir savoir à l’avance quand l’adoucisseur va se régénérer, je vais créer un nouveau post pour ce sujet car là je bloque sur un point.

Bonne bidouille :slight_smile:

Source d’inspiration (merci @SeByDocky) :

https://www.youtube.com/watch?v=o_D95vliSd4&list=WL&index=5&t=1156s

2 J'aime

Heureux que ca marche :slight_smile:

Effectivement, bizarre que tu aies eu 1V après le premier pont diviseur… Bon après, au moins de risque de griller l’ESP32. Par contre, il y avait peut être un moyen de mettre un gain sur la pin pour ramener entre [0-3V3]. En tout, ta solution fonctionne nickel

Ouaip, je pige pas trop non plus mais bon, l’essentiel c’est que ça fonctionne :slight_smile:

Merci en tout cas :wink:

Bonjour,
J’ai reçu mon capteur ultrason (HC-SR04) pour le niveau de sel alors une petite update du code de l’ESP est nécessaire.

sensor:

  - platform: ultrasonic
    id: capteur_ultrason  
    trigger_pin: GPIO18
    echo_pin: GPIO19
    name: "ESP Adoucisseur (Niveau Sel)"
    update_interval: 60s
    filters:
      filter_out: nan

binary_sensor:

  - platform: template
    name: "ESP Adoucisseur (Statut Sel)"  
    device_class: safety
    lambda: |-
      if (id(capteur_ultrason).state > 0.4) {
        // Manque de sel
        return true;
      } else {
        // Sel OK
        return false;
      } 
    on_press:
      then:
        - switch.turn_on: esp_adoucisseur_led_bleu # La LED s'allumera quand le niveau de sel sera faible
    on_release:
      then:
        - switch.turn_off: esp_adoucisseur_led_bleu # La LED s'allumera quand le niveau de sel sera ok

Voila, lorsque le niveau de sel sera en dessous de 40cm la LED bleu mise en place s’allumera et le capteur binaire passera à ON, il reste plus qu’a faire un automatisme HA pour une notification :wink:

bonjour
Je dispose d’un adoucisseur type prestige bio. celui ci est équipé d’un débitmètre a ILS;
La tension mesurée entre les 2 bornes est de 4 V environ. celle chute à 0 régulièrement des qu’il détecte du flux d’eau.
Je pensais pouvoir réutiliser un circuit destiné initialement à la teleinfo Linky en branchant l’entrée de l’optocoupleur en parallèle sur le débitmètre.
Malheureusement la tension chute à presque 0 V. donc l’entrée de ce débitmètre se fait à très haute impédance et la charge du circuit de l’optocoupleur effondre la tension.
Je pourrais entrer directement sur un GPIO de l’ESP32 avec un petit pont diviseur mais je crains de perturber l’électronique de l’adoucisseur.

Un conseil dans ce cas d’utilisation ?

Merci d’avance
Cdlt
Philippe

Salut,

Techniquement je ne suis pas assez caller pour répondre mais personnellement je testerai dans un premier temps uniquement le debimetre directement vie une entrée de l’ESP pour voir comment ça se comporte.

Dans mon cas la tension variait également un peu dans tous les sens.

Oui c’est ce que je vais faire .
J’ai tenté de shunter loptocoupleur et d’attaquer directement le BS170 via des résistances de 1Mohms mais le mosfet se comporte comme un court circuit devant de telles résistances ! Et il voit toujours 0 volts
Prochaine étape …. Directement sur l’entrée De lesp32
Phil

Édit: il y a des résistances de pull up et pull down de l’ordre de 50K sur les entrées . Donc ça ne fonctionnera pas car déjà avec 100 k, la tension aux bornes du débitmètre s’effondre .

Je n’y coupe pas d’ajouter une porte logique à haute impédance d’entrée ……

Après un 3ème BS170, ça fonctionne
reste a utiliser maintenant