181 lines
5.5 KiB
YAML
181 lines
5.5 KiB
YAML
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
|