Files
Bastian Schnorbus 188671fd7e update
2025-05-04 15:46:15 +02:00

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