#jinja2
#jinja2
Вопрос:
Я использую шаблоны Home Assistant, которые запускаются в скрипте Jinja2.
У меня есть группа сущностей ( states.group.doors
), у которых есть атрибут battery_level
. Я хочу создать массив объектов с battery_level
< min_battery level
и отобразить в виде строки, разделенной запятыми.
Я не могу понять, что не так с моим синтаксисом. Два вопроса:
- Есть ли в целом лучший способ создать список, который фильтруется
battery_level < min_battery_level
, а не создавать массив, как я? - Если нет, то, должно быть, что-то не так с тем, как я строю этот массив. Кто-нибудь может это заметить?
Спасибо за помощь.
Следующий код успешно обнаруживает battery_level < 98
и отображает true
, соответствует ли что-либо этим критериям, так что я почти на месте.
{% set min_battery_level = 98 -%}
{% set ns = namespace(found=false, entities=[]) -%}
{% set entities = [] -%}
{% for entity_id in states.group.doors.attributes.entity_id -%}
{% set parts = entity_id.split('.') -%}
{% if (state_attr(entity_id, 'battery_level') | replace("%","") | int) < min_battery_level -%}
{% set ns.found = true -%}
{% set entities = entities [entity_id] -%}
{% endif -%}
{% endfor -%}
{{ ns.found }}
{{ entities | join(' ') }}
Ответ №1:
Welp … продолжал играть с ним и заставил его работать следующим образом:
{% set min_battery_level = 98 -%}
{% set ns = namespace(found=false, entities = []) -%}
{% for entity_id in states.group.doors.attributes.entity_id -%}
{% set name = state_attr(entity_id, 'friendly_name') | string -%}
{% set battery = state_attr(entity_id, 'battery_level') | replace("%","") | int -%}
{% if (battery) < min_battery_level -%}
{% set ns.found = true -%}
{% set ns.entities = ns.entities [name ' (' battery|string '%)'] -%}
{% endif -%}
{% endfor -%}
{{ ns.found }}
{{ ns.entities | join(', ') }}