HA-Gestion piscine-4_Mesure Ph

Intro

Les possesseurs de piscine le savent, le pH est une composante importante dans le traitement des eaux de piscine. Un mauvais pH rendra très difficile voir impossible le traitement de l’eau. Personnellement, je cible une valeur de Ph à 7.3 .

Dans le commerce vous trouvez beaucoup de régulateurs de pH, malheureusement à des prix trop élevés à mon gout.

J’ai découvert les modules EZO fabriqués par AtlasScientific au hasard du net, mais la toute récente intégration du module EZO dans EspHome m’a conforté dans ce choix.

Je commande les modules EZO chez https://www.whiteboxes.ch/ , c’est rapide et j’ai pas trouvé mieux ailleurs en Europe. leur boutique est bien organisée, vous y retrouvez bon nombre de produits ainsi que la documentation très fournie associée.

Vous y trouvez notamment des modules et sondes de mesure de conductivité, ORP, oxygène dissoute, température, mesure de gaz O² et CO², de couleur, humidité, pression, ainsi que divers accessoires.

Nota: dans un premier temps, je ne traite dans cet article que la mesure de pH, la régulation avec des pompes péristaltiques fera l’objet d’une mise à jour.

La partie matérielle

Liste des courses

  • Un module mesure de ph EZO
  • Une sonde pH EZO. J’utilise celle ci mais il existe des modèles compatibles industriels beaucoup plus chers et des modèles chinois beaucoup moins chers, c’est selon l’importance et le budget que vous accorderez à la fiabilité et la pérennité de la mesure.
  • Un connecteur SMA pour la sonde.
  • Un module d’isolation galvanique EZO.
  • Un afficheur local 2 lignes de 16 caractères . Vous en trouvez à foison sur le net, c’est pratique de le choisir avec une puce compatible ESPHome.
  • Un ESP32. J’ai choisi ce modèle car je pense lui confier à terme d’autres fonctionnalités dédiées à la piscine, cependant un esp8266 D1 ferait très bien l’affaire.
  • Une alimentation 220VCA-5VCC courant continu.
  • Quelques connecteurs et cordons JST précablés.
  • Divers composants et accessoires

Schéma électronique

Quelques explications sur le schéma:

  • Bus I²C (pin 21,22) a quatre connecteurs: 1 pour l’afficheur, 1 pour le module EZO, 2 pour de futures pompes péristaltiques (injection pH+ et pH-).
  • Bus UART (pin 18,19): Réserve si besoin de brancher un UART
  • Entrées digitales (pin 16,17): Si besoin d’une action rapide en local (Bouton poussoir Marche arrêt pompe par exemple)
  • Entrée analogique (pin 3): Mesure de pression du filtre à sable
  • Entrée analogique (pin 4): Mesure de pression refoulement (A venir)
  • BP RAZ (Pin 2): Accès au « reboot » de l’ESP en local.

Vous constaterez l’anticipation de quelques fonctionnalités complémentaires qui feront l’objet d’articles spécifiques.

Circuit imprimé réalisé avec Eagle

J’évite si possible la fabrication de circuit double face, d’où l’utilisation de quelques straps (en rouge) me permettant de m’en sortir avec un CI simple face.

Fichiers Eagle à télécharger

La partie logicielle

Module EZO

Le module de mesure EZO peux communiquer selon deux protocoles: I²C ou UART. Seul le protocole I²C est disponible dans ESPHome . Par défaut le module est configuré d’usine en UART, il faut donc le basculer en I²C. C’est très simple et bien expliqué dans la documentation du module.

Deux solutions pour le changement de protocole, par logiciel ou par câblage, c’est celle que je préfère, car plus rapide à mettre en œuvre:

  • Connecter TX et PGND
  • Veiller à ce que RX soit déconnecté
  • Alimenter en 0-5v via GND et VCC
  • La led passe en bleue, c’est OK, vous êtes en I²C. A noter que la manipulation est identique pour le re basculer en UART.

Pour information, La led du module est verte en UART et bleue en I²C.

La solution logiciel nécessite un montage sur le port série avec par exemple un Arduino et l’utilisation du code fourni par EZO.

L’isolateur galvanique ne nécessite pas d’intervention.

ESP Home

