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