Bonjour,
Mon problème
Dans ESPHome, je cherche à définir des bornes calculées via 2 variables dans un filtre.
J’ai ceci :
substitutions:
angle_min: '60.0'
angle_max: '80.0'
tolerance: '2.0'
sensor:
platform: template
id: testClamp
name: testClamp
unit_of_measurement: °
update_interval: 10s
filters:
- clamp:
min_value: ${angle_min}
max_value: ${angle_max}
Et je voudrais pouvoir, par calcul, remplacer les valeur min et max en intégrant la tolérance comme ceci :
min_value: ${angle_min} + ${tolerance}
min_value: ${angle_max} - ${tolerance}
Mais j’ai systématiquement une erreur ‹ float expected ›
Et je n’arrive pas à réaliser cela avec un lambda 
Merci d’avance aux âmes charitables pour leur aide …
Salut,
J’ai pas bien compris l’histoire des clamps (pour moi ce sont les pinces, donc rien à voir avec un angle)… Donc le filtre me parait bancale
Sinon tu dois pouvoir déclarer une variable
substitutions:
angle_min: '60.0'
angle_max: '80.0'
tolerance: '2.0'
globals:
- id: min_clamp
type: float
restore_value: no
initial_value: '${angle_min} + ${tolerance}'
- id: max_clamp
type: float
restore_value: no
initial_value: '${angle_max} - ${tolerance}'
et ensuite tu appelles le contenu via son ID
id(min_clamp);
Si tu veux vraiment faire le calcul dans un lambda
lambda: |-
float angle_min = ${angle_min};
float angle_max = ${angle_max};
float tol = ${tolerance};
id(min_clamp) = angle_min + tol;
id(max_clamp) = angle_max - tol;
Alors, j’ai essayé ceci :
substitutions:
angle_min: '60.0'
angle_max: '80.0'
tolerance: '2.0'
globals:
- id: min_clamp
type: float
restore_value: no
initial_value: '${angle_min} + ${tolerance}'
- id: max_clamp
type: float
restore_value: no
initial_value: '${angle_max} - ${tolerance}'
sensor:
platform: template
id: testClamp
name: testClamp
unit_of_measurement: °
update_interval: 10s
filters:
- clamp:
min_value: id(min_clamp)
max_value: id(max_clamp)
Mais j’ai toujours l’erreur expected float

A la place de id(min_clamp)
, j’ai essayé, sans succès ceci :
${min_clamp}
id(min_clamp).initial_value
Quelle est la syntaxe dans le filters.clamp
pour avoir accès à la valeur calculée de min_clamp
?
A mon avis ça marche pas dans dans filter.clamp moi je trouve rien qui soit en rapport avec les filtre min/max
Par contre, tu peux valider le reste, vire le sensor et confirme que la def et le calcul sont OK
En virant l’appel à la variable dans le filters.clamp
du sensor et en faisant un validate
du code dans ESPHome, je vois que initial_value
retourne une chaine correspondant au calcul à faire mais pas à la valeur calculée :
C’est normal ?
Teste avec un lambda du genre (vire le initial value si besoin)
esphome:
on_boot:
then:
- lambda: |-
float angle_min = ${angle_min};
float angle_max = ${angle_max};
float tol = ${tolerance};
id(min_clamp) = angle_min + tol;
id(max_clamp) = angle_max - tol;
En faisant comme cela :
globals:
- id: angle_min_roulis_clamp
type: float
restore_value: no
# initial_value: '${angle_min_roulis} + ${angle_securite_logiciel}'
- id: angle_max_roulis_clamp
type: float
restore_value: no
# initial_value: '${angle_max_roulis} - ${angle_securite_logiciel}'
esphome:
on_boot:
then:
- lambda: |-
float angle_min = ${angle_min_roulis};
float angle_max = ${angle_max_roulis};
float tol = ${angle_securite_logiciel};
id(angle_min_roulis_clamp) = angle_min + tol;
id(angle_max_roulis_clamp) = angle_max - tol;
La validation me retourne :

Et
Mais comment récupérer la valeur de id(angle_min_roulis_clamp)
et id(angle_max_roulis_clamp)
?
En faisant comme tu fais là. En utilisant id(). C’est une variable globale
Et comment je peux accéder à sa valeur ?
Je n’arrive pas à trouver de documentation sur l’accès aux variables sous ESPHome
Ihttps://esphome.io/components/globals.html
Salut, de ce que j’ai pu voir, c’est au niveau de la validationdu yaml que des float sont requis pour les bornes min/max du composant clamp, c’est a dire lors de validation du yaml.
Je ne suis pas un spécialiste des id(), mais j’ai peur que ce ne soit pas possible de faire ce qui est souhaité.
En espérant me tromper ( et j’aurais appris qqchose de plus
)