Modifier la valeur d'un input_number dans un automatisme

Mon problème

j’ai crée un automatisme qui doit changer la valeur de mon input_number.grid_max_charger_current toutes les 15 secondes suivant la valeur du capteur sensor.reseau_enedis. le but est d’exécuter une formule mathématique en prenant garde que la valeur calculées et qui doit être injecté dans input_number.grid_max_charger_current ne soit pas inferieur à 1 et pas supérieur à 60. Le problème est que le LOG me retourne une erreur comme quoi input_number.grid_max_charger_current est égal à 61. j’ai l’impression que mes instructions permettant le bornage à 1 et à 60 ne fonctionne pas. Comment dois affecter correctement input_number.grid_max_charger_current ?

mon code:

service: input_number.set_value
data:
  value: |-
    {%if states('sensor.reseau_enedis')|int > -80%} {
       {% set new_value = states('input_number.grid_max_charger_current')|int -
               (((states('sensor.reseau_enedis'))|int|abs|int - 80) / (states('sensor.vbat')|int)  )|round(0) %}
             {% if new_value < 2.0 %}
               {{ 1.0 }}
             {% else %}
               {{ new_value }}
             {% endif %}

     }{%endif%} 

    {%if states('sensor.reseau_enedis')|int < -80%} {
       {% set new_value = states('input_number.grid_max_charger_current')|int +
               (((states('sensor.reseau_enedis'))|int|abs|int - 80) / (states('sensor.vbat')|int)  )|round(0) %}
             {% if new_value > 59.0 %}
               {{ 60.0}}
             {% else %}
               {{ new_value }}
             {% endif %}


     }{%endif%} 
target:
  entity_id: input_number.grid_max_charger_current

Ma configuration


Texte à remplacer par votre configuration

Comment récupérer ma configuration :
Dans votre HA, Menu latéral Paramètres > Système > Corrections puis les trois petits points en haut a droite > Informations Système puis une fois en bas Copier


Salut,

je ne connais pas les valeurs que tu peux avoir, mais de faire la logique 2 fois peut potentiellement t’attirer des ennuis.

Comme le calcul de « new_value » semble être le même dans tes 2 cas, fais le qu’une seule fois au début.
Ensuite fais ta logique pour borner avec une seule sortie de « new_value ».
Je ne sais pas si ça va arranger ton résultat, mais ce sera déjà plus simple à lire

Une façon lisible de le faire peut être comme ça:

{% if new_value < 2.0 %}
      {% set new_value = 1.0 %}
{% endif %}
{% if new_value > 59.0 %}
      {% set new_value = 60.0 %}
{% endif %}
{{ new_value }}
1 « J'aime »

Voire même sans IF

{% set sre=states('sensor.reseau_enedis') %}
{% set sre=-45%}
{{ max(min(sre|abs,60),1) }}

La 2ème ligne c’est pour tester, donc à virer en vrai

1 « J'aime »

Bien joué !!! :grinning:par contre je trouve cette syntaxe très curieuse → {{ max(min(sre|abs,60),1) }} peux tu m’expliquer la logique d’une telle écriture

C’est juste un empilement de fonctions et de logique mathématique

  • Valeur absolue sur la valeur du sensor => sre|abs
  • On récupère le minimum entre la valeur ci-dessus et 60 => min(xxx,60)Le truc c’est que si c’est plus petit on garde la valeur du sensor, si c’est plus grand on garde le 60
  • On récupère cette fois le maximum entre la valeur ci-dessus et 1 => max(xxx,1)Même astuce qu’au dessus mais inversée. D’ailleurs ici elle est forcement plus grande du fait de la valeur absolue (mais limitée à 60) sauf pour le 0
  • On affiche/retourne la valeur {{ xxx }}
1 « J'aime »