ha-configuration

📁 laurigates/claude-plugins 📅 4 days ago
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'))"