Advanced automation documentation using templating.
/getting-started/automation-templating/
In Home Assistant 0.19 we introduced a new powerful feature: variables in scripts and automations. This makes it possible to adjust your condition and action based on the information of the trigger.
The trigger data made is available during template rendering as the trigger variable.
{% raw %}
# Example configuration.yaml entriesautomation:trigger:platform:stateentity_id:device_tracker.paulusaction:service:notify.notifydata_template:message:> Paulus just changed from {{ trigger.from_state.state }}
to {{ trigger.to_state.state }}automation 2:trigger:platform:mqtttopic:/notify/+action:service_template:> notify.{{ trigger.topic.split('/')[-1] }}data_template:message:'{{ trigger.payload }}'automation 3:trigger:# Multiple entities for which you want to perform the same action.- platform:stateentity_id:- light.bedroom_closet- light.kiddos_closet- light.linen_closetto:'on'# Trigger when someone leaves one of those lights on for 10 minutes.for:'00:10:00'action:- service:light.turn_offdata_template:# Turn off whichever entity triggered the automation.entity_id:"{{ trigger.entity_id }}"
{% endraw %}
Important Template Rules
There are a few very important rules to remember when writing automation templates:
You must use data_template in place of data when using templates in the data section of a service call.
You must use service_template in place of service when using templates in the service section of a service call.
You must surround single-line templates with double quotes (") or single quotes (').
It is advised that you prepare for undefined variables by using if ... is not none or the default filter, or both.
It is advised that when comparing numbers, you convert the number(s) to a float or an int by using the respective filter.
While the float and int filters do allow a default fallback value if the conversion is unsuccessful, they do not provide the ability to catch undefined variables.
Remembering these simple rules will help save you from many headaches and endless hours of frustration when using automation templates.
It is possible to use data and data_template concurrently but be aware that data_template will overwrite attributes that are provided in both.
Trigger State Object
Knowing how to access the state object of a trigger entity can be useful in automations. Here are a few ways to access the state, numeric_state and template triggers:
trigger.from_state will return the previousstate object of the entity.
trigger.to_state will return the newstate object that triggered trigger.
states[trigger.to_state.domain][trigger.to_state.object_id] will return the currentstate object of the entity.
Be aware that if you reference a trigger state object in an automation action, attempting to test that automation by calling the automation.trigger service or by clicking EXECUTE in the More Info box for the automation will not work. This is because the trigger state object doesn't exist in those contexts. One way to test automations like these is to manually change the state of the trigger entity at Developer Tools > States.
Available Trigger Data
The following tables show the available trigger data per platform.