diff --git a/automations.yaml b/automations.yaml index 2922c35..2791671 100644 --- a/automations.yaml +++ b/automations.yaml @@ -1429,16 +1429,10 @@ data: title: Lockdown Issue notification_id: lockdown_issue - message: 'I fucked up this notification, will fix later, but you still gotta - issue, okbyeeeee {% set extdoors = expand(''binary_sensor.exterior_doors'') - | selectattr(''state'',''eq'',''on'') | map(attribute=''name'') | list | join('', - '') %} {% set windows = expand(''binary_sensor.windows'') | selectattr(''state'',''eq'',''on'') - | map(attribute=''name'') | list | join('', '') %} A lockdown issue has been - caused by the following sensors: + message: '{% set faults = state_attr(''sensor.total_faults'',''faulted'') | + join('', '') %} A lockdown issue has been caused by the following sensors: - Doors:{% if is_state(''binary_sensor.exterior_doors'',''on'') %} {{ extdoors - }} {% else %} None {% endif %} Windows:{% if is_state(''binary_sensor.windows'',''on'') - %} {{ windows }} {% else %} None {% endif %}' + {{ faults }}' - service: script.text_notify data: type: critical @@ -1446,16 +1440,10 @@ %}\n tony\n{% else %}\n parents\n{% endif %}" title: Security Not Armed! tag: lockdown-issue - message: 'I fucked up this notification, will fix later, but you still gotta - issue, okbyeeeee {% set extdoors = expand(''binary_sensor.exterior_doors'') - | selectattr(''state'',''eq'',''on'') | map(attribute=''name'') | list | join('', - '') %} {% set windows = expand(''binary_sensor.windows'') | selectattr(''state'',''eq'',''on'') - | map(attribute=''name'') | list | join('', '') %} A lockdown issue has been - caused by the following sensors: + message: '{% set faults = state_attr(''sensor.total_faults'',''faulted'') | + join('', '') %} A lockdown issue has been caused by the following sensors: - Doors:{% if is_state(''binary_sensor.exterior_doors'',''on'') %} {{ extdoors - }} {% else %} None {% endif %} Windows:{% if is_state(''binary_sensor.windows'',''on'') - %} {{ windows }} {% else %} None {% endif %}' + {{ faults }}' - if: - condition: state entity_id: binary_sensor.basement_occupied diff --git a/packages/security.yaml b/packages/security.yaml index 09fe5db..713304e 100644 --- a/packages/security.yaml +++ b/packages/security.yaml @@ -189,6 +189,36 @@ template: 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 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 fn = namespace(friendly=[]) %} + {% for device_id in device_list %} + {% if device_id in device_list %} + {% set name = device_attr(device_id,'name') %} + {% set fn.friendly = fn.friendly + [name] %} + {% endif %} + {% endfor %} + {{ fn.friendly }} icon: >- {% if states('sensor.window_faults') | int > 0 %} mdi:window-open @@ -221,6 +251,36 @@ template: 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 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 fn = namespace(friendly=[]) %} + {% for device_id in device_list %} + {% if device_id in device_list %} + {% set name = device_attr(device_id,'name') %} + {% set fn.friendly = fn.friendly + [name] %} + {% endif %} + {% endfor %} + {{ fn.friendly }} icon: >- {% if states('sensor.door_faults') | int > 0 %} mdi:door-open @@ -235,8 +295,22 @@ template: selectattr('attributes.device_class','eq','window') | selectattr('attributes.entity_id','eq',null) | rejectattr('entity_id','search','windows') %} - {% set windows_open = windows | selectattr('state','eq','on') | list | count %} + {% set windows_open = windows | + selectattr('state','eq','on') | + list | + count %} {{ windows_open }} + attributes: + open: > + {% set windows = states.binary_sensor | + selectattr('attributes.device_class','eq','window') | + selectattr('attributes.entity_id','eq',null) | + rejectattr('entity_id','search','windows') %} + {% set window_names = windows | + selectattr('state','eq','on') | + map(attribute='attributes.friendly_name') | + list %} + {{ window_names }} icon: >- {% if states('sensor.windows_open') | int == 0 %} mdi:window-closed @@ -253,6 +327,17 @@ template: ] %} {% set windows_open = windows | selectattr('state','eq','on') | list | count %} {{ windows_open }} + attributes: + open: > + {% set windows = [ + states.binary_sensor.front_window_1, + states.binary_sensor.front_window_2 + ] %} + {% set window_names = windows | + selectattr('state','eq','on') | + map(attribute='attributes.friendly_name') | + list %} + {{ window_names }} icon: >- {% if states('sensor.front_windows_open') | int == 0 %} mdi:window-closed @@ -270,6 +355,15 @@ template: map(attribute='entity_id') | list | count %} {{ windows_open }} + attributes: + open: > + {% set windows_open = states.binary_sensor | + selectattr('entity_id','in',area_entities('living_room')) | + selectattr('attributes.device_class','eq','window') | + selectattr('state','eq','on') | + map(attribute='entity_id') | + list | count %} + {{ windows_open }} icon: > {% if states('sensor.living_room_windows_open') | int == 0 %} mdi:window-closed @@ -280,12 +374,20 @@ template: unique_id: 61b1a98a-51a4-4faa-947d-7883de2430c0 unit_of_measurement: 'open' state: >- - {% set doors = [ - states.binary_sensor.front_door, - states.binary_sensor.back_door, - ] %} - {% set doors_open = doors | selectattr('state','eq','on') | list | count %} + {% set doors = expand('binary_sensor.exterior_doors') %} + {% set doors_open = doors | + selectattr('state','eq','on') | + list | + count %} {{ doors_open }} + attributes: + open: > + {% set doors = expand('binary_sensor.exterior_doors') %} + {% set door_names = doors | + selectattr('state','eq','on') | + map(attribute='attributes.friendly_name') | + list %} + {{ door_names }} icon: >- {% if states('sensor.doors_open') | int == 0 %} mdi:door-closed @@ -296,11 +398,28 @@ template: unique_id: 772aa056-881a-4778-ba5b-19e46afc107a unit_of_measurement: 'open' state: >- - {% set doors = [ - states.binary_sensor.basement_studio_door - ] %} - {% set doors_open = doors | selectattr('state','eq','on') | list | count %} - {{ doors_open }} + {% set exterior = expand('binary_sensor.exterior_doors') | + map(attribute='entity_id') | + list %} + {% set interior = states.binary_sensor | + selectattr('attributes.device_class','eq','door') | + rejectattr('entity_id','in',exterior) | + rejectattr('entity_id','eq','binary_sensor.exterior_doors') | + selectattr('state','eq','on') | + list | + count %} + attributes: + open: > + {% set exterior = expand('binary_sensor.exterior_doors') | + map(attribute='entity_id') | + list %} + {% set interior = states.binary_sensor | + selectattr('attributes.device_class','eq','door') | + rejectattr('entity_id','in',exterior) | + rejectattr('entity_id','eq','binary_sensor.exterior_doors') | + selectattr('state','eq','on') | + map(attribute='attributes.friendly_name') | + list %} icon: >- {% if states('sensor.interior_doors_open') | int == 0 %} mdi:door-closed @@ -314,6 +433,11 @@ template: {% set window_faults = states('sensor.window_faults') | int %} {% set door_faults = states('sensor.door_faults') | int %} {{ door_faults + window_faults }} + attributes: + faulted: > + {% set windows = state_attr('sensor.window_faults','faulted') %} + {% set doors = state_attr('sensor.door_faults','faulted') %} + {{ doors + windows }} icon: >- {% if states('sensor.total_faults') | int == 0 %} mdi:shield-home