Jinja code pegs CPU

Hey guys

Im terrible at jinja - but when I type this into the dev>template test page, it pegs the CPU to 100% on my NUC and I get a spinning wheel in the tester. The result EVENTUALLY gets rendered after about 20seconds, but if sensor.brewery_power_consumption changes before HA has finished rendering it has a heart attack and everything grinds to a halt.

{% if states('sensor.brewery_power_consumption') | float >= 14300 and states('sensor.brewery_power_consumption') | float <=
17400 %}
 Chiller
  {% else %}
    {% if states('sensor.brewery_power_consumption') | float >= 34500 and states('sensor.brewery_power_consumption') | float <=
36400 %}
 B1+B2
    {%else%}
  {% if states('sensor.brewery_power_consumption') | float >= 4441 and states('sensor.brewery_power_consumption') | float <=
10345 %}
 Idle
    {% else %}
  {% if states('sensor.brewery_power_consumption') | float >= 17600 and states('sensor.brewery_power_consumption') | float <=
19100 %}
 B1
    {% else %}
{% endif %}

How do I clean this up???

Thx

What happens if you remove that last {% else %}?

You’re missing a load of {% endif %} statements in your structure. Here’s your code, but how I’d do it:

{% if 14300 <= states('sensor.brewery_power_consumption')|int(0) <= 17400 %}
Chiller
{% elif 34500 <= states('sensor.brewery_power_consumption')|int(0) <= 36400 %}
B1+B2
{% elif 4441 <= states('sensor.brewery_power_consumption')|int(0) <= 10345 %}
Idle
{% elif 17600 <= states('sensor.brewery_power_consumption')|int(0) <= 19100 %}
B1
{% else %}
Some default value
{% endif %}

Notes:

  • I’m using {% elif %} instead of nested {% if %}
  • I’m using range comparisons which are shorter
  • I’m using int with a default value — your comparisons don’t need float although it works the same
  • I provide a default value which your code doesn’t.
1 Like

Hey thanks forgot about elif - stoopid

Might give that a go and see how it flies.

Or this for elegance and separating data from code a bit more:

{% set b = [[ 4441, 10345, "idle"],
            [14300, 17400, "Chiller"],
            [17600, 19100, "B1"],
            [34500, 36400, "B1+B2"]] %}
{% set p = states('sensor.brewery_power_consumption')|int(0) %}
{% set o = b|selectattr(0,'<=',p)|selectattr(1,'>=',p)|list %}
{{ o[0][2] if o else "default" }}