Erreur de division dans un sensor

Bonjour,

J’ai une erreur sur un de mes sensor, je suis sur que c’est rien à corriger mais, je ne trouve pas comment contourner le problème de la division de zéro qui semble être le soucis.

TemplateError('ZeroDivisionError: float division by zero') while processing template 'Template("{{(((states('sensor.daily_water')|float(default = 10) - states('sensor.water_last_day')|float(default = 10)) / states('sensor.water_last_day')|float *100))|round(2)}}")' for attribute '_attr_native_value' in entity 'sensor.water_evolution_daily'

Merci d’avance!

Salut,

Sans le code de ton sensor, ça revient un peu à jouer aux devinettes, malgré tout il y a un indice : la valeur qui sert à diviser dans ton sensor est également à 0… En maths ça n’est pas possible

C’est pas faux ^^
Voici le code:

        water_evolution_daily:
           friendly_name: "Evolution d'hier"
           value_template: "{{(((states('sensor.daily_water')|float(default = 10) - states('sensor.water_last_day')|float(default = 10)) / states('sensor.water_last_day')|float *100))|round(2)}}"
           unit_of_measurement: "%"

Oui j’ai compris que cela venez de ça mais je trouve pas comment contourner le problème.

1/ vérifie avant de faire ton calcul si

states('sensor.water_last_day')|float *100))|round(2)

est supérieur à 0.

2/ rajoute 0,01 à ton

states('sensor.water_last_day')|float *100))|round(2)

pour éviter une division par 0 (mandieu que c’est moche :smiley: )

1 « J'aime »

Merci de ton retour!
Comment je peux faire ça? Je suis pas calé sur le sujet ^^

Je n’y connais pas grand chose, mais à priori, c’est « condition » qu’il te faut utiliser :

un truc du genre

    - condition: numeric_state
      entity_id: "sensor.water_last_day"
      above: 0

Ca doit etre un truc comme ça:

{% if is_state('sensor.daily_water','0') %} mettre sensor.daily_water à zéro et faire le calcul {% else %} faire le calcul avec la valeur de sensor.daily_water {% endif %}

Mais je sais pas aller plus loin ^^

Bonjour,

J’ai fait ça:

{% if states('sensor.water_last_day')|float *100|round(2) == '0' %}
  {{(((states('sensor.daily_water')|float(default = 10) - states('sensor.water_last_day')|float(default = 10)) / (states('sensor.water_last_day') + '0.1')|float *100))|round(2)}}
{% else %} 
   {{(((states('sensor.daily_water')|float(default = 10) - states('sensor.water_last_day')|float(default = 10)) / states('sensor.water_last_day')|float *100))|round(2)}}
{% endif %}

Est-ce que c’est bon? Je suis pas sur de mon coup…

Tu as les outils de développement pour tester. Là, à distance et sans les valeurs, ça reste trop théorique

Non, ce n’est pas bon.

Essaie ça:

{% if states('sensor.water_last_day')|float == 0 %}
  {{(((states('sensor.daily_water')|float(default = 10) - states('sensor.water_last_day')|float(default = 10)) / (states('sensor.water_last_day')|float + 0.1) *100))|round(2)}}
{% else %} 
   {{(((states('sensor.daily_water')|float(default = 10) - states('sensor.water_last_day')|float(default = 10)) / states('sensor.water_last_day')|float *100))|round(2)}}
{% endif %}

Yes ça fonctionne mais je pense que je mis prends pas de la bonne façon…
Il faudrait si mon sensor est à zero, lui rajouter 0.1 puis faire le calcul. Je n’arrive pas a coder cela…