ha-automation
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.
What this skill does
# Home Assistant Automation Expert
> Master Home Assistant automations, scripts, blueprints, and Jinja2 templating with confidence.
## Before You Start
This skill prevents common automation mistakes including:
1. **Incorrect trigger syntax** - Using deprecated formats or invalid entity IDs
2. **Missing condition operators** - Forgetting `and`/`or`/`not` conjunctions
3. **Jinja2 template errors** - Undefined variables or incorrect filter usage
4. **Blueprint parameterization issues** - Missing `!input` substitutions or misaligned selectors
## Quick Reference: Automation Structure
### Basic Automation Format
```yaml
automation: !include automations.yaml
```
### Single Automation File
```yaml
- alias: "My Automation"
description: "What this automation does"
trigger: ...
condition: ...
action: ...
mode: single
```
## Triggers Quick Reference
### State Trigger
```yaml
trigger:
platform: state
entity_id: light.bedroom
from: "off"
to: "on"
for:
minutes: 5
```
### Numeric State Trigger
```yaml
trigger:
platform: numeric_state
entity_id: sensor.temperature
above: 25
below: 30
```
### Time Trigger
```yaml
trigger:
platform: time
at: "10:30:00"
```
### Time Pattern Trigger
```yaml
trigger:
platform: time_pattern
hours: "*/2" # Every 2 hours
minutes: 0
```
### Device Trigger
```yaml
trigger:
platform: device
device_id: abc123...
domain: light
type: turned_on
```
### Event Trigger
```yaml
trigger:
platform: event
event_type: call_service
event_data:
domain: light
```
### MQTT Trigger
```yaml
trigger:
platform: mqtt
topic: home/front_door/status
payload: "opened"
```
### Webhook Trigger
```yaml
trigger:
platform: webhook
webhook_id: my_webhook_id
```
### Sun Trigger
```yaml
trigger:
platform: sun
event: sunrise
offset: "-00:30:00" # 30 min before sunrise
```
### Zone Trigger
```yaml
trigger:
platform: zone
entity_id: device_tracker.john
zone: zone.home
event: enter
```
### Template Trigger
```yaml
trigger:
platform: template
value_template: "{{ state_attr('light.bedroom', 'brightness') > 200 }}"
```
## Conditions Quick Reference
### State Condition
```yaml
condition:
- condition: state
entity_id: light.bedroom
state: "on"
```
### Numeric State Condition
```yaml
condition:
- condition: numeric_state
entity_id: sensor.temperature
above: 20
below: 25
```
### Time Condition
```yaml
condition:
- condition: time
after: "08:00:00"
before: "20:00:00"
weekday:
- mon
- tue
- wed
```
### Sun Condition
```yaml
condition:
- condition: sun
after: sunrise
before: sunset
```
### Template Condition
```yaml
condition:
- condition: template
value_template: "{{ states('light.bedroom') == 'on' }}"
```
### Combining Conditions
```yaml
condition:
- condition: and
conditions:
- condition: state
entity_id: light.bedroom
state: "on"
- condition: numeric_state
entity_id: sensor.temperature
above: 20
```
```yaml
condition:
- condition: or
conditions:
- condition: state
entity_id: binary_sensor.motion
state: "on"
- condition: state
entity_id: light.bedroom
state: "on"
```
## Actions Quick Reference
### Call Service Action
```yaml
action:
- service: light.turn_on
target:
entity_id: light.bedroom
data:
brightness: 255
color_temp: 366
```
### Call Service (Multiple Targets)
```yaml
action:
- service: light.turn_on
target:
entity_id:
- light.bedroom
- light.living_room
area_id: downstairs
```
### Choose (If/Then/Else)
```yaml
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"
```
### Repeat (Loop)
```yaml
action:
- repeat:
count: 3
sequence:
- service: light.toggle
target:
entity_id: light.bedroom
- delay:
seconds: 1
```
### Delay
```yaml
action:
- delay:
minutes: 5
```
### Wait for Trigger
```yaml
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
```
### Parallel Actions
```yaml
action:
- parallel:
- service: light.turn_off
target:
entity_id: light.bedroom
- service: switch.turn_off
target:
entity_id: switch.fan
```
## Automation Modes
```yaml
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
```
## Jinja2 Template Cheatsheet
### Common Variables
- `states('entity.id')` - Get entity state
- `state_attr('entity.id', 'attribute')` - Get entity attribute
- `now()` - Current datetime
- `as_timestamp('2024-01-01')` - Convert to timestamp
- `trigger` - Trigger object (if in trigger template)
### Filters
```jinja2
{{ 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
```
### Conditionals
```jinja2
{% if states('light.bedroom') == 'on' %}
Light is on
{% elif states('light.bedroom') == 'off' %}
Light is off
{% else %}
Unknown
{% endif %}
```
### Loops
```jinja2
{% for entity in states.light %}
{{ entity.name }}: {{ entity.state }}
{% endfor %}
```
### Math Operations
```jinja2
{{ 5 + 3 }} # Addition
{{ 10 - 4 }} # Subtraction
{{ 3 * 4 }} # Multiplication
{{ 20 / 4 }} # Division
{{ 17 % 5 }} # Modulo (remainder)
```
### String Operations
```jinja2
{{ "hello " + "world" }} # Concatenation
{{ value is string }} # Type checking
{{ value is number }}
{{ value is defined }} # Check if variable exists
{{ value | default("fallback") }} # Provide default
```
### Debugging Templates
Use Developer Tools > Template in Home Assistant UI to test templates in real-time.
## Blueprint Creation Basics
### Blueprint Structure
```yaml
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
```
### Blueprint Selectors
```yaml
# Entity selector
selector:
entity:
domain: light
# Device selector
selector:
device:
integratioRelated in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.