Rien de particulier, vous y retrouvez les déclarations standards ESPHome, la déclaration EZO ainsi que celle de l’afficheur. A noter la déclaration du bus I²C sur les GPIO spécifiques à l’esp32, celle de l’esp8266 sont différentes (GPIO5->scl, GPIO4->sda). L’option « scan: true » autorise l’ESP à scanner les esclaves i²C, pratique pour vérifier dans le log si l’ESP reconnait le module EZO et l’afficheur. L’adresse I²C de l’EZO et de l’afficheur sont différentes donc pas de souci de compatibilité.

Si besoin de précisions sur le flashage de l’ESP, se reporter à mon article « Home Assistant-ESP HOME ».

Vous y trouverez également le code du capteur d’ORP et de la mesure de pression du filtre à sable.

substitutions:
  device_name: esp125-piscine
  friendly_name: esp125
  adress_ip: "192.168.0.125"
  time_timezone: "Europe/Paris"
  
esphome:
  name: ${device_name}
  platform: ESP32
  board: lolin_d32

wifi:
  networks:
    - ssid: !secret wifi_mi4
      password: !secret mdpwifi_mi4
      priority: 2    
    - ssid: !secret wifi_esp
      password: !secret mdpwifi_esp
      priority: 1
    - ssid: !secret wifi
      password: !secret mdpwifi
      priority: 0
  reboot_timeout: 5min

  manual_ip:
    static_ip: ${adress_ip}
    gateway: 192.168.0.254
    subnet: 255.255.255.0


# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

web_server:
  port: 80


# Example configuration entry for ESP32
i2c:
  sda: 21
  scl: 22
  scan: true
  id: bus_a
  
#Etat de la connection
binary_sensor:
  - platform: status
    name: "${friendly_name}_Status"

sensor:

# Mesure du pH
  - platform: ezo
    id: esp125_ph_ezo
    name: ph_ezo
    address: 99
    unit_of_measurement: "pH"
    accuracy_decimals: 2
    update_interval: 60s
  #  moyenne sur 15 mn-affichage toutes les 5mn
  # Etalonné le 6 juillet 2022
    filters:
      - calibrate_linear:
        - 4.44 -> 4.0
        - 7.17 -> 6.86
        - 9.41 -> 9.18
      - sliding_window_moving_average:
          window_size: 15
          send_every: 5
          send_first_at: 1


# Mesure de l'ORP
# Etalonné le 6 juillet 2022
  - platform: ezo
    id: esp125_orp_ezo
    name: orp_ezo
    address: 98
    unit_of_measurement: "mV"
    accuracy_decimals: 1
    update_interval: 60s
    filters:
#      - multiply: 10
      - calibrate_linear:
          - 0 -> 0
          - 216.9 -> 256
# moyenne sur 15 mn-affichage toutes les 5mn
      - sliding_window_moving_average:
          window_size: 15
          send_every: 5
          send_first_at: 1

# Mesure de la pression filtre
  - platform: adc
    pin: A0
    id: esp125_pression_filtre
    name: "Pression filtre"
    unit_of_measurement: "Bars"
    update_interval: 60s
    attenuation: 11db
    filters:
      - calibrate_linear:
        - 0.58 -> 0.0
        - 0.82 -> 0.8
# moyenne sur 30 mn + affichage toutes les mn
      - sliding_window_moving_average:
          window_size: 30
          send_every: 1
# Avec le 30PSI
#    filters:
#      - calibrate_linear:
#        - 0.5 -> 0.0
#""        - 2.21 -> 0.8
# moyenne sur 30 mn + affichage toutes les mn
#      - sliding_window_moving_average:
#          window_size: 30
#          send_every: 1


  - platform: wifi_signal
    name: "${friendly_name} WiFi Signal Sensor"
    update_interval: 60s

  - platform: homeassistant
    name: "T° Eau Piscine"
    id: temp_piscine
    entity_id: sensor.temp_piscine


# gestion afficheur
display:
  - platform: lcd_pcf8574
    dimensions: 16x2
    address: 0x27
    update_interval: 5s
    lambda: |-
      it.printf(0,0,"Ph=%.2f",id(esp125_ph_ezo).state);
      it.printf(0,1,"Or=%.2f",id(esp125_orp_ezo).state);
      it.printf(8,0,"P=%.3f",id(esp125_pression_filtre).state);
      it.printf(8,1,"T=%.1f",id(temp_piscine).state);


