Would be cool to have 1 automation for all zones and devices, insted off haveing alot off automations
The snippet above works for all zones, but you need one per device.
You can take this a bit farther.
- alias: name entered zone
trigger:
platform: state
entity_id: device_tracker.myphone, device_tracker.secondphone, device_trackert.thirdphone
action:
- service: notify.piannouncer
data_template:
message: "{{ trigger.to_state.name }} is in {{ trigger.to_state.state }}"
Note, I don’t have use zones so I can’t test this, but try it out and see how it works. You might have to change trigger.zone
to trigger.zone.attributes.friendly_name
or trigger.zone.attributes.name
.
Also, you will have to find/replace the names of each device_tracker name and zone name.
- alias: Notify When Someone Enters Zone
trigger:
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone1
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone2
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone3
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone4
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone5
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone6
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone7
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone8
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone9
event: enter
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone10
event: enter
action:
service: notify.notify
data_template:
message: >
{{ trigger.entity_id.attributes.friendly_name }} Entered {{ trigger.zone }}
- alias: Notify When Someone Leaves Zone
trigger:
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone1
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone2
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone3
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone4
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone5
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone6
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone7
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone8
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone9
event: leave
- platform: zone
entity_id: device_tracker.mqtt_occupant1, device_tracker.mqtt_occupant2, device_tracker.mqtt_occupant3, device_tracker.mqtt_occupant4
zone: zone.zone10
event: leave
action:
service: notify.notify
data_template:
message: >
{{ trigger.entity_id.attributes.friendly_name }} Left {{ trigger.zone }}
I’ve got mine set up this way also - once per user that is being tracked.
It works well for my 8 zones - and I get the notifications when people enter or leave a zone.
My message say that "User location changed: From (from_state) to (to_state).
The problem is that while people are in transit - the ‘state’ is changing periodically and I’m getting many messages saying “User location changed: From (‘not_home’) to (‘not_home’)”
Is there any way I can use a condition to filter out these messages? I basically only want messages generated when a user enters or exits a defined zone.
Or - to take this a little further - is there a service that can be called with latitude/longitude to ‘look up’ a location? It would be cool to have it report an ‘intersection’, restaurant name or store instead of ‘not_home’ when users are not within a defined zone?
Either/Or - suppress the messages where both to_state and from_state are equal to ‘not_home’ - or call a web service to look up the location name and send it when not in a zone…
Do you have any suggestions based on your experience?
Check out the google geocode custom component.
It will can give you all kinds of info based off location.
What does your automation look like and what are you using for location tracking?
Hi @rabittn - thanks for the reply. That Google Geocode Component looks like just the sort of thing I was thinking of…I’ll definitely look into that a little further - thanks for sending the link.
I’m currently using Owntracks for the location tracking. I was also using iCloud for a while - but one of the people I was tracking complained of massive battery drain when it was active. I’d like to re-enable it - but I need to be able to control the frequency of the updates so its more battery-friendly before I can do that. So far - Owntracks seems to be pretty reliable once it’s set up.
I’ve got about 8 zones defined so far - and I’d like to expand it to include all of our common destinations - and I’d like to send one alert/notification per user per entry/exit from any defined zone. For now, I’ve got one automation per user that triggers off of device_tracker..state - I didn’t define any from_state or to_state in the trigger, so as expected - it’s sending notifications whenever the state changes - which I’m realizing may sometimes be small differences in latitude/longitude. What I really want is a notification any time the from_state is not equal to the to_state. Is that something that can be coded fairly easily into my existing automation?
Here’s what I’m currently using:
- alias: LocateAidan
trigger:
platform: state
entity_id: device_tracker.aidan_iphone
action:
service: notify.ios_my_iphone
data_template:
title: Location Alert
message: >
Aidan: {{ now().strftime("%Y%m%d-%H%M%S") }} Location has changed from {{ trigger.from_state.state }} to {{ trigger.to_state.state }}
data:
attachment:
content-type: jpeg
push:
category: camera
entity_id: camera.location_aidan
My other problem with this setup is that the map I’m trying to send as a camera image does not seem to show the correct location all the time. I’m still troubleshooting the problem because the setup is fairly new - but it seems like if I open a notification that is a couple of hours old, the map shows me the persons “current” location - and not the location they were at when the notification was generated (and that’s not what I want). Here’s the camera setup just in case you have any wisdom you might be able to share - although my main problem at the moment is with the automation.
- name: Location Aidan
platform: generic
still_image_url: https://maps.googleapis.com/maps/api/staticmap?center={{ states.device_tracker.aidan_iphone.attributes.latitude }},{{ states.device_tracker.aidan_iphone.attributes.longitude }}&zoom=14&size=400x400&maptype=roadmap&markers=color:blue%7Clabel:A%7C{{ states.device_tracker.aidan_iphone.attributes.latitude }},{{ states.device_tracker.aidan_iphone.attributes.longitude }}
limit_refetch_to_url_change: true
Thank you in advance for any insight or advice you can provide!
can any one share there automation there some used with google geocode custom component. As I Testing and thinking its going to be good to use all the time
This is what I use now, works fine:
alias: Notify when someone enters or leaves a zone
description: ''
trigger:
platform: state
entity_id: person.one, person.two, person.three, person.four
condition:
condition: template
value_template: "{{ trigger.from_state.state != trigger.to_state.state }}"
action:
- service: notify.all_devices
data_template:
title: 'Location update {{ states.sensor.time.state }}'
message: "{{ trigger.to_state.attributes.friendly_name }} {% if trigger.to_state.state == 'not_home' %}has left {{ trigger.from_state.state }}{% endif %}{% if trigger.from_state.state == 'not_home' %}arrived at {{ trigger.to_state.state }}{% endif %}"
I use the android homeassistant app which generates various sensors, including the location etc.
- alias: 'Telegram - Whois it'
trigger:
- platform: event
event_type: telegram_command
event_data:
command: /whois
action:
- service: telegram_bot.send_message
data_template:
message: "{{ states('sensor.redmi_note_8_pro_geocoded_location') }}"
- service: telegram_bot.send_location
data_template:
latitude: '{{states.device_tracker.redmi_note_8_pro.attributes.latitude}}'
longitude: '{{states.device_tracker.redmi_note_8_pro.attributes.longitude}}'
you can customize the trigger as you like
Thanks for sharing this roumen! Works like a charm.
Just had to create a notify group for all_devices.
Is there a way to not notify the person that has the zone change of them zone changing as it adds an extra notification count?
Cheers
If you’re able to implement this without creating different groups I would be interested as well!
Thanks! Works perfect for me. You saved me a lot of time, now I don’t need to create many automations. One automations is enough for all zones and persons
Hi,
Is this sill OK syntax?
I am not able to run this (changed persons and notification devices ofcourse).
Any help would be highly appreciated.
BR,
Gordan
the question is removed. everything works, just writes in debugging that the state has not changed.
Thanks to everyone in this thread!
My HA has many “zones”, walmart, crappy tire, grocery store, ect.
some zones are side-by-side and a person could go from zone to zone with no “not_home” , breaking some of the automation templates above.
I made some modifications to account for this, and added message “tag”, and clearing of previous /out of date location message
trigger:
- platform: state
entity_id:
- person.person_1
condition:
condition: template
value_template: "{{ trigger.from_state.state != trigger.to_state.state }}"
action:
- service: notify.mobile_app_person_2
data:
message: clear_notification
data:
tag: location
- service: notify.mobile_app_person_2
data_template:
title: Location update {{ states.sensor.time.state }}
message: >
{{ trigger.to_state.attributes.friendly_name }}
{% if trigger.to_state.state == 'not_home' %}has left {{trigger.from_state.state }}
{% else %}arrived at {{ trigger.to_state.state }}
{% endif %}
data:
tag: location
results in messages:
TITLE: Location Update 17:25
MESSAGE: Person 1 has arrived at home
{clear previous message}
TITLE: Location Update 17:26
MESSAGE: Person 1 has left home
{clear previous message}
TITLE: Location Update 17:26
MESSAGE: Person 1 has arrived at walmart
{clear previous message}
TITLE: Location Update 17:27
MESSAGE: Person 1 has arrived at lowes
{clear previous message}
TITLE: Location Update 17:28
MESSAGE: Person 1 has left lowes
{clear previous message}
TITLE: Location Update 17:29
MESSAGE: Person 1 has arrived at home
where do i put this code?
automation