ha-automations
1
总安装量
1
周安装量
#47618
全站排名
安装命令
npx skills add https://github.com/laurigates/claude-plugins --skill ha-automations
Agent 安装分布
mcpjam
1
claude-code
1
replit
1
junie
1
windsurf
1
zencoder
1
Skill 文档
Home Assistant Automations
When to Use This Skill
| Use this skill when… | Use ha-configuration instead when… |
|---|---|
| Creating automation rules | Editing configuration.yaml |
| Writing triggers/conditions/actions | Setting up integrations |
| Working with scripts and scenes | Managing secrets |
| Using blueprints | Organizing packages |
| Device trigger setup | General YAML configuration |
Automation Structure
automation:
- id: "unique_automation_id"
alias: "Descriptive Name"
description: "What this automation does"
mode: single # single, restart, queued, parallel
trigger:
- platform: state
entity_id: binary_sensor.motion
to: "on"
condition:
- condition: time
after: "08:00:00"
before: "22:00:00"
action:
- service: light.turn_on
target:
entity_id: light.living_room
Trigger Types
State Triggers
trigger:
# Basic state change
- platform: state
entity_id: binary_sensor.door
to: "on"
from: "off"
# With duration
- platform: state
entity_id: binary_sensor.motion
to: "off"
for:
minutes: 5
# Attribute change
- platform: state
entity_id: climate.thermostat
attribute: current_temperature
Numeric State Triggers
trigger:
# Above threshold
- platform: numeric_state
entity_id: sensor.temperature
above: 25
# Below threshold
- platform: numeric_state
entity_id: sensor.battery
below: 20
# Between range
- platform: numeric_state
entity_id: sensor.humidity
above: 30
below: 60
# With duration
- platform: numeric_state
entity_id: sensor.power
above: 1000
for:
minutes: 10
Time Triggers
trigger:
# Specific time
- platform: time
at: "07:00:00"
# Input datetime
- platform: time
at: input_datetime.alarm_time
# Time pattern (every hour)
- platform: time_pattern
hours: "*"
minutes: 0
seconds: 0
# Every 15 minutes
- platform: time_pattern
minutes: "/15"
Sun Triggers
trigger:
# Sunset
- platform: sun
event: sunset
offset: "-00:30:00" # 30 min before
# Sunrise
- platform: sun
event: sunrise
offset: "00:15:00" # 15 min after
# Sun elevation
- platform: numeric_state
entity_id: sun.sun
attribute: elevation
below: -6 # Civil twilight
Device Triggers
trigger:
# Button press
- platform: device
domain: mqtt
device_id: abc123
type: action
subtype: single
# Zigbee button
- platform: device
device_id: def456
domain: zha
type: remote_button_short_press
subtype: button_1
Event Triggers
trigger:
# HA start
- platform: homeassistant
event: start
# Custom event
- platform: event
event_type: custom_event
event_data:
action: button_press
# Tag scanned
- platform: tag
tag_id: my-tag-id
Webhook Triggers
trigger:
- platform: webhook
webhook_id: my_webhook_id
allowed_methods:
- POST
local_only: false
Template Triggers
trigger:
- platform: template
value_template: >-
{{ states('sensor.temp') | float > 25 and
is_state('binary_sensor.window', 'off') }}
for:
minutes: 5
Zone Triggers
trigger:
- platform: zone
entity_id: person.user
zone: zone.home
event: enter # or leave
# Multiple people
- platform: zone
entity_id:
- person.user1
- person.user2
zone: zone.work
event: leave
Condition Types
State Conditions
condition:
# Single entity
- condition: state
entity_id: binary_sensor.door
state: "off"
# Multiple states allowed
- condition: state
entity_id: alarm_control_panel.home
state:
- armed_home
- armed_away
# Check for duration
- condition: state
entity_id: binary_sensor.motion
state: "off"
for:
minutes: 10
Numeric State Conditions
condition:
- condition: numeric_state
entity_id: sensor.temperature
above: 18
below: 25
Time Conditions
condition:
# Time range
- condition: time
after: "08:00:00"
before: "22:00:00"
# Weekdays only
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
# Combined
- condition: time
after: "09:00:00"
before: "17:00:00"
weekday:
- mon
- tue
- wed
- thu
- fri
Sun Conditions
condition:
- condition: sun
after: sunset
after_offset: "-01:00:00"
before: sunrise
before_offset: "00:30:00"
Template Conditions
condition:
- condition: template
value_template: >-
{{ states('sensor.power') | float < 100 and
now().hour >= 6 and now().hour < 23 }}
Zone Conditions
condition:
- condition: zone
entity_id: person.user
zone: zone.home
Logical Conditions
condition:
# AND (default)
- condition: and
conditions:
- condition: state
entity_id: binary_sensor.motion
state: "on"
- condition: numeric_state
entity_id: sensor.lux
below: 50
# OR
- condition: or
conditions:
- condition: state
entity_id: person.user1
state: home
- condition: state
entity_id: person.user2
state: home
# NOT
- condition: not
conditions:
- condition: state
entity_id: input_boolean.guest_mode
state: "on"
Shorthand Conditions
condition:
# Simple state check (shorthand)
- "{{ is_state('binary_sensor.door', 'off') }}"
# Multiple checks
- "{{ is_state('alarm_control_panel.home', 'armed_away') }}"
- "{{ states('sensor.battery') | int > 20 }}"
Action Types
Service Calls
action:
# Basic service call
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 80
color_temp: 350
# Multiple targets
- service: light.turn_off
target:
entity_id:
- light.bedroom
- light.bathroom
area_id: upstairs
# Using device_id
- service: light.toggle
target:
device_id: abc123
Delays and Waits
action:
- service: light.turn_on
target:
entity_id: light.living_room
# Fixed delay
- delay:
seconds: 30
# Template delay
- delay: "{{ states('input_number.delay') | int }}"
# Wait for trigger
- wait_for_trigger:
- platform: state
entity_id: binary_sensor.motion
to: "off"
timeout:
minutes: 5
continue_on_timeout: true
# Wait for template
- wait_template: "{{ is_state('light.bedroom', 'off') }}"
timeout: "00:05:00"
Choose (If/Else)
action:
- choose:
# First condition
- conditions:
- condition: state
entity_id: input_select.mode
state: "Movie"
sequence:
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 20
# Second condition
- conditions:
- condition: state
entity_id: input_select.mode
state: "Party"
sequence:
- service: light.turn_on
target:
entity_id: light.living_room
data:
rgb_color: [255, 0, 0]
# Default (else)
default:
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 100
If/Then/Else (Modern)
action:
- if:
- condition: state
entity_id: binary_sensor.motion
state: "on"
then:
- service: light.turn_on
target:
entity_id: light.hallway
else:
- service: light.turn_off
target:
entity_id: light.hallway
Repeat
action:
# Count-based
- repeat:
count: 3
sequence:
- service: light.toggle
target:
entity_id: light.notification
- delay:
milliseconds: 500
# While loop
- repeat:
while:
- condition: state
entity_id: binary_sensor.motion
state: "on"
sequence:
- service: light.turn_on
target:
entity_id: light.hallway
- delay:
seconds: 30
# For each
- repeat:
for_each:
- light.living_room
- light.bedroom
- light.kitchen
sequence:
- service: light.turn_off
target:
entity_id: "{{ repeat.item }}"
- delay:
seconds: 1
Variables
action:
- variables:
current_brightness: "{{ state_attr('light.living_room', 'brightness') | int }}"
new_brightness: "{{ [current_brightness + 25, 255] | min }}"
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness: "{{ new_brightness }}"
Parallel Execution
action:
- parallel:
- service: light.turn_on
target:
entity_id: light.living_room
- service: media_player.play_media
target:
entity_id: media_player.speaker
data:
media_content_id: "http://example.com/sound.mp3"
media_content_type: music
- service: notify.mobile_app
data:
message: "Welcome home!"
Scripts
script:
morning_routine:
alias: "Morning Routine"
icon: mdi:weather-sunny
mode: single
fields:
brightness:
description: "Light brightness level"
example: 80
selector:
number:
min: 0
max: 100
sequence:
- service: light.turn_on
target:
area_id: bedroom
data:
brightness_pct: "{{ brightness | default(50) }}"
transition: 30
- delay:
minutes: 5
- service: media_player.play_media
target:
entity_id: media_player.bedroom_speaker
data:
media_content_id: "news"
media_content_type: music
flash_lights:
alias: "Flash Lights"
mode: restart
sequence:
- repeat:
count: 5
sequence:
- service: light.toggle
target:
entity_id: "{{ target_light }}"
- delay:
milliseconds: 300
Scenes
scene:
- name: "Movie Night"
icon: mdi:movie
entities:
light.living_room:
state: on
brightness: 50
color_temp: 400
light.ceiling:
state: off
media_player.tv:
state: on
cover.blinds:
state: closed
- name: "Good Morning"
entities:
light.bedroom:
state: on
brightness: 200
color_temp: 300
cover.bedroom_blinds:
state: open
Automation Modes
| Mode | Behavior |
|---|---|
single |
Ignore new triggers while running |
restart |
Stop current run, start new |
queued |
Queue up to max runs |
parallel |
Run up to max in parallel |
automation:
- alias: "Motion Light"
mode: restart
max: 10 # For queued/parallel
max_exceeded: silent # silent, warning, error
Common Patterns
Motion-Activated Light
automation:
- alias: "Motion Light"
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.motion
to: "on"
condition:
- condition: numeric_state
entity_id: sensor.lux
below: 50
action:
- service: light.turn_on
target:
entity_id: light.hallway
- wait_for_trigger:
- platform: state
entity_id: binary_sensor.motion
to: "off"
for:
minutes: 2
- service: light.turn_off
target:
entity_id: light.hallway
Presence-Based Thermostat
automation:
- alias: "Away Mode Thermostat"
trigger:
- platform: state
entity_id: binary_sensor.anyone_home
to: "off"
for:
minutes: 30
action:
- service: climate.set_preset_mode
target:
entity_id: climate.thermostat
data:
preset_mode: away
- alias: "Home Mode Thermostat"
trigger:
- platform: state
entity_id: binary_sensor.anyone_home
to: "on"
action:
- service: climate.set_preset_mode
target:
entity_id: climate.thermostat
data:
preset_mode: home
Notification with Actionable Response
automation:
- alias: "Door Left Open"
trigger:
- platform: state
entity_id: binary_sensor.front_door
to: "on"
for:
minutes: 5
action:
- service: notify.mobile_app_phone
data:
title: "Door Alert"
message: "Front door has been open for 5 minutes"
data:
actions:
- action: "DISMISS"
title: "Dismiss"
- action: "LOCK_DOOR"
title: "Lock Door"
- alias: "Handle Door Notification Response"
trigger:
- platform: event
event_type: mobile_app_notification_action
event_data:
action: "LOCK_DOOR"
action:
- service: lock.lock
target:
entity_id: lock.front_door
Agentic Optimizations
| Context | Command |
|---|---|
| Find automation | grep -r "alias:" config/automations.yaml |
| Find triggers | grep -r "platform: state" config/ --include="*.yaml" |
| List scripts | grep -r "^ [a-z_]*:" config/scripts.yaml |
| Find scenes | grep -r "^ - name:" config/scenes.yaml |
| Check automation IDs | grep -r "^ - id:" config/automations.yaml |