Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
laurigates avatar

Ha Configuration

  • 63 installs
  • 49 repo stars
  • Updated August 4, 2026
  • laurigates/claude-plugins

Helps with ai & agent building tasks.

About

ha-configuration is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.

  • ha-configuration
  • AI & Agent Building
  • AI-coding skill

Ha Configuration by the numbers

  • 63 all-time installs (skills.sh)
  • +1 installs in the week ending Aug 2, 2026 (Skillselion tracking)
  • Ranked #6,243 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/laurigates/claude-plugins --skill ha-configuration

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs63
repo stars49
Last updatedAugust 4, 2026
Repositorylaurigates/claude-plugins

What it does

Helps with ai & agent building tasks.

Files

SKILL.mdMarkdownGitHub ↗

Home Assistant Configuration

When to Use This Skill

Use this skill when...Use ha-automations instead when...
Editing configuration.yamlCreating automation rules
Setting up integrationsWriting automation triggers/actions
Managing secrets.yamlDebugging automation logic
Organizing with packagesWorking with automation blueprints
Troubleshooting config errorsSetting up device triggers

Core Configuration Files

FilePurpose
configuration.yamlMain configuration entry point
secrets.yamlSensitive values (passwords, API keys, tokens)
automations.yamlAutomation rules (usually UI-managed)
scripts.yamlReusable script sequences
scenes.yamlScene definitions
customize.yamlEntity customizations
packages/*.yamlModular 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

DirectiveDescriptionExample
!includeInclude single file!include automations.yaml
!include_dir_listInclude files as list items!include_dir_list sensors/
!include_dir_namedInclude files as named mappings!include_dir_named packages/
!include_dir_merge_listMerge files into single list!include_dir_merge_list automations/
!include_dir_merge_namedMerge files into single mapping!include_dir_merge_named integrations/
!secretReference from secrets.yaml!secret api_key
!env_varEnvironment 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

ErrorCauseFix
found undefined aliasMissing !secret valueAdd to secrets.yaml
could not determine a constructorInvalid YAML syntaxCheck indentation
duplicate keySame key defined twiceRemove duplicate
Platform not foundMissing integrationInstall 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

PatternExample
Multi-line stringvalue: >- or `value: \
List item- item
Inline list[item1, item2]
Comment# comment
Anchor&anchor_name
Reference*anchor_name
Merge<<: *anchor_name

Template Syntax

FunctionExample
State valuestates('sensor.temp')
State attributestate_attr('sun.sun', 'elevation')
Convert to float`states('sensor.temp') \
Round`value \
Default value`states('sensor.x') \
Timestampas_timestamp(now())
Time deltanow() - timedelta(hours=1)

Agentic Optimizations

ContextCommand
Validate config`docker exec homeassistant hass --script check_config 2>&1 \
Find entity usagegrep -r "entity_id:" config/ --include="*.yaml"
Find secret refsgrep -r "!secret" config/ --include="*.yaml"
List packagesls -la config/packages/
Check YAML syntaxpython3 -c "import yaml; yaml.safe_load(open('file.yaml'))"

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.