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
Ç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.
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

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 .








