Carte Zigbee pour piscine

Je viens de t'envoyer un mp, regarde si ça peut t'aider

Merci pour tes suggestions.

J'ai fait des modifs à tester. Voir message modifié plus haut

je vais démonter ma carte pour la flasher et lancer un test, je suis en 1.1

Je suis à la recherche d'une chambre d'analyse Zelia POD, tu l'as achetée où ?

mais c'était moins cher ! sinon :

merci pour le lien, je vais le commander

Perso, je n'ai plus de température qui remonte. Je vais voir si ce n'est pas ma sonde ou un mauvais branchement

Ça ressemble plutôt au convertisseur externe qui est resté sur l'ancienne version. Il faut parfois, comme l'euid zigbee est déjà connu, supprimer et ré appairer car il conserve le convertisseur précédent.

j'ai débranché la sonde ORP et shunté le connecteur BNC

je lis ceci:

j'ai comme capteurs deux Adaptateur pH/ORP 1130 Phidget branchés l'un sur A0 et l'autre sur A1.

le tout sur un ads1115.

notez que le phidget n'a pas de réglage, juste un piano à souris avec PH ou ORP

ca vous parait correct comme montage ?

quand j'ai bien calibré en 4.1 et 7.0, mais il m'arrive d'avoir des valeurs négatives, style -120

voila la tête de mon pH, qui correspond bien à ma sonde manuelle Testeur testeur sel de piscine pour piscine et pH-mètre avec écran couleur pour test piscine sel, aquarium, jacuzzi, hydroponie. Testeur de salinité Kit d'analyse pour aquarium d'eau salée : Amazon.fr: Commerce, Industrie et Science

et les deux valeurs ensembles...

sonde orp débranchée le 24 mai dans l'am, shunt réalisé ce jour.

rajout du logo pour la pression de l'eau

salut

je vous joint une capture des logs au cas sa parlerais a quelqu un pour la tension ORP

j ai refait des test ce soir et en ajoutant

- multiply: 0.431034

une fois calibrer la valeur ne change plus du tout elle reste sur 256 .

et quand je supprime la ligne c est ok mais plus de variation une fois la valeur de l eau remonté .

j ai penser a quelque chose qui n a peut etre rien a voir mais je n est pas de pool terre sur ma plomberie .

Salut,

On voit que l'ORP ne varie que très peu avec le shunt, ça me parait donc cohérent. Par contre on devrait être proche de 0 mais ça dépend du calibrage.

Pour l'ORP tu dois calibrer avec une solution de 256mv pas avec pH 4.01 ou pH 7.00. Avec la dernière version en test tu peux choisir ta solution de calibration.

Par contre "notez que le phidget n'a pas de réglage, juste un piano à souris avec PH ou ORP" je ne comprends pas !

Salut,

Sur ta capture on lit ORP_raw = 2.55V

image

soit ORP = (2.55-2.5)/2.32 = 0.02V soit 20mV et pas 256mV !


voila la valeur que j ai actuelement avec 2.55v

je te remet le code je l ai deja verifier et reverifier mais bon a la force je passe peut etre a coté d un truc

captive_portal:

logger:

i2c:
  sda: GPIO22
  scl: GPIO23
  scan: true

# Déclaration ADS1115 pour pH et Orp
ads1115:
  - address: 0x48

# Déclaration DS18B20 pour capteur de température
one_wire:
  - platform: gpio
    pin: GPIO1

# Wifi et antenne externe
output:
  - platform: gpio
    pin: GPIO3
    id: wifi_enable

  - platform: gpio
    pin: GPIO14
    id: ant_select

# ─── Globals sauvegardés en flash ────────────────────────────────────────────

globals:
  # Points de calibration pH 4.01
  - id: ph401_mv
    type: float
    restore_value: true
    initial_value: '-2.8573'
  - id: ph401_t
    type: float
    restore_value: true
    initial_value: '20.0'

  # Points de calibration pH 7.00
  - id: ph700_mv
    type: float
    restore_value: true
    initial_value: '0.0'
  - id: ph700_t
    type: float
    restore_value: true
    initial_value: '20.0'

  # Point de calibration ORP 256mV
  - id: orp_v256
    type: float
    restore_value: true
    initial_value: '0.256'

  # Coefficient de compensation thermique (0 = désactivé)
  - id: alpha
    type: float
    restore_value: true
    initial_value: '0.0'

# ─── Sensors ─────────────────────────────────────────────────────────────────

