From 7a2676c93be71710155cc77ffe33347cdaa57372 Mon Sep 17 00:00:00 2001 From: Tony Stork Date: Tue, 2 Jul 2024 16:17:22 -0400 Subject: [PATCH] Refinements to security fault template sensors --- packages/security.yaml | 112 +++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 54 deletions(-) diff --git a/packages/security.yaml b/packages/security.yaml index 3317fc9..0a518cd 100644 --- a/packages/security.yaml +++ b/packages/security.yaml @@ -205,49 +205,51 @@ template: unit_of_measurement: 'faults' state: >- {% set bypass = states('sensor.bypassed_sensors') %} - {% set window_sensors = states.binary_sensor | - selectattr('attributes.device_class','eq','window') | - selectattr('attributes.entity_id','eq',null) | - rejectattr('entity_id','search','windows') | - list %} - {% set windows_open = window_sensors | - selectattr('state','eq','on') | - map(attribute='entity_id') | - map('device_id') | - list %} + {% set window_sensors = states.binary_sensor + | selectattr('attributes.device_class','eq','window') + | rejectattr('attributes.is_group','eq',true) + | rejectattr('entity_id','in',integration_entities('template')) + | rejectattr('attributes.entity_id','defined') + | list %} + {% set windows_open = window_sensors + | selectattr('state','eq','on') + | map(attribute='entity_id') + | map('device_id') + | list %} {% set id = namespace(devices=[]) %} {% for device_id in windows_open %} {% if device_id in bypass %} {% set id.devices = id.devices + [device_id] %} {% endif %} {% endfor %} - {% set window_faults = windows_open | - reject('in',id.devices) | - list | - count %} + {% set window_faults = windows_open + | reject('in',id.devices) + | list + | count %} {{ window_faults }} attributes: faulted: > {% set bypass = states('sensor.bypassed_sensors') %} - {% set window_sensors = states.binary_sensor | - selectattr('attributes.device_class','eq','window') | - selectattr('attributes.entity_id','eq',null) | - rejectattr('entity_id','search','windows') | - list %} - {% set windows_open = window_sensors | - selectattr('state','eq','on') | - map(attribute='entity_id') | - map('device_id') | - list %} + {% set window_sensors = states.binary_sensor + | selectattr('attributes.device_class','eq','window') + | rejectattr('attributes.is_group','eq',true) + | rejectattr('entity_id','in',integration_entities('template')) + | rejectattr('attributes.entity_id','defined') + | list %} + {% set windows_open = window_sensors + | selectattr('state','eq','on') + | map(attribute='entity_id') + | map('device_id') + | list %} {% set id = namespace(devices=[]) %} {% for device_id in windows_open %} {% if device_id in bypass %} {% set id.devices = id.devices + [device_id] %} {% endif %} {% endfor %} - {% set device_list = windows_open | - reject('in',id.devices) | - list %} + {% set device_list = windows_open + | reject('in',id.devices) + | list %} {% set fn = namespace(friendly=[]) %} {% for device_id in device_list %} {% if device_id in device_list %} @@ -267,49 +269,51 @@ template: unit_of_measurement: faults state: >- {% set bypass = states('sensor.bypassed_sensors') %} - {% set door_sensors = states.binary_sensor | - selectattr('attributes.device_class','eq','door') | - selectattr('attributes.entity_id','eq',null) | - rejectattr('entity_id','search','doors') | - list %} - {% set doors_open = door_sensors | - selectattr('state','eq','on') | - map(attribute='entity_id') | - map('device_id') | - list %} + {% set door_sensors = states.binary_sensor + | selectattr('attributes.device_class','eq','door') + | rejectattr('attributes.is_group','eq',true) + | rejectattr('entity_id','in',integration_entities('template')) + | rejectattr('attributes.entity_id','defined') + | list %} + {% set doors_open = door_sensors + | selectattr('state','eq','on') + | map(attribute='entity_id') + | map('device_id') + | list %} {% set id = namespace(devices=[]) %} {% for device_id in doors_open %} {% if device_id in bypass %} {% set id.devices = id.devices + [device_id] %} {% endif %} {% endfor %} - {% set door_faults = doors_open | - reject('in',id.devices) | - list | - count %} + {% set door_faults = doors_open + | reject('in',id.devices) + | list + | count %} {{ door_faults }} attributes: faulted: > {% set bypass = states('sensor.bypassed_sensors') %} - {% set door_sensors = states.binary_sensor | - selectattr('attributes.device_class','eq','door') | - selectattr('attributes.entity_id','eq',null) | - rejectattr('entity_id','search','doors') | - list %} - {% set doors_open = door_sensors | - selectattr('state','eq','on') | - map(attribute='entity_id') | - map('device_id') | - list %} + {% set door_sensors = states.binary_sensor + | selectattr('attributes.device_class','eq','door') + | rejectattr('attributes.is_group','eq',true) + | rejectattr('entity_id','in',integration_entities('template')) + | rejectattr('attributes.entity_id','defined') + | list %} + {% set doors_open = door_sensors + | selectattr('state','eq','on') + | map(attribute='entity_id') + | map('device_id') + | list %} {% set id = namespace(devices=[]) %} {% for device_id in doors_open %} {% if device_id in bypass %} {% set id.devices = id.devices + [device_id] %} {% endif %} {% endfor %} - {% set device_list = doors_open | - reject('in',id.devices) | - list %} + {% set device_list = doors_open + | reject('in',id.devices) + | list %} {% set fn = namespace(friendly=[]) %} {% for device_id in device_list %} {% if device_id in device_list %}