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

Теги:
0
Комментарии0

Публикации

Ближайшие события