ESPHome bornes calculées sur un filtre

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 :sob:

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 :sob:

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 :
image
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 :wink:)