{% set special_device_timeouts = { 'sensor.0x1c34f1fffed6742a_last_seen':15, 'sensor.0x000d6f00132ac72f_last_seen':11, } %} {% set low_battery_devices = states.sensor | selectattr('attributes.state_class', 'equalto', 'measurement') | selectattr('attributes.battery_last_reported_level', 'defined') | selectattr('attributes.battery_last_reported_level', 'is_number') | selectattr('attributes.battery_last_reported_level', 'le', 10) | list %} {% set default_timeout = 4 %} {% set offline_devices = namespace(devices=[]) %} {% for sensor in states.sensor | selectattr('entity_id', 'search', '_last_seen$') | selectattr('attributes.device_class', 'equalto', 'timestamp') | selectattr('state', 'defined') | rejectattr('state', 'in', ['unavailable', 'unknown', '']) %} {% set timeout = special_device_timeouts.get(sensor.entity_id, default_timeout) %} {% set last_seen_time = as_timestamp(sensor.state) %} {% set current_time = as_timestamp(now()) %} {% set hours_diff = ((current_time - last_seen_time) / 3600) | float %} {% set is_offline = hours_diff > timeout %} {% if is_offline %} {% set offline_devices.devices = offline_devices.devices + [sensor] %} {% endif %} {% endfor %} {% set all_devices = (offline_devices.devices + low_battery_devices) | map(attribute='attributes.friendly_name') | map('replace', 'Last seen', '') | map('replace', 'Батарея+', '') | map('trim') | join(', ')%} {{ all_devices if all_devices else none}}
Написал шаблон вспомогательного устройства, аккумулирующий названия устройств на батарейках, которые не отвечают более 11 часов (нужно устройствам включить свойство last_seen) или заряд меньше 10. Можно использовать для вывода в виджет или предупреждать Алисой.

ЗЫspecial_device_timeouts - это список устройств с таймаутами, которые могут долго спать
