mon pisciniste ne m a pas raconter de betise suivant ce blog
Hello
Pour info, comme tu as deja testé, si je prends une sonde comme ca je vois que elle semble s’etalloner avec du ph4 et 7
Mon ph metre veut du 7 et du 10…
On fait comment du coup?
Merci
C’est le pH-mètre qui décide. La sonde donne une tension en fonction du pH, le but de la calibration c’est de savoir quelle tension correspond à quel pH.
ce n est pas la sonde que tu etalonne mon ton boitier .
mon astralpool ph etalonne avec seulement du ph7 .
mon astralpool redox avec du 468mv .
le module de @abulcke etalonne le ph avec ph4 et ph7 et le redox avec du 256mv .
en fait ta sonde donne un valeur quand tu la trempe dans ta solution d etalonnage et ton boitier enregistre cette information .
il te faut une solution ph7 et une ph10 et ensuite tu suis les instructions de ton boitier .
ok merci j’avais pas pris la probleme dans le bon sens
Merci pour l’éclairage
je connais pas le model que tu a pris mais pour le ph j achete toujour les sondes bleu et pas les noir .
Ok. Noté
Tu sais pourquoi blue plutôt que noir?
strictement aucune idée ![]()
ma sonde astralpool etait bleu donc je continue sur du bleu , c est peut etre et surement les meme d aileur , mais comme jamais eut de probleme avec le model bleu je continue
Nouvelle version du code qui corrige l’erreur Z2M lors de la calibration :
Faut-il installer ESP Home pour faire fonctionner l analyse ?
Si c’est pour mon système il se programme avec Arduino IDE (cf github)
Je pense avoir avancé sur le soucis du LQI faible. J’ai oublié d’activer l’antenne externe.
Version 1.11 :
Bonjour à tous
Comment se passe la calibration des sondes ?
Il y a un switch exposé qui bascule en mode calibration ? Si quelqu’un à des infos je suis preneur
salut tous est expliquer en deput de post avec les capture d ecrans.
Avec l’antenne externe activée correctement (version 1.1 du code) je suis passé de LQI 40 à LQI130 !
salut
j ai mis en test un dasboard minimal pour ton boitier je partage ici si sa peut donner des idées .
j ai ajouter les boutons de calibrations aussi mais pas eut encore le temp de les tester pour voir si tout est fonctionnel .
voici le code des boutons de calibrations que j ai ajouter dans mon configuration yaml , je testerais fin de semaine voir si tout est fonctionnel .
- button:
- name: "Calibration pH 4.01"
unique_id: piscine_calib_ph4
icon: mdi:test-tube
press:
action: mqtt.publish
data:
topic: "zigbee2mqtt/gestionnaire piscine/set"
payload: '{"PH401 Calibration_4": "ON"}'
- name: "Calibration pH 7.00"
unique_id: piscine_calib_ph7
icon: mdi:test-tube
press:
action: mqtt.publish
data:
topic: "zigbee2mqtt/gestionnaire piscine/set"
payload: '{"PH700 Calibration_5": "ON"}'
- name: "Calibration ORP 256mV"
unique_id: piscine_calib_orp
icon: mdi:water-check
press:
action: mqtt.publish
data:
topic: "zigbee2mqtt/gestionnaire piscine/set"
payload: '{"ORP256 Calibration_6": "ON"}'
le code de la carte principal
type: custom:button-card
show_name: false
show_icon: false
show_label: true
label: |
[[[
const ph = parseFloat(states['sensor.gestionnaire_piscine_ph_9'].state);
const orp = parseFloat(states['sensor.gestionnaire_piscine_orp_12'].state);
const temp = parseFloat(states['sensor.gestionnaire_piscine_temperature_10'].state);
const pres = parseFloat(states['sensor.gestionnaire_piscine_bar'].state);
function getStatus(val, ranges) {
for (let r of ranges) {
if (val >= r.min && val <= r.max) return r;
}
return { label: 'Hors plage', color: 'salmon' };
}
function getPosPct(val, min, max) {
return Math.min(100, Math.max(0, ((val - min) / (max - min)) * 100));
}
function buildBar(val, min, max, segments, unit, icon, name, statusRanges) {
const status = getStatus(val, statusRanges);
const pct = getPosPct(val, min, max);
const ticks = [];
const step = (max - min) / 4;
for (let i = 0; i <= 4; i++) {
const v = min + i * step;
ticks.push(`<span style="position:absolute;left:${i*25}%;transform:translateX(-50%);font-size:11px;color:#aaa;">${Math.round(v*10)/10}</span>`);
}
const gradSegments = segments.map(s => `${s.color} ${s.from}% ${s.to}%`).join(', ');
return `
<div style="margin-bottom:18px;">
<div style="display:flex;align-items:center;gap:10px;margin-bottom:6px;">
<span style="font-size:22px;">${icon}</span>
<span style="color:#aaa;font-size:13px;">${unit}</span>
<div style="margin-left:auto;display:flex;align-items:center;gap:8px;">
<div style="background:goldenrod;color:white;font-size:13px;font-weight:600;padding:3px 10px;border-radius:6px;">${val}</div>
<span style="color:${status.color};font-size:13px;font-weight:500;">${status.label}</span>
</div>
</div>
<div style="position:relative;height:18px;border-radius:9px;background:linear-gradient(to right,${gradSegments});overflow:visible;margin:0 4px;">
<div style="position:absolute;left:${pct}%;top:-5px;transform:translateX(-50%);width:4px;height:28px;background:white;border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,0.5);"></div>
</div>
<div style="position:relative;height:18px;margin:0 4px;">
${ticks.join('')}
</div>
<div style="color:#aaa;font-size:11px;margin-top:2px;">${name}</div>
</div>`;
}
const phStatus = [
{ min: 0, max: 6.99, label: 'Trop acide', color: 'salmon' },
{ min: 7.0, max: 7.19, label: 'Acceptable', color: 'grey' },
{ min: 7.2, max: 7.4, label: 'Idéal', color: 'lightskyblue' },
{ min: 7.41, max: 7.6, label: 'Acceptable', color: 'grey' },
{ min: 7.61, max: 99, label: 'Trop basique', color: 'salmon' },
];
const orpStatus = [
{ min: 0, max: 649, label: 'Trop faible', color: 'salmon' },
{ min: 650, max: 699, label: 'Acceptable', color: 'grey' },
{ min: 700, max: 750, label: 'Idéal', color: 'lightskyblue' },
{ min: 751, max: 800, label: 'Acceptable', color: 'grey' },
{ min: 801, max: 9999, label: 'Trop élevé', color: 'salmon' },
];
const tempStatus = [
{ min: 0, max: 25.9, label: 'Froide', color: 'salmon' },
{ min: 26, max: 26.9, label: 'Acceptable', color: 'grey' },
{ min: 27, max: 28, label: 'Idéal', color: 'lightskyblue' },
{ min: 28.1, max: 28.9, label: 'Acceptable', color: 'grey' },
{ min: 29, max: 99, label: 'Trop chaude', color: 'salmon' },
];
const presStatus = [
{ min: 0, max: 0.49, label: 'Trop faible', color: 'salmon' },
{ min: 0.5, max: 1.0, label: 'Idéal', color: 'lightskyblue' },
{ min: 1.01, max: 1.5, label: 'Élevée', color: 'grey' },
{ min: 1.51, max: 99, label: 'Colmatage', color: 'salmon' },
];
const phBar = buildBar(ph, 6.8, 7.8, [
{from:0, to:20, color:'salmon'},
{from:20, to:40, color:'grey'},
{from:40, to:60, color:'lightskyblue'},
{from:60, to:80, color:'grey'},
{from:80, to:100, color:'salmon'}
], 'pH', '🔵', 'pH', phStatus);
const orpBar = buildBar(orp, 600, 850, [
{from:0, to:20, color:'salmon'},
{from:20, to:40, color:'grey'},
{from:40, to:60, color:'lightskyblue'},
{from:60, to:80, color:'grey'},
{from:80, to:100, color:'salmon'}
], 'mV', '⚡', 'ORP / Redox', orpStatus);
const tempBar = buildBar(temp, 25, 30, [
{from:0, to:20, color:'salmon'},
{from:20, to:40, color:'grey'},
{from:40, to:60, color:'lightskyblue'},
{from:60, to:80, color:'grey'},
{from:80, to:100, color:'salmon'}
], '°C', '🌡️', 'Température', tempStatus);
const presBar = buildBar(pres, 0, 2, [
{from:0, to:25, color:'salmon'},
{from:25, to:50, color:'lightskyblue'},
{from:50, to:75, color:'grey'},
{from:75, to:100, color:'salmon'}
], 'bar', '🔧', 'Pression filtre', presStatus);
return `<div style="padding:12px 4px;font-family:sans-serif;background:transparent;">
${tempBar}
${phBar}
${orpBar}
${presBar}
</div>`;
]]]
styles:
card:
- background: rgba(0,0,0,0)
- border-radius: 16px
- padding: 8px
label:
- text-align: left
- width: 100%
- padding: 0
le code de la carte calibration
show_name: true
show_icon: true
type: button
entity: button.calibration_ph_4_01
name: calib pH 4
icon: mdi:test-tube
show_state: false
hold_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.calibration_ph_4_01
grid_options:
columns: 4
rows: 2
uix:
style: |
:host {
--uix-icon-color: salmon;
}
ha-card {
color: lightskyblue;
--ha-card-background: rgba(0,0,0,0);
}
ha-card::before {
content: "{{states ('sensor.gestionnaire_piscine_ph_9')}}";
white-space: pre;
font-size: 18px;
color: goldenrod;
}
bien sur tout est aux couleur de mon dashboard il y a juste a modifier dans le code suivant les gouts et couleurs
EDIT
je vient de faire des essais et tout fonctionne j ai mis a jour le code pour generer les boutons ou il y avais une erreur .
j ai aussi mis a jour le code de la carte en mettant le hold_action et en ajoutant le taux ph et redox au dessus de l icone ce qui permet d avoir un visuel direct pour la calibration .
Beau travail et d’avance merci.
Suggestion en passant :
Sur les.bandzs de couleur, faire correspondre la couleur avec la donnée
-
Température : bleu profond, turquoise, vert émeraude, jaune-orange, rouge
-
pH : reprendre les couleurs sur les bandelettes pH
-
Redox : rouge, jaune, vert, orange, violet
Sur les icônes de calibration, faire correspondre la couleur de l’icône avec la couleur correspondante à la valeur ciblee. La valeur affichée au-dessus en blanc et lorsque la valeur correspond à la cible mettre le texte de la même couleur.
salut @Bensmens tout mes dasboard sont couleurs salmon , lightskyblue et goldenrod c est pour ca que je suis rester sur la meme chose ensuite a chacun d adapter a son theme au gres de ses envie en modifiant la carte ![]()
![]()







