Create and debug Home Assistant automations, scripts, blueprints, and Jinja2 templates. Use when working with triggers, conditions, actions, automation YAML, scripts, blueprints, or template expressions. Activates on keywords: automation, trigger, condition, action, blueprint, script, template, jinja2.
From cce-homeassistantnpx claudepluginhub nodnarbnitram/claude-code-extensions --plugin cce-homeassistantThis skill uses the workspace's default tool permissions.
README.mdDesigns and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Implements structured self-debugging workflow for AI agent failures: capture errors, diagnose patterns like loops or context overflow, apply contained recoveries, and generate introspection reports.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Master Home Assistant automations, scripts, blueprints, and Jinja2 templating with confidence.
This skill prevents common automation mistakes including:
and/or/not conjunctions!input substitutions or misaligned selectorsautomation: !include automations.yaml
- alias: "My Automation"
description: "What this automation does"
trigger: ...
condition: ...
action: ...
mode: single
trigger:
platform: state
entity_id: light.bedroom
from: "off"
to: "on"
for:
minutes: 5
trigger:
platform: numeric_state
entity_id: sensor.temperature
above: 25
below: 30
trigger:
platform: time
at: "10:30:00"
trigger:
platform: time_pattern
hours: "*/2" # Every 2 hours
minutes: 0
trigger:
platform: device
device_id: abc123...
domain: light
type: turned_on
trigger:
platform: event
event_type: call_service
event_data:
domain: light
trigger:
platform: mqtt
topic: home/front_door/status
payload: "opened"
trigger:
platform: webhook
webhook_id: my_webhook_id
trigger:
platform: sun
event: sunrise
offset: "-00:30:00" # 30 min before sunrise
trigger:
platform: zone
entity_id: device_tracker.john
zone: zone.home
event: enter
trigger:
platform: template
value_template: "{{ state_attr('light.bedroom', 'brightness') > 200 }}"
condition:
- condition: state
entity_id: light.bedroom
state: "on"
condition:
- condition: numeric_state
entity_id: sensor.temperature
above: 20
below: 25
condition:
- condition: time
after: "08:00:00"
before: "20:00:00"
weekday:
- mon
- tue
- wed
condition:
- condition: sun
after: sunrise
before: sunset
condition:
- condition: template
value_template: "{{ states('light.bedroom') == 'on' }}"
condition:
- condition: and
conditions:
- condition: state
entity_id: light.bedroom
state: "on"
- condition: numeric_state
entity_id: sensor.temperature
above: 20
condition:
- condition: or
conditions:
- condition: state
entity_id: binary_sensor.motion
state: "on"
- condition: state
entity_id: light.bedroom
state: "on"
action:
- service: light.turn_on
target:
entity_id: light.bedroom
data:
brightness: 255
color_temp: 366
action:
- service: light.turn_on
target:
entity_id:
- light.bedroom
- light.living_room
area_id: downstairs
action:
- choose:
- conditions:
- condition: state
entity_id: light.bedroom
state: "on"
sequence:
- service: light.turn_off
target:
entity_id: light.bedroom
- conditions:
- condition: state
entity_id: light.bedroom
state: "off"
sequence:
- service: light.turn_on
target:
entity_id: light.bedroom
default:
- service: notification.send
data:
message: "Unable to determine light state"
action:
- repeat:
count: 3
sequence:
- service: light.toggle
target:
entity_id: light.bedroom
- delay:
seconds: 1
action:
- delay:
minutes: 5
action:
- wait_for_trigger:
platform: state
entity_id: binary_sensor.motion
to: "off"
timeout:
minutes: 30
- service: light.turn_off
target:
entity_id: light.bedroom
action:
- parallel:
- service: light.turn_off
target:
entity_id: light.bedroom
- service: switch.turn_off
target:
entity_id: switch.fan
mode: single # Default - cancel previous run
mode: restart # Restart on retrigger
mode: queued # Queue up to 10 retriggered runs
mode: parallel # Allow multiple simultaneous runs
mode: queued # with max: 10 # Limit queued runs
states('entity.id') - Get entity statestate_attr('entity.id', 'attribute') - Get entity attributenow() - Current datetimeas_timestamp('2024-01-01') - Convert to timestamptrigger - Trigger object (if in trigger template){{ value | float(0) }} # Convert to float with default
{{ value | int(0) }} # Convert to int with default
{{ value | round(2) }} # Round to 2 decimal places
{{ value | timestamp_custom("%Y-%m-%d") }} # Format timestamp
{{ value | replace("old", "new") }} # Replace string
{{ value | lower }} # Lowercase
{{ value | upper }} # Uppercase
{{ value | length }} # Get length
{{ list | list }} # Convert to list
{% if states('light.bedroom') == 'on' %}
Light is on
{% elif states('light.bedroom') == 'off' %}
Light is off
{% else %}
Unknown
{% endif %}
{% for entity in states.light %}
{{ entity.name }}: {{ entity.state }}
{% endfor %}
{{ 5 + 3 }} # Addition
{{ 10 - 4 }} # Subtraction
{{ 3 * 4 }} # Multiplication
{{ 20 / 4 }} # Division
{{ 17 % 5 }} # Modulo (remainder)
{{ "hello " + "world" }} # Concatenation
{{ value is string }} # Type checking
{{ value is number }}
{{ value is defined }} # Check if variable exists
{{ value | default("fallback") }} # Provide default
Use Developer Tools > Template in Home Assistant UI to test templates in real-time.
blueprint:
name: "Friendly Name"
description: "What this blueprint does"
domain: automation
source_url: "https://github.com/user/repo/path/to/blueprint.yaml"
input:
my_light:
name: "Light to control"
description: "The light entity to control"
selector:
entity:
domain: light
brightness_level:
name: "Brightness"
description: "Brightness percentage (0-100)"
selector:
number:
min: 0
max: 100
unit_of_measurement: "%"
duration:
name: "Duration"
description: "How long to stay on"
selector:
number:
min: 1
max: 60
unit_of_measurement: "minutes"
my_bool:
name: "Enable feature"
selector:
boolean:
trigger: ...
condition: ...
action:
- service: light.turn_on
target:
entity_id: !input my_light
data:
brightness: !input brightness_level
# Entity selector
selector:
entity:
domain: light
# Device selector
selector:
device:
integration: zwave
manufacturer: Philips
# Area selector
selector:
area:
# Number selector
selector:
number:
min: 0
max: 100
step: 5
unit_of_measurement: "%"
# Text selector
selector:
text:
multiline: true
# Boolean selector
selector:
boolean:
# Select (dropdown)
selector:
select:
options:
- label: "Option 1"
value: "value1"
- label: "Option 2"
value: "value2"
trigger:
- platform: state
entity_id: light.bedroom
trigger:
- platform: state
entity_id: light.bedroom
to: "on"
trigger:
- platform: state
entity_id: light.bedroom
to: "on"
condition:
- condition: state
entity_id: light.bedroom
to: "on" # Redundant!
trigger:
- platform: state
entity_id: light.bedroom
condition:
- condition: numeric_state
entity_id: sensor.temperature
above: 20 # Additional check
action:
- service: light.turn_on
data:
brightness: 255
action:
- service: light.turn_on
target:
entity_id: light.bedroom
data:
brightness: 255
!include to split large fileshomeassistant.entity_ids| default("value") filter for optional attributes!input variable_name syntax (YAML 1.2 tag)config/blueprints/automation/| default()value | filter_name(arg)