- Add complete homeassistant skill source to skills/ directory - Includes all scripts, references, and automation templates - Matches format of other skills in repository
390 lines
7.2 KiB
Markdown
390 lines
7.2 KiB
Markdown
# Home Assistant Automation Reference
|
|
|
|
## Complete Automation Structure
|
|
|
|
```yaml
|
|
automation:
|
|
- alias: "Friendly Name for Display"
|
|
id: unique_identifier_123
|
|
description: "Optional description of what this automation does"
|
|
initial_state: true
|
|
mode: single
|
|
|
|
variables:
|
|
my_variable: "some_value"
|
|
|
|
trigger:
|
|
- trigger: state
|
|
entity_id: binary_sensor.motion_sensor
|
|
to: "on"
|
|
|
|
condition:
|
|
- condition: time
|
|
after: "sunset"
|
|
before: "sunrise"
|
|
|
|
action:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.living_room
|
|
data:
|
|
brightness: 255
|
|
```
|
|
|
|
## Required and Optional Fields
|
|
|
|
### Required
|
|
- `trigger` - At least one trigger that initiates the automation
|
|
|
|
### Optional (Recommended)
|
|
- `alias` - Friendly name displayed in UI
|
|
- `id` - Unique identifier (essential for UI editor)
|
|
- `description` - Documentation of automation purpose
|
|
- `action` - Actions to execute (automation does nothing without actions)
|
|
|
|
### Optional (Advanced)
|
|
- `condition` - Conditions that must be true to execute actions
|
|
- `mode` - Execution behavior: `single`, `restart`, `queued`, `parallel`
|
|
- `max` - Maximum concurrent executions (for `queued`/`parallel` modes)
|
|
- `variables` - Variables available throughout automation
|
|
- `initial_state` - Whether enabled at startup (`true`/`false`)
|
|
- `trace` - Debug trace configuration
|
|
|
|
## Triggers
|
|
|
|
Triggers define when an automation runs.
|
|
|
|
### State Trigger
|
|
|
|
Fires when entity changes state:
|
|
|
|
```yaml
|
|
trigger:
|
|
- trigger: state
|
|
entity_id: binary_sensor.motion_detector
|
|
from: "off"
|
|
to: "on"
|
|
for:
|
|
seconds: 5 # Optional: state must persist for duration
|
|
```
|
|
|
|
### Time Trigger
|
|
|
|
Fires at specific time:
|
|
|
|
```yaml
|
|
trigger:
|
|
- trigger: time
|
|
at: "15:30:00"
|
|
```
|
|
|
|
### Sun Trigger
|
|
|
|
Fires at sunrise/sunset:
|
|
|
|
```yaml
|
|
trigger:
|
|
- trigger: sun
|
|
event: sunset
|
|
offset: "-00:30:00" # 30 minutes before sunset
|
|
```
|
|
|
|
### Numeric State Trigger
|
|
|
|
Fires when sensor value crosses threshold:
|
|
|
|
```yaml
|
|
trigger:
|
|
- trigger: numeric_state
|
|
entity_id: sensor.temperature
|
|
above: 25
|
|
below: 30
|
|
```
|
|
|
|
### Template Trigger
|
|
|
|
Fires when template evaluates to true:
|
|
|
|
```yaml
|
|
trigger:
|
|
- trigger: template
|
|
value_template: "{{ states('sensor.temperature') | float > 25 }}"
|
|
```
|
|
|
|
### Event Trigger
|
|
|
|
Fires on specific event:
|
|
|
|
```yaml
|
|
trigger:
|
|
- trigger: event
|
|
event_type: custom_event
|
|
event_data:
|
|
action: button_pressed
|
|
```
|
|
|
|
### Zone Trigger
|
|
|
|
Fires when device enters/leaves zone:
|
|
|
|
```yaml
|
|
trigger:
|
|
- trigger: zone
|
|
entity_id: person.john
|
|
zone: zone.home
|
|
event: enter # or 'leave'
|
|
```
|
|
|
|
### Multiple Triggers (OR Logic)
|
|
|
|
List multiple triggers - any one firing will run the automation:
|
|
|
|
```yaml
|
|
trigger:
|
|
- trigger: state
|
|
entity_id: binary_sensor.motion_1
|
|
to: "on"
|
|
- trigger: state
|
|
entity_id: binary_sensor.motion_2
|
|
to: "on"
|
|
- trigger: time
|
|
at: "18:00:00"
|
|
```
|
|
|
|
## Conditions
|
|
|
|
Conditions must be true for actions to execute.
|
|
|
|
### State Condition
|
|
|
|
```yaml
|
|
condition:
|
|
- condition: state
|
|
entity_id: light.living_room
|
|
state: "off"
|
|
```
|
|
|
|
### Numeric State Condition
|
|
|
|
```yaml
|
|
condition:
|
|
- condition: numeric_state
|
|
entity_id: sensor.temperature
|
|
below: 20
|
|
```
|
|
|
|
### Time Condition
|
|
|
|
```yaml
|
|
condition:
|
|
- condition: time
|
|
after: "16:00:00"
|
|
before: "23:00:00"
|
|
weekday:
|
|
- mon
|
|
- tue
|
|
- wed
|
|
- thu
|
|
- fri
|
|
```
|
|
|
|
### Sun Condition
|
|
|
|
```yaml
|
|
condition:
|
|
- condition: sun
|
|
after: sunset
|
|
before: sunrise
|
|
```
|
|
|
|
### Template Condition
|
|
|
|
```yaml
|
|
condition:
|
|
- condition: template
|
|
value_template: "{{ states('sensor.battery') | int > 20 }}"
|
|
```
|
|
|
|
### Zone Condition
|
|
|
|
```yaml
|
|
condition:
|
|
- condition: zone
|
|
entity_id: person.john
|
|
zone: zone.home
|
|
```
|
|
|
|
### Multiple Conditions (AND Logic)
|
|
|
|
All conditions must be true:
|
|
|
|
```yaml
|
|
condition:
|
|
- condition: state
|
|
entity_id: person.john
|
|
state: "home"
|
|
- condition: time
|
|
after: "sunset"
|
|
```
|
|
|
|
### OR Conditions
|
|
|
|
```yaml
|
|
condition:
|
|
- condition: or
|
|
conditions:
|
|
- condition: state
|
|
entity_id: person.john
|
|
state: "home"
|
|
- condition: state
|
|
entity_id: person.mary
|
|
state: "home"
|
|
```
|
|
|
|
## Actions
|
|
|
|
Actions define what the automation does.
|
|
|
|
### Call Service
|
|
|
|
```yaml
|
|
action:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.kitchen
|
|
data:
|
|
brightness: 200
|
|
color_temp: 400
|
|
```
|
|
|
|
### Multiple Entities
|
|
|
|
```yaml
|
|
action:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id:
|
|
- light.kitchen
|
|
- light.living_room
|
|
- light.bedroom
|
|
```
|
|
|
|
### Delay
|
|
|
|
```yaml
|
|
action:
|
|
- delay:
|
|
seconds: 30
|
|
```
|
|
|
|
### Wait for Trigger
|
|
|
|
```yaml
|
|
action:
|
|
- wait_for_trigger:
|
|
- trigger: state
|
|
entity_id: binary_sensor.motion
|
|
to: "off"
|
|
timeout:
|
|
minutes: 5
|
|
```
|
|
|
|
### Conditional Action
|
|
|
|
```yaml
|
|
action:
|
|
- condition: state
|
|
entity_id: sun.sun
|
|
state: "below_horizon"
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.porch
|
|
```
|
|
|
|
### Choose (If-Then-Else)
|
|
|
|
```yaml
|
|
action:
|
|
- choose:
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: sensor.weather
|
|
state: "sunny"
|
|
sequence:
|
|
- action: cover.open_cover
|
|
target:
|
|
entity_id: cover.blinds
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: sensor.weather
|
|
state: "rainy"
|
|
sequence:
|
|
- action: cover.close_cover
|
|
target:
|
|
entity_id: cover.blinds
|
|
default:
|
|
- action: notify.notify
|
|
data:
|
|
message: "Weather is {{ states('sensor.weather') }}"
|
|
```
|
|
|
|
### Repeat
|
|
|
|
```yaml
|
|
action:
|
|
- repeat:
|
|
count: 3
|
|
sequence:
|
|
- action: light.toggle
|
|
target:
|
|
entity_id: light.hallway
|
|
- delay:
|
|
seconds: 1
|
|
```
|
|
|
|
## Templates
|
|
|
|
Use Jinja2 templates for dynamic values:
|
|
|
|
```yaml
|
|
action:
|
|
- action: notify.notify
|
|
data:
|
|
message: "Temperature is {{ states('sensor.temperature') }}°C"
|
|
title: "Weather at {{ now().strftime('%H:%M') }}"
|
|
```
|
|
|
|
### Common Template Functions
|
|
|
|
- `{{ states('entity_id') }}` - Get entity state
|
|
- `{{ state_attr('entity_id', 'attribute') }}` - Get entity attribute
|
|
- `{{ now() }}` - Current datetime
|
|
- `{{ trigger.entity_id }}` - Triggering entity ID
|
|
- `{{ trigger.to_state.state }}` - New state value
|
|
- `{{ trigger.from_state.state }}` - Old state value
|
|
|
|
## Execution Modes
|
|
|
|
- `single` (default) - Only one instance runs at a time. New triggers ignored while running.
|
|
- `restart` - Restart automation from beginning when triggered while running.
|
|
- `queued` - Queue additional triggers, run them sequentially.
|
|
- `parallel` - Allow multiple instances to run simultaneously.
|
|
|
|
```yaml
|
|
mode: parallel
|
|
max: 5 # Maximum 5 concurrent executions
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. Always include `id` field for UI editor compatibility
|
|
2. Use meaningful `alias` names for easy identification
|
|
3. Add `description` to document complex automations
|
|
4. Prefer specific triggers over broad templates when possible
|
|
5. Use conditions to prevent unnecessary actions
|
|
6. Test automations with trace mode enabled
|
|
7. Keep automation logic simple - split complex logic into multiple automations or scripts
|
|
8. Quote state values: `state: "on"` not `state: on`
|
|
9. Use 2-space indentation, no tabs
|
|
10. Validate YAML before deploying
|