{% 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
- это список устройств с таймаутами, которые могут долго спать