sensor:
  # Température DS18B20
  - platform: dallas_temp
    name: "Température piscine"
    id: temperature
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    update_interval: 15s

  # Pression analogique
  - platform: adc
    pin: GPIO0
    name: "Pression piscine"
    id: pression
    update_interval: 15s
    attenuation: 12db
    filters:
      - lambda: |-
          return ((x - 0.5f) / 3.0f) * 2.068f; //2.068 bar = 30 psi
    unit_of_measurement: "bar"
    accuracy_decimals: 2

  # ADS1115 canal pH (A0-A1)
  - platform: ads1115
    multiplexer: 'A0_A1'
    gain: 4.096
    id: ph_raw_voltage
    update_interval: 15s
    filters:
      - sliding_window_moving_average:
          window_size: 5
          send_every: 1

  # ADS1115 canal ORP (A2-A3)
  - platform: ads1115
    multiplexer: 'A2_A3'
    gain: 4.096
    id: orp_raw_voltage
    update_interval: 15s
    filters:
      - sliding_window_moving_average:
          window_size: 5
          send_every: 1

  # pH calculé avec ta formule + compensation température
  - platform: template
    name: "pH piscine"
    unit_of_measurement: "pH"
    accuracy_decimals: 2
    update_interval: 30s
    lambda: |-
      float mv    = id(ph_raw_voltage).state;
      float v401  = id(ph401_mv);
      float v700  = id(ph700_mv);
      float t700  = id(ph700_t);
      float T     = id(temperature).state;
      float a_coef = id(alpha);

      if (isnan(mv) || v700 == v401) return NAN;

      float a  = (7.00f - 4.01f) / (v700 - v401);
      float b  = 7.00f - a * v700;
      float dT = T - t700;
      return (a + a_coef * dT) * mv + b;

  # ORP calculé depuis le point de calibration 256mV
  - platform: template
    name: "ORP piscine"
    unit_of_measurement: "mV"
    accuracy_decimals: 0
    update_interval: 30s
    lambda: |-
      float v     = id(orp_raw_voltage).state;
      float v_ref = id(orp_v256);
      if (isnan(v)) return NAN;
      return 256.0f + (v - v_ref) * 1000.0f;

  # Publication des valeurs de calibration pour suivi dans HA
  - platform: template
    name: "Calib pH 4.01 tension"
    unit_of_measurement: "V"
    accuracy_decimals: 4
    lambda: return id(ph401_mv);
    update_interval: 30s
    entity_category: diagnostic

  - platform: template
    name: "Calib pH 4.01 température"
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    lambda: return id(ph401_t);
    update_interval: 30s
    entity_category: diagnostic

  - platform: template
    name: "Calib pH 7.00 tension"
    unit_of_measurement: "V"
    accuracy_decimals: 4
    lambda: return id(ph700_mv);
    update_interval: 30s
    entity_category: diagnostic

  - platform: template
    name: "Calib pH 7.00 température"
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    lambda: return id(ph700_t);
    update_interval: 30s
    entity_category: diagnostic

# WiFi
  - platform: wifi_signal
    name: "WiFi Signal dB"
    update_interval: 60s

# ─── Boutons de calibration ───────────────────────────────────────────────────

button:
  - platform: template
    name: "Calibration pH 4.01"
    on_press:
      then:
        - lambda: |-
            id(ph401_mv) = id(ph_raw_voltage).state;
            id(ph401_t)  = id(temperature).state;
            ESP_LOGI("calib", "pH 4.01 : %.4f V à %.1f°C", id(ph401_mv), id(ph401_t));

  - platform: template
    name: "Calibration pH 7.00"
    on_press:
      then:
        - lambda: |-
            id(ph700_mv) = id(ph_raw_voltage).state;
            id(ph700_t)  = id(temperature).state;
            ESP_LOGI("calib", "pH 7.00 : %.4f V à %.1f°C", id(ph700_mv), id(ph700_t));

  - platform: template
    name: "Calibration ORP 256mV"
    on_press:
      then:
        - lambda: |-
            id(orp_v256) = id(orp_raw_voltage).state;
            ESP_LOGI("calib", "ORP 256mV : %.4f V", id(orp_v256));

# ─── Réglage alpha depuis HA ──────────────────────────────────────────────────

number:
  - platform: template
    name: "Alpha compensation température pH"
    id: alpha_input
    min_value: -0.01
    max_value:  0.01
    step: 0.0001
    mode: box
    lambda: return id(alpha);
    set_action:
      - lambda: id(alpha) = x;

# ─── switch ──────────────────────────────────────────────────

switch:
  - platform: restart
    name: "Restart gestionnaire"

Il faut vraiment ajouter :

- multiply: 0.431034

mais j'avoue ne pas comprendre pourquoi ça t'affiche 747mV alors qu'en raw tu as 256mV. Il faut que je reteste la version ESPHome... ça doit venir de la calibration. Peux tu faire une capture sonde dans la solution à 256mV ?

si j ajoute le multiply rien ne fonctionne c est pour ca que je l ai enlever .

si j ajoute la ligne multiply , je compile , j etalonne la valeur passe a 256mv .
je remet la sonde dans la plomberie elle ne bouge pas du tout , elle reste a 256mv .

si je supprime la ligne multiply , je compile , j etalonne la valeur passe a 256mv .
je remet la sonde dans la plomberie elle prend la valeur de l eau et ensuite varie seulement de quelque mv meme si je fait un chlore choc .

et je precise encore tester avec plusieurs sonde qui sont fonctionnel sur mon astralpool .

tu veut la capture des log avec la tension ? je te fait sa demain en fin de journee

Oui si tu peux puis un coup de chlore choc pour voir.

En attendant tu peux essayer de mettre :

# ADS1115 canal ORP (A2-A3)
  - platform: ads1115
    multiplexer: 'A2_A3'
    gain: 2.048
    id: orp_raw_voltage
    update_interval: 15s
    filters:
      - sliding_window_moving_average:
          window_size: 5
          send_every: 1
      - multiply: 0.431034

j ai interroger plusieur ia pour voir et entre la pression et l orp qui ne fonctionne pas j ai souvent la reponse d un probleme de masse ou de cour circuit qui empeche la lecture .

demain je vais laisser le code comme il est actuelement et te faire capture log dans la solution 256mv et ensuite capture log apres une dose de chlore choc dans le skimmer pour voir si la tension change .

ensuite je testerais avec le nouveau gain .

version 1.5 en test (avec quelques modifications maison), mais toujours avec mes sondes HS. demain je met les nouvelles dans l'eau en test.