opdich
(Oliver)
July 27, 2021, 6:53am
1
Hi all,
Been at this a few hours now and I can’t figure out what the issue is. I’d like to use a template to define an entity_id
in my service, but no matter what I do I get the error:
Invalid config for [automation]: not a valid value for dictionary value @ data[‘action’][1][‘entity_id’].
Even the simplest templating test does not work:
- alias: '[lights] motion: on'
trigger:
platform: state
entity_id:
- binary_sensor.mechanical_trisensor_home_security_motion_detection
to: 'on'
action:
- service: light.turn_on
entity_id: "{{ 'light.mechanical_light' }}"
Many thanks.
callifo
(Callifo)
July 27, 2021, 6:57am
2
You probably need to provide a little more background on what are you trying to actually do. E.g. why are you trying to template a light entity in the above example?
Are you trying to retrieve an entity_id from inside a variable, or stored inside another entity id?
opdich
(Oliver)
July 27, 2021, 7:04am
3
I’d like to create a single trigger that holds a list of motion sensors that each activate a related light. Something like this:
- alias: '[lights] motion: on'
trigger:
platform: state
entity_id:
- binary_sensor.mechanical_trisensor_home_security_motion_detection
to: 'on'
action:
- service: light.turn_on
entity_id: "light.{{ trigger.entity_id.split('.')[1].split('_')[0] }}_light"
Where I can continue to add sensors to the trigger entity_id
and they will correspond to appropriately named lights.
That said, I would also like to understand why templating isn’t working in this case. I’ve seen examples of templating an entity_id
on these forums.
tom_l
July 27, 2021, 7:19am
4
If your motion sensors and lights have the same object_id this becomes trivial.
entity_ids are composed like this: domain.object_id
and the object_id of the triggering entity can be obtained in a template.
e.g. using the entities:
binary_sensor.lounge_room
light.lounge_room
binary_sensor.main_hall
light.main_hall
- alias: '[lights] motion: on'
trigger:
platform: state
entity_id:
- binary_sensor.lounge_room
- binary_sensor.main_hall
to: 'on'
action:
- service: light.turn_on
target:
entity_id: "light.{{ trigger.to_state.object_id }}"
All you have to do is add more binary sensors to the trigger list.
opdich
(Oliver)
July 27, 2021, 2:12pm
5
Thanks tom_l. I was missing the target:
syntax. That did the trick.
tom_l
July 27, 2021, 2:16pm
6
It’s not strictly necessary. For backward compatibility this will also work:
action:
- service: light.turn_on
data:
entity_id: "light.{{ trigger.to_state.object_id }}"