switch:    
  - platform: restart
    name: "${friendly_name}_Restart"
    

text_sensor:
  # IP address #
  - platform: wifi_info
    ip_address:
      name: "${friendly_name} IP address"
      icon: "mdi:network-outline"
    ssid:
      name: "${friendly_name} Connected SSID"
    bssid:
      name: "${friendly_name} Connected BSSID"
  - platform: version
    id: text_sensor_version
    name: "${friendly_name} ESPHome Version"

Affichage local

Une fois l’ESP flashé, alimenté et connecte, vous retrouvez dans HA la mesure de ph et l’affichage en local.

Vous pouvez aussi vérifier son fonctionnement dans la page WEB de l’ESP.

Mise en oeuvre

Pour la mise en oeuvre, J’utilise une chambre de mesure qui permet de positionner deux sondes et deux injecteurs dans le circuit hydraulique, plus un débitmètre. Ne pas oublier les vannes de séparation avant et après ce qui évite d’avoir à vidanger pour intervenir sur les sondes. Dans mon cas j’ai positionner la sonde pt100 de mesure de température sur le deuxième emplacement. L’injecteur est en attente de la pompe de régulation de pH.

Déclaration des entités

Les entités déclarées sont disponibles dans le fichier ph.yaml

Affichage HA

Se reporter à l’article sur la filtration pour plus de détail sur les cartes et les codes associés.

Calibration du module EZO

La calibration est à faire au moins une fois dans l’année. J’utilise de temps en temps les bonnes veilles languettes de réactifs afin de vérifier si la mesure de pH est fiable.

Le principe est de mesurer le Ph dans 3 solutions étalons, relever les valeurs brutes lues par le module EZO, configurer la mise à l’échelle lineaire dans le programme ESP.

Préparer 3 solutions de pH étalon dans 250 ml d’eau distillée: (j’utilise des solutions étalon commandées en quantité chez aliexpress)

  • Basse: 4.00
  • Milieu: 6.86
  • Haute: 9.18

Modifier le programme ESP en supprimant les eventuelles calibrations précédentes (calibrate_filter) et l' »update_interval » à 1s et télécharger le dans l’ESP

Déposer votre sonde, rincez la dans de l’eau distillée, et plonger là dans la solution 4.00.

Attendez 4/5 mn le temps que la mesure se stabilise.

Notez la valeur lue par l’ESP.

Rincez la sonde à l’eau distillée.

Recommencez l’opération pour les solutions 6.86 et 9.18

Une fois les trois valeurs relevées, programmer votre ESP en insérant « calibrate_filter »:

    filters:
      - calibrate_linear:
        - 4.44 -> 4.0
        - 7.17 -> 6.86
        - 9.41 -> 9.18

Les valeurs de gauche son celles que vous avez relevés, celle de droite les valeurs de vos solutions étalons.

Remettre Mettre à jour l' »update_interval » à 60s

Télécharger dans l’ESP.

C’est terminer, votre mesure de pH est étalonnée.

Notée la date d’étalonnage dans votre programme ESP, c’est plus simple à retrouver.

Conclusion

Pour quelques dizaines d’euro, un peu de bricolage, vous pouvez vous fabriquer un pH-mètre, de bonne qualité, évolutif et parfaitement intégré dans HA.

Liste des publications en lien avec cet article:

  1. Filtration avec « AppDaemon » ou avec « Pool Pump Manager« 
  2. Mesure de puissance électrique
  3. Mise à niveau automatique
  4. Mesure du pH
  5. Régulation du Ph
  6. Mise Hors Gel
  7. Mesure de pression

