ha-configuration

Home Assistant Configuration

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "ha-configuration" with this command: npx skills add laurigates/claude-plugins/laurigates-claude-plugins-ha-configuration

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:

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'))"

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

ruff linting

No summary provided by upstream source.

Repository SourceNeeds Review
General

imagemagick-conversion

No summary provided by upstream source.

Repository SourceNeeds Review
General

jq json processing

No summary provided by upstream source.

Repository SourceNeeds Review
General

api-testing

No summary provided by upstream source.

Repository SourceNeeds Review