Cześć.
Potrzebuje stworzyć licznik ile głowic w domu grzeje. Wymagania to: stan climate.heat ma być “heat” oraz atrybut climate current_heating_setpoint >= 21.5 w przypadku jednego typu głowic oraz occupied_heating_setpoint >= 21.5 dla drugie typu głowic.
Stworzyłem poniższy sensor i alarmuje mi błędem:
TypeError: ‘>=’ not supported between instances of ‘NoneType’ and ‘float’
Kod sensora:
({% set lookfor = [ ‘climate.ula_heat’, ‘climate.adam_heat’, ‘climate.sypialnia_heat’ ] %}
{% set ns = namespace(count=0) %}
{% for s in states.climate %}
{% if s.entity_id in lookfor and s.state == ‘heat’
and state_attr(s.entity_id, “current_heating_setpoint”) >= 21.5
or state_attr(s.entity_id, “occupied_heating_setpoint”) >= 21.5
%}
{% set ns.count = ns.count + 1 %}
{% endif %}
{% endfor %}
{{ ns.count }})
Próbujesz umieścić wszystkie warunki w jednym “ifie”.
Spróbuj w ten sposób:
Teraz rozbite na dwa osobne warunki, sprawdzające czy stan jest “heat”, a następnie sprawdzające wartość atrybutu dla odpowiedniego przypadku.
{% set lookfor = ['climate.ula_heat', 'climate.adam_heat', 'climate.sypialnia_heat'] %}
{% set ns = namespace(count=0) %}
{% for s in states.climate %}
{% if s.entity_id in lookfor and s.state == 'heat' %}
{% if state_attr(s.entity_id, 'current_heating_setpoint') is defined and state_attr(s.entity_id, 'current_heating_setpoint') >= 21.5 %}
{% set ns.count = ns.count + 1 %}
{% elif state_attr(s.entity_id, 'occupied_heating_setpoint') is defined and state_attr(s.entity_id, 'occupied_heating_setpoint') >= 21.5 %}
{% set ns.count = ns.count + 1 %}
{% endif %}
{% endif %}
{% endfor %}
{{ ns.count }}