ha-configuration
1
总安装量
1
周安装量
#51006
全站排名
安装命令
npx skills add https://github.com/laurigates/claude-plugins --skill ha-configuration
Agent 安装分布
mcpjam
1
claude-code
1
replit
1
junie
1
windsurf
1
zencoder
1
Skill 文档
Home Assistant Configuration
When to Use This Skill
| Use this skill when… | Use ha-automations instead when… |
|---|---|
| Editing configuration.yaml | Creating automation rules |
| Setting up integrations | Writing automation triggers/actions |
| Managing secrets.yaml | Debugging automation logic |
| Organizing with packages | Working with automation blueprints |
| Troubleshooting config errors | Setting up device triggers |
Core Configuration Files
| File | Purpose |
|---|---|
configuration.yaml |
Main configuration entry point |
secrets.yaml |
Sensitive values (passwords, API keys, tokens) |
automations.yaml |
Automation rules (usually UI-managed) |
scripts.yaml |
Reusable script sequences |
scenes.yaml |
Scene definitions |
customize.yaml |
Entity customizations |
packages/*.yaml |
Modular configuration packages |
Configuration Structure
Basic configuration.yaml
homeassistant:
name: Home
unit_system: metric
time_zone: Europe/Helsinki
currency: EUR
country: FI
# External files
customize: !include customize.yaml
packages: !include_dir_named packages/
# Core integrations
default_config:
# Text-to-speech
tts:
- platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
Secrets Management
secrets.yaml:
# API keys
openweathermap_api_key: "abc123def456"
spotify_client_id: "your_client_id"
spotify_client_secret: "your_client_secret"
# Database
recorder_db_url: "postgresql://user:pass@localhost/hass"
# MQTT
mqtt_username: "homeassistant"
mqtt_password: "secure_password"
# Network
latitude: 60.1699
longitude: 24.9384
Reference in configuration.yaml:
weather:
- platform: openweathermap
api_key: !secret openweathermap_api_key
recorder:
db_url: !secret recorder_db_url
Include Directives
| Directive | Description | Example |
|---|---|---|
!include |
Include single file | !include automations.yaml |
!include_dir_list |
Include files as list items | !include_dir_list sensors/ |
!include_dir_named |
Include files as named mappings | !include_dir_named packages/ |
!include_dir_merge_list |
Merge files into single list | !include_dir_merge_list automations/ |
!include_dir_merge_named |
Merge files into single mapping | !include_dir_merge_named integrations/ |
!secret |
Reference from secrets.yaml | !secret api_key |
!env_var |
Environment variable | !env_var DB_PASSWORD |
Package Organization
Packages allow modular configuration by domain:
packages/climate.yaml:
climate_package:
sensor:
- platform: template
sensors:
average_indoor_temp:
friendly_name: "Average Indoor Temperature"
unit_of_measurement: "°C"
value_template: >-
{{ (states('sensor.living_room_temp') | float +
states('sensor.bedroom_temp') | float) / 2 | round(1) }}
automation:
- alias: "Climate - AC Auto Off"
trigger:
- platform: numeric_state
entity_id: sensor.average_indoor_temp
below: 22
action:
- service: climate.turn_off
target:
entity_id: climate.living_room_ac
script:
climate_cool_down:
alias: "Cool Down House"
sequence:
- service: climate.set_temperature
target:
entity_id: climate.living_room_ac
data:
temperature: 20
hvac_mode: cool
packages/presence.yaml:
presence_package:
input_boolean:
guest_mode:
name: "Guest Mode"
icon: mdi:account-multiple
binary_sensor:
- platform: template
sensors:
anyone_home:
friendly_name: "Anyone Home"
device_class: presence
value_template: >-
{{ is_state('person.user1', 'home') or
is_state('person.user2', 'home') or
is_state('input_boolean.guest_mode', 'on') }}
Common Integration Patterns
MQTT Configuration
mqtt:
broker: !secret mqtt_broker
port: 1883
username: !secret mqtt_username
password: !secret mqtt_password
discovery: true
discovery_prefix: homeassistant
sensor:
- name: "Outdoor Temperature"
state_topic: "sensors/outdoor/temperature"
unit_of_measurement: "°C"
device_class: temperature
value_template: "{{ value_json.temperature }}"
REST Sensors
sensor:
- platform: rest
name: "GitHub Stars"
resource: https://api.github.com/repos/home-assistant/core
value_template: "{{ value_json.stargazers_count }}"
scan_interval: 3600
headers:
Authorization: !secret github_token
Template Sensors
template:
- sensor:
- name: "Sun Elevation"
unit_of_measurement: "°"
state: "{{ state_attr('sun.sun', 'elevation') | round(1) }}"
- name: "Daylight Hours"
unit_of_measurement: "hours"
state: >-
{% set sunrise = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set sunset = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{{ ((sunset - sunrise) / 3600) | round(1) }}
- binary_sensor:
- name: "Workday"
state: "{{ now().weekday() < 5 }}"
Input Helpers
input_boolean:
vacation_mode:
name: "Vacation Mode"
icon: mdi:airplane
input_number:
target_temperature:
name: "Target Temperature"
min: 16
max: 28
step: 0.5
unit_of_measurement: "°C"
icon: mdi:thermometer
input_select:
house_mode:
name: "House Mode"
options:
- Home
- Away
- Sleep
- Guest
icon: mdi:home
input_text:
notification_message:
name: "Custom Notification"
max: 255
input_datetime:
alarm_time:
name: "Alarm Time"
has_date: false
has_time: true
Configuration Validation
Check Configuration
# Docker/Container
docker exec homeassistant hass --script check_config
# Home Assistant OS
ha core check
# Supervised
hassio homeassistant check
# Python venv
hass --script check_config -c /path/to/config
Common Validation Errors
| Error | Cause | Fix |
|---|---|---|
found undefined alias |
Missing !secret value |
Add to secrets.yaml |
could not determine a constructor |
Invalid YAML syntax | Check indentation |
duplicate key |
Same key defined twice | Remove duplicate |
Platform not found |
Missing integration | Install via UI/HACS |
Recorder Configuration
recorder:
db_url: !secret recorder_db_url
purge_keep_days: 10
commit_interval: 1
exclude:
domains:
- automation
- updater
entity_globs:
- sensor.weather_*
entities:
- sun.sun
- sensor.date
include:
domains:
- sensor
- binary_sensor
- switch
Logger Configuration
logger:
default: warning
logs:
homeassistant.core: info
homeassistant.components.mqtt: debug
custom_components.my_integration: debug
# Reduce noise
homeassistant.components.websocket_api: error
Lovelace Dashboard (YAML Mode)
# configuration.yaml
lovelace:
mode: yaml
resources:
- url: /hacsfiles/button-card/button-card.js
type: module
dashboards:
lovelace-home:
mode: yaml
filename: dashboards/home.yaml
title: Home
icon: mdi:home
show_in_sidebar: true
Quick Reference
YAML Tips
| Pattern | Example |
|---|---|
| Multi-line string | value: >- or value: |- |
| List item | - item |
| Inline list | [item1, item2] |
| Comment | # comment |
| Anchor | &anchor_name |
| Reference | *anchor_name |
| Merge | <<: *anchor_name |
Template Syntax
| Function | Example |
|---|---|
| State value | states('sensor.temp') |
| State attribute | state_attr('sun.sun', 'elevation') |
| Convert to float | states('sensor.temp') | float |
| Round | value | round(1) |
| Default value | states('sensor.x') | default('unknown') |
| Timestamp | as_timestamp(now()) |
| Time delta | now() - timedelta(hours=1) |
Agentic Optimizations
| Context | Command |
|---|---|
| Validate config | docker exec homeassistant hass --script check_config 2>&1 | head -50 |
| Find entity usage | grep -r "entity_id:" config/ --include="*.yaml" |
| Find secret refs | grep -r "!secret" config/ --include="*.yaml" |
| List packages | ls -la config/packages/ |
| Check YAML syntax | python3 -c "import yaml; yaml.safe_load(open('file.yaml'))" |