Conditions
Conditions can be used within a scriptScripts are components that allow users to specify a sequence of actions to be executed by Home Assistant when turned on. [Learn more] or automationAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] to prevent further execution. When a condition evaluates true, the script or automation will be executed. If any other value is returned, the script or automation stops executing. A condition will look at the system at that moment. For example, a condition can test if a switch is currently turned on or off.
Unlike a triggerA trigger is a set of values or conditions of a platform that are defined to cause an automation to run. [Learn more], which is always or
, conditions are and
by default - all conditions have to be true.
All conditions support an optional alias
.
- Logical conditions
- Numeric state condition
- State condition
- Template condition
- Time condition
- Trigger condition
- Zone condition
- Examples
- Disabling a condition
Logical conditions
AND condition
Test multiple conditions in one condition statement. Passes if all embedded conditions are true.
If you do not want to combine AND and OR conditions, you can list them sequentially.
The following configuration works the same as the one listed above:
Currently you need to format your conditions like this to be able to edit them using the automations editor.
The AND condition also has a shorthand form. The following configuration works the same as the ones listed above:
OR condition
Test multiple conditions in one condition statement. Passes if any embedded condition is true.
The OR condition also has a shorthand form. The following configuration works the same as the one listed above:
Mixed AND and OR conditions
Test multiple AND and OR conditions in one condition statement. Passes if any embedded condition is true. This allows you to mix several AND and OR conditions together.
Or in shorthand form:
NOT condition
Test multiple conditions in one condition statement. Passes if all embedded conditions are not true.
The NOT condition also has a shorthand form. The following configuration works the same as the one listed above:
Numeric state condition
This type of condition attempts to parse the state of the specified entity or the attribute of an entity as a number, and triggers if the value matches the thresholds (strictly below/above, so equal excluded).
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.
It is also possible to test the condition against multiple entities at once. The condition will pass if all entities match the thresholds.
Alternatively, the condition can test against a state attribute. The condition will pass if the attribute value of the entity matches the thresholds.
Number helpers (input_number
entities), number
, sensor
, and zone
entities
that contain a numeric value, can be used in the above
and below
options to make the condition more dynamic.
State condition
Tests if an entity has a specified state.
It is also possible to test the condition against multiple entities at once. The condition will pass if all entities match the state.
Instead of matching all, it is also possible if one of the entities matches. In the following example the condition will pass if any entity matches the state.
Testing if an entity is matching a set of possible conditions; The condition will pass if the entity matches one of the states given.
Or, combine multiple entities with multiple states. In the following example, both media players need to be either paused or playing for the condition to pass.
Alternatively, the condition can test against a state attribute. The condition will pass if the attribute matches the given state.
Finally, the state
option accepts helper entities (also known as input_*
entities). The condition will pass if the state of the entity matches the state
of the given helper entity.
You can also use templates in the for
option.
The for
template(s) will be evaluated when the condition is tested.
Sun condition
Sun state condition
The sun state can be used to test if the sun has set or risen.
Sun elevation condition
The sun elevation can be used to test if the sun has set or risen, it is dusk, it is night, etc. when a trigger occurs. For an in-depth explanation of sun elevation, see sun elevation trigger.
Sunset/sunrise condition
The sun condition can also 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.
Note that if only before
key is used, the condition will be true from midnight until sunrise/sunset. If only after
key is used, the condition will be true from sunset/sunrise until midnight. If both before: sunrise
and after: sunset
keys are used, the condition will be true from midnight until sunrise and from sunset until midnight. If both after: sunrise
and before: sunset
keys are used, the condition will be true from sunrise until sunset.
The sunset/sunrise conditions do not work in locations inside the polar circles, and also not in locations with a highly skewed local time zone. In those cases it is advised to use conditions evaluating the solar elevation instead of the before/after sunset/sunrise conditions.
This is an example of 1 hour offset before sunset:
This is ‘when dark’ - equivalent to a state condition on sun.sun
of below_horizon
:
This is ‘when light’ - equivalent to a state condition on sun.sun
of above_horizon
:
A visual timeline is provided below, showing an example of when these conditions are true. In this chart, sunrise is at 6:00, and sunset is at 18:00 (6:00 PM). The green areas of the chart indicate when the specified conditions are true.
Template condition
The template condition tests 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
.
Within an automation, template conditions also have access to the trigger
variable as described here.
Template condition shorthand notation
The template condition has a shorthand notation that can be used to make your scripts and automations shorter.
For example:
Or in a list of conditions, allowing to use existing conditions as described in this chapter and one or more shorthand template conditions
This shorthand notation can be used everywhere in Home Assistant where
conditions are accepted. For example, in and
, or
and not
conditions:
It’s also supported in the repeat
action’s while
or until
option, or in a choose
action’s conditions
option:
It’s also supported in script or automation condition
actions:
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.
Valid values for weekday
are mon
, tue
, wed
, thu
, fri
, sat
, sun
.
Note that if only before
key is used, the condition will be true
from midnight until the specified time.
If only after
key is used, the condition will be true
from the specified time until midnight.
Time condition windows can span across the midnight threshold if both after
and before
keys are used. In the example above, the condition window is from 3pm to 2am.
For the after
and before
options a time helper (input_datetime
entity)
or another sensor
entity containing a timestamp with the “timestamp” device
class, can be used instead.
Note that the time condition only takes the time into account. If a referenced sensor or helper entity contains a timestamp with a date, the date part is fully ignored.
Trigger condition
The trigger condition can test if an automation was triggered by a certain trigger, identified by the trigger’s id
.
For a trigger identified by its index, both a string and integer is allowed:
It is possible to give a list of triggers:
Zone condition
Zone conditions test if an entity is in a certain zone. For zone automation to work, you need to have set up a device tracker platform that supports reporting GPS coordinates.
It is also possible to test the condition against multiple entities at once. The condition will pass if all entities are in the specified zone.
Testing if an entity is matching a set of possible zones; The condition will pass if the entity is in one of the zones.
Or, combine multiple entities with multiple zones. In the following example, both entities need to be either in the home or the work zone for the condition to pass.
Examples
Disabling a condition
Every individual condition can be disabled, without removing it.
To do so, add enabled: false
to the condition configuration.
This can be useful if you want to temporarily disable a condition, for example, for testing. A disabled condition will behave as if it were removed.
For example:
Conditions can also be disabled based on limited templates or blueprint inputs.