
Updated the template condition to use `state_attr` instead of the more error prone long form.
7.2 KiB
layout | title | description | date | sidebar | comments | sharing | footer | redirect_from |
---|---|---|---|---|---|---|---|---|
page | Conditions | Documentation about all available conditions. | 2016-04-24 08:30 +0100 | true | false | true | true | /getting-started/scripts-conditions/ |
Conditions can be used within a script or automation to prevent further execution. A condition will look at the system right now. For example a condition can test if a switch is currently turned on or off.
{% linkable_title AND condition %}
Test multiple conditions in 1 condition statement. Passes if all embedded conditions are valid.
condition:
condition: and
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'
If you do not want to combine AND and OR conditions, you can also just list them sequentially, by default all conditions have to be true. The following configuration works the same as the one listed above:
condition:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'
Currently you need to format your conditions like this to be able to edit them using the automations editor.
{% linkable_title OR condition %}
Test multiple conditions in 1 condition statement. Passes if any embedded condition is valid.
condition:
condition: or
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'
{% linkable_title MIXED AND and OR conditions %}
Test multiple AND and OR conditions in 1 condition statement. Passes if any embedded conditions is valid. This allows you to mix several AND and OR conditions together.
condition:
condition: and
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: or
conditions:
- condition: state
entity_id: sensor.weather_precip
state: 'rain'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'
{% linkable_title Numeric state condition %}
This type of condition attempts to parse the state of specified entity as a number and triggers if the value matches the thresholds.
If both below
and above
are specified, both tests have to pass.
You can optionally use a value_template
to process the value of the state before testing it.
condition:
condition: numeric_state
entity_id: sensor.temperature
above: 17
below: 25
# If your sensor value needs to be adjusted
value_template: {% raw %}{{ float(state.state) + 2 }}{% endraw %}
{% linkable_title State condition %}
Tests if an entity is a specified state.
condition:
condition: state
entity_id: device_tracker.paulus
state: not_home
# optional: trigger only if state was this for last X time.
for:
hours: 1
minutes: 10
seconds: 5
{% linkable_title Sun condition %}
The sun condition can test if the sun has already set or risen when a trigger occurs. The before
and after
keys can only be set to sunset
or sunrise
. They have a corresponding optional offset value (before_offset
, after_offset
) that can be added, similar to the sun trigger.
condition:
condition: sun
after: sunset
# Optional offset value - in this case it must from -1 hours relative to sunset, or after
after_offset: "-01:00:00"
condition:
condition: or # 'when dark' condition: either after sunset or before sunrise
conditions:
- condition: sun
after: sunset
- condition: sun
before: sunrise
Here is a truth table to clarify the parameters with and without offset:
command | night | at sunrise | daytime | at sunset |
---|---|---|---|---|
after: sunset |
True | ⇒ | False | ⇒ |
+ after_offset: "01:00:00" |
True | ⇒ | False | +1h |
+ after_offset: "-01:00:00" |
True | ⇒ | False | -1h |
before: sunset |
False | ⇒ | True | ⇒ |
+ before_offset: "01:00:00" |
False | ⇒ | True | +1h |
+ before_offset: "-01:00:00" |
False | ⇒ | True | -1h |
after: sunrise |
False | ⇒ | True | ⇒ |
+ after_offset: "01:00:00" |
False | +1h | True | ⇒ |
+ after_offset: "-01:00:00" |
False | -1h | True | ⇒ |
before: sunrise |
True | ⇒ | False | ⇒ |
+ before_offset: "01:00:00" |
True | +1h | False | ⇒ |
+ before_offset: "-01:00:00" |
True | -1h | False | ⇒ |
{% linkable_title Template condition %}
The template condition will test if the given template renders a value equal to true. This is achieved by having the template result in a true boolean expression or by having the template render 'true'.
condition:
condition: template
value_template: "{% raw %}{{ state_attr('device_tracker.iphone', 'battery') > 50 }}{% endraw %}"
Within an automation, template conditions also have access to the trigger
variable as described here.
{% linkable_title Time condition %}
The time condition can test if it is after a specified time, before a specified time or if it is a certain day of the week
condition:
condition: time
# At least one of the following is required.
after: '15:00:00'
before: '02:00:00'
weekday:
- mon
- wed
- fri
Valid values for weekday
are mon
, tue
, wed
, thu
, fri
, sat
, sun
.
Time condition windows can span across the midnight threshold. In the example above, the condition window is from 3pm to 2am.
{% linkable_title Zone condition %}
Zone conditions test if an entity is in a certain zone. For zone automation to work, you need to have setup a device tracker platform that supports reporting GPS coordinates. Currently this is limited to the OwnTracks platform and the iCloud platform.
condition:
condition: zone
entity_id: device_tracker.paulus
zone: zone.home
{% linkable_title Examples %}
condition:
- condition: numeric_state
entity_id: sun.sun
value_template: '{{ state.attributes.elevation }}'
below: 1
- condition: state
entity_id: light.living_room
state: 'off'
- condition: time
before: '23:00:00'
after: '14:00:00'
- condition: state
entity_id: script.light_turned_off_5min
state: 'off'