Starting in 0.115 this should now update when any sensor updates because it will be monitoring states.sensor
. When you update to 0.115, you can safely remove entity_id: sensor.time
.
Until then, try this:
- platform: template
sensors:
light_total_energy:
friendly_name: Light Total Energy
entity_id: sensor.time
unit_of_measurement: kWh
icon_template: mdi:counter
value_template: >
{% set ns = namespace(states=[], offline=[]) %}
{% for s in states.sensor %}
{% if s.object_id.endswith('_dimmer_energy') %}
{% if s.state in ['unavailable', 'unknown' ] %}
{% set ns.offline = ns.offline + [ s.entity_id ] %}
{% else %}
{% set ns.states = ns.states + [ s.state | float ] %}
{% endif %}
{% endif %}
{% endfor %}
{% if ns.offline | count > 0 %}
unavailable
{% else %}
{{ ns.states | sum | round(2) }}
{% endif %}
If that gives you problems, i.e. you still get goofy numbers, use the availability template
- platform: template
sensors:
light_total_energy:
friendly_name: Light Total Energy
entity_id: sensor.time
unit_of_measurement: kWh
icon_template: mdi:counter
value_template: >
{% set ns = namespace(states=[]) %}
{% for s in states.sensor %}
{% if s.object_id.endswith('_dimmer_energy') %}
{% set ns.states = ns.states + [ s.state | float ] %}
{% endif %}
{% endfor %}
{{ ns.states | sum | round(2) }}
availability_template: >
{% set ns = namespace(offline=0) %}
{% for s in states.sensor %}
{% if s.object_id.endswith('_dimmer_energy') and s.state in ['unavailable', 'unknown' ] %}
{% set ns.offline = ns.offline + 1 %}
{% endif %}
{% endfor %}
{{ ns.offline == 0 }}