mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-04-27 14:57:35 +00:00
270 lines
10 KiB
Markdown
270 lines
10 KiB
Markdown
---
|
|
title: "Automation YAML"
|
|
description: "How to use the automation integration with YAML."
|
|
---
|
|
|
|
Automations are created in Home Assistant via the UI, but are stored in a {% term YAML %} format. If you want to edit the {% term YAML %} of an {% term automation %}, select the automation, click on the menu button in the top right then on **Edit in YAML**.
|
|
|
|
The UI will write your automations to `automations.yaml`. This file is managed by the UI and should not be edited manually.
|
|
|
|
It is also possible to write your automations directly inside {% term "`configuration.yaml`" %} or other {% term YAML %} files. You can do this by adding a labeled `automation` block to your `configuration.yaml`:
|
|
|
|
```yaml
|
|
# The configuration required for the UI to work
|
|
automation: !include automations.yaml
|
|
|
|
# Labeled automation block
|
|
automation kitchen:
|
|
- triggers:
|
|
- trigger: ...
|
|
```
|
|
|
|
You can add as many labeled `automation` blocks as you want.
|
|
|
|
{% configuration %}
|
|
alias:
|
|
description: Friendly name for the automation.
|
|
required: false
|
|
type: string
|
|
id:
|
|
description: A unique id for your automation, will allow you to make changes to the name and entity_id in the UI, and will enable debug traces.
|
|
required: false
|
|
type: string
|
|
description:
|
|
description: A description of the automation.
|
|
required: false
|
|
default: ''
|
|
type: string
|
|
initial_state:
|
|
description: Used to define the state of your automation at startup. When not set, the state will be restored from the last run. See [Automation initial state](#automation-initial-state).
|
|
required: false
|
|
type: boolean
|
|
default: Restored from last run
|
|
trace:
|
|
description: "Configuration values for the traces stored, currently only `stored_traces` can be configured."
|
|
required: false
|
|
default: {}
|
|
type: map
|
|
keys:
|
|
stored_traces:
|
|
description: "The number of traces which will be stored. See [Number of debug traces stored](#number-of-debug-traces-stored)."
|
|
type: integer
|
|
default: 5
|
|
required: false
|
|
variables:
|
|
description: "Variables that will be available inside your templates, both in `conditions` and `actions`."
|
|
required: false
|
|
default: {}
|
|
type: map
|
|
keys:
|
|
PARAMETER_NAME:
|
|
description: "The value of the variable. Any YAML is valid. Templates can also be used to pass a value to the variable."
|
|
type: any
|
|
trigger_variables:
|
|
description: "Variables that will be available inside your [templates triggers](/docs/automation/trigger/#template-trigger)."
|
|
required: false
|
|
default: {}
|
|
type: map
|
|
keys:
|
|
PARAMETER_NAME:
|
|
description: "The value of the variable. Any YAML is valid. Only [limited templates](/docs/configuration/templating/#limited-templates) can be used."
|
|
type: any
|
|
mode:
|
|
description: "Controls what happens when the automation is invoked while it is still running from one or more previous invocations. See [Automation modes](#automation-modes)."
|
|
required: false
|
|
type: string
|
|
default: single
|
|
max:
|
|
description: "Controls maximum number of runs executing and/or queued up to run at a time. Only valid with modes `queued` and `parallel`."
|
|
required: false
|
|
type: integer
|
|
default: 10
|
|
max_exceeded:
|
|
description: "When `max` is exceeded (which is effectively 1 for `single` mode) a log message will be emitted to indicate this has happened. This option controls the severity level of that log message. See [Log Levels](/integrations/logger/#log-levels) for a list of valid options. Or `silent` may be specified to suppress the message from being emitted."
|
|
required: false
|
|
type: string
|
|
default: warning
|
|
triggers:
|
|
description: "The trigger(s) which will start the automation. Multiple triggers can be added and the automation will start when any of these triggers trigger."
|
|
required: true
|
|
type: list
|
|
keys:
|
|
id:
|
|
description: "An ID that can be used in the automation to determine which trigger caused the automation to start."
|
|
type: string
|
|
required: false
|
|
variables:
|
|
description: "Variables that will be available in the conditions and action sequence."
|
|
required: false
|
|
default: {}
|
|
type: map
|
|
keys:
|
|
PARAMETER_NAME:
|
|
description: "The value of the variable. Any YAML is valid. Templates can also be used to pass a value to the variable."
|
|
type: any
|
|
conditions:
|
|
description: Conditions that have to be `true` to start the automation. By default all conditions listed have to be `true`, you can use [logical conditions](/docs/scripts/conditions/#logical-conditions) to change this default behavior.
|
|
required: false
|
|
type: list
|
|
actions:
|
|
description: "The sequence of actions to be performed in the script."
|
|
required: true
|
|
type: list
|
|
{% endconfiguration %}
|
|
|
|
### Automation modes
|
|
|
|
| Mode | Description |
|
|
| ---------- | --------------------------------------------------------------------------------------------------------------- |
|
|
| `single` | Do not start a new run. Issue a warning. |
|
|
| `restart` | Start a new run after first stopping previous run. |
|
|
| `queued` | Start a new run after all previous runs complete. Runs are guaranteed to execute in the order they were queued. |
|
|
| `parallel` | Start a new, independent run in parallel with previous runs. |
|
|
|
|
<p class='img'>
|
|
<img src='/images/integrations/script/script_modes.jpg'>
|
|
</p>
|
|
|
|
## YAML example
|
|
|
|
Example of a {% term YAML %} based automation that you can add to {% term "`configuration.yaml`" %}.
|
|
|
|
{% raw %}
|
|
|
|
```yaml
|
|
# Example of entry in configuration.yaml
|
|
automation my_lights:
|
|
# Turns on lights 1 hour before sunset if people are home
|
|
# and if people get home between 16:00-23:00
|
|
- alias: "Rule 1 Light on in the evening"
|
|
triggers:
|
|
# Prefix the first line of each trigger configuration
|
|
# with a '-' to enter multiple
|
|
- trigger: sun
|
|
event: sunset
|
|
offset: "-01:00:00"
|
|
- trigger: state
|
|
entity_id: all
|
|
to: "home"
|
|
conditions:
|
|
# Prefix the first line of each condition configuration
|
|
# with a '-'' to enter multiple
|
|
- condition: state
|
|
entity_id: all
|
|
state: "home"
|
|
- condition: time
|
|
after: "16:00:00"
|
|
before: "23:00:00"
|
|
actions:
|
|
# With a single action entry, we don't need a '-' before action - though you can if you want to
|
|
- action: homeassistant.turn_on
|
|
target:
|
|
entity_id: group.living_room
|
|
|
|
# Turn off lights when everybody leaves the house
|
|
- alias: "Rule 2 - Away Mode"
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: all
|
|
to: "not_home"
|
|
actions:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: all
|
|
|
|
# Notify when Paulus leaves the house in the evening
|
|
- alias: "Leave Home notification"
|
|
triggers:
|
|
- trigger: zone
|
|
event: leave
|
|
zone: zone.home
|
|
entity_id: device_tracker.paulus
|
|
conditions:
|
|
- condition: time
|
|
after: "20:00"
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
message: "Paulus left the house"
|
|
|
|
# Send a notification via Pushover with the event of a Xiaomi cube. Custom event from the Xiaomi integration.
|
|
- alias: "Xiaomi Cube Action"
|
|
initial_state: false
|
|
triggers:
|
|
- trigger: event
|
|
event_type: cube_action
|
|
event_data:
|
|
entity_id: binary_sensor.cube_158d000103a3de
|
|
actions:
|
|
- action: notify.pushover
|
|
data:
|
|
title: "Cube event detected"
|
|
message: "Cube has triggered this event: {{ trigger.event }}"
|
|
```
|
|
|
|
{% endraw %}
|
|
|
|
## Extra options
|
|
|
|
When writing automations directly in {% term YAML %}, you will have access to advanced options that are not available in the user interface.
|
|
|
|
### Automation initial state
|
|
|
|
At startup, automations by default restore their last state of when Home Assistant ran. This can be controlled with the `initial_state` option. Set it to `false` or `true` to force initial state to be off or on.
|
|
|
|
```yaml
|
|
automation:
|
|
- alias: "Automation Name"
|
|
initial_state: false
|
|
triggers:
|
|
- trigger: ...
|
|
```
|
|
|
|
### Number of debug traces stored
|
|
|
|
When using {% term YAML %} you can configure the number of debugging traces stored for an automation. This is controlled with the `stored_traces` option under `trace`. Set `stored_traces` to the number of traces you wish to store for the particular automation. If not specified the default value of 5 will be used.
|
|
|
|
```yaml
|
|
automation:
|
|
- alias: "Automation Name"
|
|
trace:
|
|
stored_traces: 10
|
|
triggers:
|
|
- trigger: ...
|
|
```
|
|
|
|
## Migrating your YAML automations to `automations.yaml`
|
|
|
|
If you want to migrate your manual automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over, you'll have to add an `id`. This can be any string as long as it's unique.
|
|
|
|
{% raw %}
|
|
|
|
```yaml
|
|
# Example automations.yaml entry. Note, automations.yaml is always a list!
|
|
- id: my_unique_id # <-- Required for editor to work, for automations created with the editor the id will be automatically generated.
|
|
alias: "Hello world"
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: sun.sun
|
|
from: below_horizon
|
|
to: above_horizon
|
|
conditions:
|
|
- condition: numeric_state
|
|
entity_id: sensor.temperature
|
|
above: 17
|
|
below: 25
|
|
value_template: "{{ float(state.state) + 2 }}"
|
|
actions:
|
|
- action: light.turn_on
|
|
```
|
|
|
|
{% endraw %}
|
|
|
|
### Deleting automations
|
|
|
|
When automations remain visible in the Home Assistant dashboard, even after having deleted in the {% term YAML %} file, you have to delete them in the UI.
|
|
|
|
To delete them completely, go to UI {% my entities title="**Settings** > **Devices & services** > **Entities**" %} and find the automation in the search field or by scrolling down.
|
|
|
|
Check the square box aside of the automation you wish to delete and from the top-right of your screen, select 'REMOVE SELECTED'.
|