Triggers and conditions and actions! Oh My!
Automations in Home Assistant can seem a little daunting at first. You look at the documents, and it can seem overwhelming.
It’s not that bad, honest. It can be summarised like this:
- Trigger - the things that cause an automation to be started
- Condition - an optional list of things that must be true for the actions to run
- Action - what to do
You need at least one trigger, and you can have many if you need them. Once any of them becomes true, then the automation will run. These always use an or logic - this or that or that or…
trigger: - platform: state entity_id: sensor.dice_d20_green state: 1 - platform: state entity_id: sensor.dice_d20_blue state: 1
Here the automation will run if either our green or blue D20 dice rolls a one.
Here’s where we can optionally perform a number of checks before we run those actions. Maybe you only care if that green dice rolls a one during the day, and the blue one at night, or it’s Sunday. Conditions are all and by default - they all have to be true, but as we’ll show here, you can use both and and or logic as you need.
condition: - condition: or conditions: # Sunday - condition: time weekday: - sun - condition: and conditions: # Green D20 rolled one at night - condition: state entity_id: sensor.dice_d20_green state: 1 - condition: numeric_state entity_id: sun.sun attribute: elevation below: 0 - condition: and conditions: # Blue D20 rolled one during the day - condition: state entity_id: sensor.dice_d20_blue state: 1 - condition: numeric_state entity_id: sun.sun attribute: elevation above: -0.1
Finally, we’re at the “go do” part. These are scripts, just embedded in your automation. There are four different things you can do here, and the actions are processed in the order you write them.
You can pause before the actions run, or between actions, using a delay. This can be fixed for every run of the automation, or you can use templates to give you some flexibility.
Sometimes you want a pause, while you wait for something to happen. This is useful if you want an automation to run when a particular series of events happen, like maybe the front door to open, then the hall door to open within the next few minutes.
Check a condition
Sometimes you always want to do some of the actions, but only do the rest some of the time. If the condition is true, then the automation will continue. If it isn’t, then the automation stops here.
Mostly you’ll be calling a service, to do something like turn on a light, or a switch, or send a notification, and so on. You can also fire events and do other things.
We’ll continue our dice rolling example:
action: # Turn the lights red - service: light.turn_on data: entity_id: light.game_room color_name: "red" # Take a deep breath - delay: '00:00:05' # Did the character not die? - condition: state entity_id: sensor.character_health state: 'alive' # We're alive! Turn it white again - service: light.turn_on data: entity_id: light.game_room color_name: "white"