Here’s a workaround until this becomes a supported feature. In short, using customize.yaml
you can associate notify services with each person
entity. Then you can reference those in automations or scripts.
Step 1: Edit your customize.yaml file (see here for details) and list each person and their associated notification services that you’d like to use. For example:
person.john_doe:
notify_services:
- 'notify.mobile_app_johns_iphone'
- 'notify.custom_notify_service_for_john'
person.jane_doe:
notify_services:
- 'notify.mobile_app_janes_android'
Then restart so it takes effect. (There are ways to reload this file without restarting and those methods are discussed in the docs; I won’t cover them here.)
Step 2: Utilize those new attributes in your automations & scripts. Here is an example script that will call every notify service attached to every person who is currently home:
alias: Alert everyone who is home
continue_on_error: true
sequence:
- variables:
notify_services: >
{{ state_attr('zone.home','persons') | map('state_attr','notify_services') | sum(start=[]) | list }}
- repeat:
for_each: "{{ notify_services }}"
sequence:
- service: "{{ repeat.item }}"
data:
message: You are home!
mode: single
I specify continue on error in case a notify service is removed or renamed; this way all the other notifications are still sent. You will still see errors in your logs if that happens though.
Edit: here’s a simpler option if you are OK with restricting yourself to only one notify service per person.
Example of customize:
person.john_doe:
notify_service: notify.mobile_app_johns_iphone
person.jane_doe:
notify_service: notify.mobile_app_janes_android
Example of how to notify everyone who is home:
alias: Alert everyone who is home
continue_on_error: true
sequence:
- variables:
notify_services: >
{{ state_attr('zone.home','persons') | map('state_attr','notify_service') | list }}
- repeat:
for_each: "{{ notify_services }}"
sequence:
- service: "{{ repeat.item }}"
data:
message: You are home!
mode: single
And where it becomes easier is if you only want to notify a single person. Instead of
service: notify.mobile_app_johns_iphone
data:
message: "Hello John!"
You can use this instead:
service: "{{ state_attr('person.john_doe', 'notify_service') }}"
data:
message: "Hello John!"
The benefit is that you never have to maintain your automations or scripts if you decide that you want to be notified by a different method. Or if you change your phone and your notification method changes. It’s a single change to the customize YAML.