22 Comments on “HA-Gestion piscine-4_Mesure Ph”

  1. Bravo et merci pour ce partage trés inspirant, je découvre ce blog aujourd’hui !
    J’ai migré de jeedom vers home assistant il y a bientot 2 ans. Sur jeedom, j’utilisais le plugin piscine de scadinot. Il n’y avait pas grand chose à cette époque côté HA ( j’ai hésité a porter ça sur HA, mais au final pour éviter d’y passer trop de temps, j’ai fait une automatisation avec nodered, où je définis des plages de filtration en fonction de seuils de température). C’est moins fin, mais ça fait le job. Et en parcourant ton blog, j’ai vu que tu avais fait un équivalent avec Pool pump manager ! j’aurais gagné du temps 😉 Ce qui m’intéresse maintenant, c’est la régulation PH et ORP. Je vais étudier ta façon de faire avec les modules EZO et ESP. A la base, je comptais utiliser un module GCE x200ph en extension de mon IPX800 (avec lequel je gère le contacteur Filtration, Polaris, Eclairage, sonde temp.), mais ils ne fabriquent plus ce module d’extension…. je vais sans doute commencer par le PH, j’ai l’impression que tu as mis un ZeliaPod, c’est exactement ce que j’avais pensé mettre pour les sondes et injecteurs, en faisant un bypass. Tu gères également la régulation Chlore/ORP avec HA ?
    En tout cas, je vais avoir un peu de lecture pour ce WE 🙂 félicitation pour ce blog, les sujets correspondent exactement a mes besoins (conso elec… on vera plus tard)

    1. Bonjour
      merci pour ton retour. Tiens moi au courant de ton avancement et des eventuelles remarques sur le tuto
      Concernant la régul de chlore, elle n’a pas été activée du fait que les lecture de l’ORP sont complètement farfelues, j’attend des valeurs autour des 700 mv et je mesure une valeur inférieure à 100 donc j’investiguerai bientôt lors de la sortie d’hivernage.
      Bon courage à toi.

  2. Bonjour,
    je rencontre un problème d’orde technique ,mais je pose la question au cas ou l’un d’entre vous y aurait déjà été confronté.
    J’ai installé une sonde PH sur ma tuyauterie : https://www.gotronic.fr/art-sonde-ph-interface-sen0161-21552.htm . Elle est reliée à un ESP32 sous arduino et transmet via MQTT.
    Dans un liquide au repos la sonde est stable et l’étalonnage s’est ben passé. Mais dès que je l’installe dans ma tuyauterie… C’est le drame! les valeurs ossillent de 3 à 15 de ph !!! Et chaque seconde j’ai une mesure du min au max.
    De mon point de vue ça pourrait être lié à:
    – l’absence de chambre d’analyse (mais j’ai vu que certains s’en passé…)
    – l’absence de « pool-terre » mais est-ce que les variations seraient si importantes…
    – l’absence d’isolateur galvanique, je ne suis pas certain que ce soit indispensable avec mon convertisseur
    Si quelqu’un à une idée…
    Merci

    1. Bonjour
      J’ai eu des problèmes d’instabilité au début que j’ai résolu avec un isolateur galvanique sachant que j’utilise une chambre d’analyse avec son pool-terre.
      Les sondes mesures des millivolts donc tres sensibles aux interférences.
      Commence au moins par le pool-terre et le cas échéant une isolation galvanique.
      Bon courage

  3. This is absolutely fantasic. I had been reading up on the Atlas instruments, but their kits made it beyond my price bracket.
    Using the modules and ESPHome boards makes it far more cost-friendly.

    Merci beaucoup a toi!

  4. This is absolutely fantasic. I had been reading up on the Atlas instruments, but their kits made it beyond my price bracket.
    Using the modules and ESPHome boards makes it far more cost-friendly.

    Merci beaucoup a toi!

  5. Bonjour,
    La sonde PH n’est plus disponible chez whiteboxes, as tu une autre source (en dehors d’Ali Express) ?
    Autre question : quelle est la durée réelle de la sonde PH j’ai vu 6 mois sur leur site !
    A+ Thierry

    1. Bonjour
      Pour l’appro de la sonde, je n’ai pas d’équivalent mais Google devrait t’aider. J’utilise la sonde depuis deux saisons, je l’étalonne en debut de saison et ça fonctionne (pour l’instant) mais je n’ai pas plus de recule sinon. Tiens moi au courant sur tes recherches. cdlt

  6. Bonjour,
    La sonde PH n’est plus disponible chez whiteboxes, as tu une autre source (en dehors d’Ali Express) ?
    Autre question : quelle est la durée réelle de la sonde PH j’ai vu 6 mois sur leur site !
    A+ Thierry

    1. Bonjour
      Pour l’appro de la sonde, je n’ai pas d’équivalent mais Google devrait t’aider. J’utilise la sonde depuis deux saisons, je l’étalonne en debut de saison et ça fonctionne (pour l’instant) mais je n’ai pas plus de recule sinon. Tiens moi au courant sur tes recherches. cdlt

  7. Bonjour,
    Actuellement sur home assistante et propriétaire depuis peu d’une piscine, je viens de découvrir ton blog qui est top!
    Le lien avec les fichiers eagles est mort : pourrais-tu remettre en ligne les fichiers eagles de tes carte?
    De plus, pourrais-tu préciser si tu te sers de cet arduino pour récupérer les valeurs de la sonde de température? J’ai pas l’impression.
    Enfin, tu parles souvent de tes relais wago 750 : tu as ces relais au niveau de ton coffret ou tu en as plusieurs? C’est relativement cher et je ne vois pas trop l’intérêt par rapport à certaines solutions comme des IPX.

    1. Bonjour, merci pour ton retour d’informations. J’ai rétabli les liens des fichiers Eagle. J’utilise un module Wago750 pour lire la température de l’eau car j’en avais un dans mon tiroir. Il existe des solutions plus simple et plus économique, certains utilise un ESP avec une sonde Dallas et des modules relais (regarde cet article cela pourrait t’inspirer https://domo.rem81.com/2023/01/09/ha-platine-relais-esp8266/ ), d’autres des modules Zigbee et pourquoi pas un module IPX, libre à toi, il faut à minima pouvoir lire la température de l’eau et piloter la pompe. Bon courage

  8. Bonjour,
    Actuellement sur home assistante et propriétaire depuis peu d’une piscine, je viens de découvrir ton blog qui est top!
    Le lien avec les fichiers eagles est mort : pourrais-tu remettre en ligne les fichiers eagles de tes carte?
    De plus, pourrais-tu préciser si tu te sers de cet arduino pour récupérer les valeurs de la sonde de température? J’ai pas l’impression.
    Enfin, tu parles souvent de tes relais wago 750 : tu as ces relais au niveau de ton coffret ou tu en as plusieurs? C’est relativement cher et je ne vois pas trop l’intérêt par rapport à certaines solutions comme des IPX.

    1. Bonjour, merci pour ton retour d’informations. J’ai rétabli les liens des fichiers Eagle. J’utilise un module Wago750 pour lire la température de l’eau car j’en avais un dans mon tiroir. Il existe des solutions plus simple et plus économique, certains utilise un ESP avec une sonde Dallas et des modules relais (regarde cet article cela pourrait t’inspirer https://domo.rem81.com/2023/01/09/ha-platine-relais-esp8266/ ), d’autres des modules Zigbee et pourquoi pas un module IPX, libre à toi, il faut à minima pouvoir lire la température de l’eau et piloter la pompe. Bon courage

  9. Bonjour et merci pour le partage dentés projets.
    J’ai mis en place l’automatisation de la piscine avec succès.

    Je voudrais ajouter la mesure et régul ORP. As tu corriger les problèmes de mesures que tu as rencontré ?
    Merci

    1. Bonjour, merci pour ton retour. Concernant le PH pas de pbm la mesure et la régulation fonctionnent très bien, c’est du bon matos, par contre la mesure ORP me donne des valeurs 10 fois trop basses (80 pour 800 par ex). Rien à voir avec la sonde, l’étalonnage est parfait, c’est le produit de désinfection (HTH Advanced Chlore non stabilisé) qui donne ces valeurs d’ORP farfelue. Je vais certainement la supprimer car inutile. Bonne continuation

  10. Bonjour et merci pour le partage dentés projets.
    J’ai mis en place l’automatisation de la piscine avec succès.

    Je voudrais ajouter la mesure et régul ORP. As tu corriger les problèmes de mesures que tu as rencontré ?
    Merci

    1. Bonjour, merci pour ton retour. Concernant le PH pas de pbm la mesure et la régulation fonctionnent très bien, c’est du bon matos, par contre la mesure ORP me donne des valeurs 10 fois trop basses (80 pour 800 par ex). Rien à voir avec la sonde, l’étalonnage est parfait, c’est le produit de désinfection (HTH Advanced Chlore non stabilisé) qui donne ces valeurs d’ORP farfelue. Je vais certainement la supprimer car inutile. Bonne continuation

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *