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.
# Example configuration.yaml entries
automation:
trigger:
platform: state
entity_id: device_tracker.paulus
action:
service: notify.notify
data_template:
message: >
Paulus just changed from {{ trigger.from_state.state }}
to {{ trigger.to_state.state }}
automation 2:
trigger:
platform: mqtt
topic: /notify/+
action:
service_template: >
notify.{{ trigger.topic.split('/')[-1] }}
data_template:
message: '{{ trigger.payload }}'
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.
Trigger State Object
Knowing how to access the state object of a trigger entity could be one of the more common questions. Here are a few ways for the state, numeric_state and template triggers:
trigger.from_state will return the previous state object of the entity.
trigger.to_state will return the new state object that triggered trigger.
states[trigger.to_state.domain][trigger.to_state.object_id] will return the current state object of the entity.
Available Trigger Data
The following tables show the available trigger data per platform.
event
| Template variable |
Data |
trigger.platform |
Hardcoded: event. |
trigger.event |
Event object that matched. |
trigger.event.data |
Optional data |
mqtt
| Template variable |
Data |
trigger.platform |
Hardcoded: mqtt. |
trigger.topic |
Topic that received payload. |
trigger.payload |
Payload. |
trigger.payload_json |
Dictonary of the JSON parsed payload. |
trigger.qos |
QOS of payload. |
numeric_state
| Template variable |
Data |
trigger.platform |
Hardcoded: numeric_state |
trigger.entity_id |
Entity ID that we observe. |
trigger.below |
The below threshold, if any. |
trigger.above |
The above threshold, if any. |
trigger.from_state |
The previous state object of the entity. |
trigger.to_state |
The new state object that triggered trigger. |
state
| Template variable |
Data |
trigger.platform |
Hardcoded: state |
trigger.entity_id |
Entity ID that we observe. |
trigger.from_state |
The previous state object of the entity. |
trigger.to_state |
The new state object that triggered trigger. |
trigger.for |
Timedelta object how long state has been to state, if any. |
sun
| Template variable |
Data |
trigger.platform |
Hardcoded: sun |
trigger.event |
The event that just happened: sunset or sunrise. |
trigger.offset |
Timedelta object with offset to the event, if any. |
template
| Template variable |
Data |
trigger.platform |
Hardcoded: template |
trigger.entity_id |
Entity ID that caused change. |
trigger.from_state |
Previous state object of entity that caused change. |
trigger.to_state |
New state object of entity that caused template to change. |
time
| Template variable |
Data |
trigger.platform |
Hardcoded: time |
trigger.now |
DateTime object that triggered the time trigger. |
zone
| Template variable |
Data |
trigger.platform |
Hardcoded: zone |
trigger.entity_id |
Entity ID that we are observing. |
trigger.from_state |
Previous state object of the entity. |
trigger.to_state |
New state object of the entity. |
trigger.zone |
State object of zone |
trigger.event |
Event that trigger observed: enter or leave. |