#I've done exactly that to create sensors

1 messages · Page 1 of 1 (latest)

stone otter
#

template for group members:

{% set ignored = state_attr('group.ignored_unavailable_entities', 'entity_id') | default([], true) %}
{{ states
    | rejectattr('domain','in',['button', 'device_tracker', 'event', 'group', 'image', 'input_button', 'input_text', 'remote', 'tts', 'scene', 'stt'])
    | rejectattr('entity_id', 'in', integration_entities('browser_mod'))
    | rejectattr('entity_id', 'in', integration_entities('fully_kiosk'))
    | rejectattr('entity_id', 'in', integration_entities('hassio'))
    | rejectattr('entity_id', 'in', integration_entities('dlna_dmr'))
    | rejectattr('entity_id', 'search', '_door_lock_intrusion|_door_lock_lock_jammed|_door_lock_keypad_temporary_disabled|_door_lock_system_hardware_failure')
    | rejectattr('entity_id', 'contains', 'garage_inside_frigate')
    | rejectattr('entity_id', 'contains', 'front_door_lock')
    | rejectattr('entity_id', 'in', ['sensor.deck_chromecast', 'sensor.office_chromecast'])
    | rejectattr('entity_id', 'contains', 'daily_energy_consumption')
    | rejectattr('entity_id', 'contains', 'jason_laptop_media_player')
    | rejectattr('entity_id', 'contains', 'jason_phone_media_player')
    | rejectattr('entity_id', 'contains', 'jason_tablet_media_player')
    | rejectattr('entity_id', 'search', 'charlie_crate_camera|charlie_crate_frigate|living_room_camera|living_room_frigate')
    | rejectattr('entity_id', 'search', 'jphone_app|jtablet_app|jlaptop_chrome|jwork_chrome|_dlna|_timers|_alarms|_next_alarm')
    | rejectattr('entity_id', 'in', ignored)
    | map(attribute='entity_id')
    | list
}}
#

You can use this to define the group members:

{% set ignored = state_attr('group.ignored_unavailable_entities', 'entity_id') | default([], true) %}
{{ states
    | rejectattr('domain','in',['button', 'device_tracker', 'event', 'group', 'image', 'input_button', 'input_text', 'remote', 'tts', 'scene', 'stt'])
    | rejectattr('entity_id', 'in', integration_entities('browser_mod'))
    | rejectattr('entity_id', 'in', integration_entities('fully_kiosk'))
    | rejectattr('entity_id', 'in', integration_entities('hassio'))
    | rejectattr('entity_id', 'in', integration_entities('dlna_dmr'))
    | rejectattr('entity_id', 'search', '_door_lock_intrusion|_door_lock_lock_jammed|_door_lock_keypad_temporary_disabled|_door_lock_system_hardware_failure')
    | rejectattr('entity_id', 'contains', 'garage_inside_frigate')
    | rejectattr('entity_id', 'contains', 'front_door_lock')
    | rejectattr('entity_id', 'in', ['sensor.deck_chromecast', 'sensor.office_chromecast'])
    | rejectattr('entity_id', 'contains', 'daily_energy_consumption')
    | rejectattr('entity_id', 'contains', 'jason_laptop_media_player')
    | rejectattr('entity_id', 'contains', 'jason_phone_media_player')
    | rejectattr('entity_id', 'contains', 'jason_tablet_media_player')
    | rejectattr('entity_id', 'search', 'charlie_crate_camera|charlie_crate_frigate|living_room_camera|living_room_frigate')
    | rejectattr('entity_id', 'search', 'jphone_app|jtablet_app|jlaptop_chrome|jwork_chrome|_dlna|_timers|_alarms|_next_alarm')
    | rejectattr('entity_id', 'in', ignored)
    | map(attribute='entity_id')
    | list
}}
#

then expand that group and check on the last_changed and state

simple scarab
#

This should be faster

#
            {% set ignore_seconds = 60 %}
            {% set ignored = state_attr('group.ignored_unavailable_entities', 'entity_id') %}
            {% set ignore_ts = (now().timestamp() - ignore_seconds) | as_datetime %}
            {% set int_entities = ['browser_mod', 'fully_kiosk', 'hassio', 'dlna_dmr'] | map('integration_entities') | sum(start=[]) | unique | list + ['sensor.deck_chromecast', 'sensor.office_chromecast'] %}
            {% set things_to_remove = [ 
              '_door_lock_intrusion|_door_lock_lock_jammed|_door_lock_keypad_temporary_disabled|_door_lock_system_hardware_failure',
              'garage_inside_frigate',
              'front_door_lock',
              'daily_energy_consumption',
              'jason_laptop_media_player',
              'jason_phone_media_player',
              'jason_tablet_media_player',
              'charlie_crate_camera|charlie_crate_frigate|living_room_camera|living_room_frigate',
              'jphone_app|jtablet_app|jlaptop_chrome|jwork_chrome|_dlna|_timers|_alarms|_next_alarm',
            ] | join('|') %}
            {% set entities = states
                | rejectattr('domain','in',['button', 'device_tracker', 'event', 'group', 'image', 'input_button', 'input_text', 'remote', 'tts', 'scene', 'stt'])
                | rejectattr('entity_id', 'in', int_entities)
                | rejectattr('entity_id', 'search', things_to_remove)
                | rejectattr('last_changed', 'ge', ignore_ts) %}
            {% set entities =  entities | rejectattr('entity_id', 'in', ignored) if ignored != none else entities %}
            {{ entities | map(attribute='entity_id') | reject('has_value') | list | sort }}
#

it's 1 regex vrs 83749273498273 regex's

stone otter
#

hehe

#

I didn't check on the state and last_changed in my version, so that can be handled in the template for the count. Otherwise you'll only have the unavailable entitites in the group, and you won't have the advantage that the count will update immediately as soon as an entity becomes unavailable for the set time period

simple scarab
#

I just noticed that ignore ts is suspect

#

it's subtracting 60 seconds

#

and comparing a datetime to a timestamp

#

which I'm not 100% sure correct. It probably is, but it's odd