update
This commit is contained in:
180
blueprints/automation/MacSiem/door_presence.yaml
Normal file
180
blueprints/automation/MacSiem/door_presence.yaml
Normal file
@@ -0,0 +1,180 @@
|
||||
blueprint:
|
||||
name: Track presence based on door + SSID + GPS
|
||||
description: 'Detect whether a person has entered or left home using a door sensor,
|
||||
Wi-Fi SSID, and GPS tracking (via Home Assistant Companion App). This automation
|
||||
optionally logs presence tracking and sends notifications.
|
||||
|
||||
'
|
||||
domain: automation
|
||||
author: MacSiem
|
||||
source_url: https://gist.github.com/MacSiem/1b1f80b4b2d9f1836c22ac562028cd66
|
||||
input:
|
||||
person_name:
|
||||
name: Person name
|
||||
description: Used in notifications and logbook entries.
|
||||
selector:
|
||||
text: {}
|
||||
door_sensor:
|
||||
name: Door sensor
|
||||
description: Trigger entity for door opening (any binary_sensor).
|
||||
selector:
|
||||
entity:
|
||||
domain:
|
||||
- binary_sensor
|
||||
multiple: false
|
||||
ssid_sensor:
|
||||
name: Wi-Fi SSID sensor
|
||||
description: Entity that provides current SSID (requires Companion App).
|
||||
selector:
|
||||
entity:
|
||||
domain:
|
||||
- sensor
|
||||
multiple: false
|
||||
gps_tracker:
|
||||
name: GPS tracker
|
||||
description: Device Tracker entity (typically from Companion App).
|
||||
selector:
|
||||
entity:
|
||||
domain:
|
||||
- device_tracker
|
||||
multiple: false
|
||||
home_ssid:
|
||||
name: Home Wi-Fi SSID
|
||||
description: Your exact home network SSID (case-sensitive).
|
||||
selector:
|
||||
text: {}
|
||||
notify_target:
|
||||
name: Notification service
|
||||
description: Choose or enter a notify service to send alerts.
|
||||
selector:
|
||||
select:
|
||||
options:
|
||||
- notify.mobile_app_johns_iphone(example)
|
||||
custom_value: true
|
||||
multiple: false
|
||||
sort: false
|
||||
enable_logbook:
|
||||
name: Enable Logbook logging
|
||||
description: If enabled, presence tracking events will be logged.
|
||||
default: true
|
||||
selector:
|
||||
boolean: {}
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: !input door_sensor
|
||||
to: 'on'
|
||||
variables:
|
||||
person_name: !input person_name
|
||||
ssid_entity: !input ssid_sensor
|
||||
gps_entity: !input gps_tracker
|
||||
notify_target: !input notify_target
|
||||
ssid_home: !input home_ssid
|
||||
logbook_enabled: !input enable_logbook
|
||||
ssid_before: '{{ states(ssid_entity) == ssid_home }}'
|
||||
gps_before: '{{ states(gps_entity) }}'
|
||||
action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: '{{ logbook_enabled }}'
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: Presence Tracker - {{ person_name }}
|
||||
message: '3 minutes before door opened - SSID: {{ ssid_before }}, GPS: {{
|
||||
gps_before }}'
|
||||
- service: homeassistant.update_entity
|
||||
target:
|
||||
entity_id:
|
||||
- '{{ ssid_entity }}'
|
||||
- '{{ gps_entity }}'
|
||||
- service: '{{ notify_target }}'
|
||||
data:
|
||||
message: request_location_update
|
||||
- delay: 00:00:05
|
||||
- variables:
|
||||
ssid_now: '{{ states(ssid_entity) == ssid_home }}'
|
||||
gps_now: '{{ states(gps_entity) }}'
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: '{{ logbook_enabled }}'
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: Presence Tracker - {{ person_name }}
|
||||
message: 'At door opening - SSID: {{ ssid_now }}, GPS: {{ gps_now }}'
|
||||
- repeat:
|
||||
count: 90
|
||||
sequence:
|
||||
- delay: 00:00:10
|
||||
- service: homeassistant.update_entity
|
||||
target:
|
||||
entity_id:
|
||||
- '{{ ssid_entity }}'
|
||||
- '{{ gps_entity }}'
|
||||
- service: '{{ notify_target }}'
|
||||
data:
|
||||
message: request_location_update
|
||||
- delay: 00:00:05
|
||||
- variables:
|
||||
ssid_after: '{{ states(ssid_entity) == ssid_home }}'
|
||||
gps_after: '{{ states(gps_entity) }}'
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: '{{ logbook_enabled }}'
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: Presence Tracker - {{ person_name }}
|
||||
message: 'After {{ repeat.index }} min - SSID: {{ ssid_after }}, GPS:
|
||||
{{ gps_after }}'
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: '{{ ssid_before and not ssid_after }}'
|
||||
sequence:
|
||||
- delay: 00:00:30
|
||||
- condition: template
|
||||
value_template: '{{ states(ssid_entity) != ssid_home }}'
|
||||
- service: '{{ notify_target }}'
|
||||
data:
|
||||
message: '{{ person_name }} has left home (Wi-Fi)'
|
||||
- stop: Automation stopped - Exit detected
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: '{{ not ssid_before and ssid_after }}'
|
||||
sequence:
|
||||
- service: '{{ notify_target }}'
|
||||
data:
|
||||
message: '{{ person_name }} has arrived home (Wi-Fi)'
|
||||
- stop: Automation stopped - Entry detected
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: '{{ gps_before == ''home'' and gps_after == ''not_home''
|
||||
}}'
|
||||
sequence:
|
||||
- service: '{{ notify_target }}'
|
||||
data:
|
||||
message: '{{ person_name }} has left home (GPS)'
|
||||
- stop: Automation stopped - Exit detected
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: '{{ gps_before == ''not_home'' and gps_after == ''home''
|
||||
}}'
|
||||
sequence:
|
||||
- service: '{{ notify_target }}'
|
||||
data:
|
||||
message: '{{ person_name }} has arrived home (GPS)'
|
||||
- stop: Automation stopped - Entry detected
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: '{{ logbook_enabled }}'
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data:
|
||||
name: Presence Tracker - {{ person_name }}
|
||||
message: Automation completed
|
||||
mode: restart
|
||||
Reference in New Issue
Block a user