#I've done exactly that to create sensors
1 messages · Page 1 of 1 (latest)
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
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
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