Help us improve
Share bugs, ideas, or general feedback.
References Home Assistant entity structure, common domains, IDs, device classes, customizations, template entities, groups, and naming conventions.
npx claudepluginhub laurigates/claude-plugins --plugin home-assistant-pluginHow this skill is triggered — by the user, by Claude, or both
Slash command
/home-assistant-plugin:ha-entitieshaikuThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
| Use this skill when... | Use ha-automations instead when... |
Searches and resolves Home Assistant entities by name, room, or domain via HA NOVA Relay. Read-only entity registry lookups for discovery before mutations.
Provides best practices for Home Assistant automations, helpers, scripts, and dashboards. Guides on avoiding templates, using native constructs, and safe refactoring.
Develops custom Home Assistant integrations including config flows, entities, platforms, manifest.json, and device registry. Prevents common errors in coordinators, async setup, and entity registration.
Share bugs, ideas, or general feedback.
| Use this skill when... | Use ha-automations instead when... |
|---|---|
| Understanding entity domains | Creating automation rules |
| Customizing entities | Working with triggers/actions |
| Creating template sensors | Writing automation conditions |
| Setting up groups | Working with scripts/scenes |
| Working with device classes | Handling events |
domain.object_id
Examples:
light.living_room_ceilingsensor.outdoor_temperaturebinary_sensor.front_door_contactswitch.garden_irrigation| Domain | Description | Example |
|---|---|---|
light | Lighting control | light.kitchen |
switch | On/off switches | switch.outlet |
sensor | Numeric sensors | sensor.temperature |
binary_sensor | On/off sensors | binary_sensor.motion |
climate | HVAC control | climate.thermostat |
cover | Blinds, garage doors | cover.garage |
lock | Door locks | lock.front_door |
media_player | Media devices | media_player.tv |
camera | Camera feeds | camera.front_yard |
vacuum | Robot vacuums | vacuum.roomba |
fan | Fan control | fan.bedroom |
alarm_control_panel | Alarm systems | alarm_control_panel.home |
person | People tracking | person.john |
device_tracker | Device location | device_tracker.phone |
weather | Weather info | weather.home |
input_boolean | Virtual toggle | input_boolean.guest_mode |
input_number | Virtual number | input_number.target_temp |
input_select | Virtual dropdown | input_select.house_mode |
input_text | Virtual text | input_text.message |
input_datetime | Virtual date/time | input_datetime.alarm |
input_button | Virtual button | input_button.reset |
automation | Automations | automation.motion_light |
script | Scripts | script.morning_routine |
scene | Scenes | scene.movie_night |
group | Entity groups | group.all_lights |
timer | Countdown timers | timer.laundry |
counter | Counters | counter.guests |
zone | Geographic zones | zone.home |
sun | Sun position | sun.sun |
For complete device class tables (binary sensor and sensor), see REFERENCE.md.
# Single entity
light.living_room:
friendly_name: "Living Room Light"
icon: mdi:ceiling-light
# Binary sensor
binary_sensor.front_door:
friendly_name: "Front Door"
device_class: door
# Sensor
sensor.outdoor_temperature:
friendly_name: "Outdoor Temperature"
device_class: temperature
unit_of_measurement: "°C"
customize_glob:
"light.*_ceiling":
icon: mdi:ceiling-light
"sensor.*_temperature":
device_class: temperature
unit_of_measurement: "°C"
"binary_sensor.*_motion":
device_class: motion
template:
- sensor:
# Simple state
- name: "Average Temperature"
unit_of_measurement: "°C"
device_class: temperature
state: >-
{{ ((states('sensor.living_room_temp') | float +
states('sensor.bedroom_temp') | float +
states('sensor.kitchen_temp') | float) / 3) | round(1) }}
# With attributes
- name: "Power Usage"
unit_of_measurement: "W"
device_class: power
state: "{{ states('sensor.energy_meter_power') }}"
attributes:
cost_per_hour: >-
{{ (states('sensor.energy_meter_power') | float * 0.15 / 1000) | round(2) }}
# Availability
- name: "Solar Power"
unit_of_measurement: "W"
device_class: power
state: "{{ states('sensor.inverter_power') }}"
availability: "{{ states('sensor.inverter_power') != 'unavailable' }}"
For template binary sensors, switches, buttons, numbers, groups, utility meters, counters, and timers, see REFERENCE.md.
| Domain | Common Attributes |
|---|---|
light | brightness, color_temp, rgb_color, hs_color, effect |
climate | temperature, current_temperature, hvac_action, preset_mode |
media_player | volume_level, media_title, media_artist, source |
cover | current_position, current_tilt_position |
weather | temperature, humidity, pressure, wind_speed, forecast |
person | source, latitude, longitude, gps_accuracy |
sun | elevation, azimuth, next_rising, next_setting |
# In templates
{{ state_attr('light.living_room', 'brightness') }}
{{ state_attr('climate.thermostat', 'current_temperature') }}
{{ state_attr('sun.sun', 'elevation') }}
# In conditions
condition:
- condition: numeric_state
entity_id: light.living_room
attribute: brightness
above: 100
| Function | Description | Example |
|---|---|---|
states('entity') | Get state | states('sensor.temp') |
state_attr('entity', 'attr') | Get attribute | state_attr('light.x', 'brightness') |
is_state('entity', 'value') | Check state | is_state('light.x', 'on') |
is_state_attr('entity', 'attr', 'val') | Check attribute | is_state_attr('climate.x', 'hvac_action', 'heating') |
states.domain | All entities in domain | states.light |
expand('group.x') | Expand group members | expand('group.all_lights') |
| Context | Command |
|---|---|
| Find entity usage | grep -r "entity_id:" config/ --include="*.yaml" |
| List customizations | grep -rA2 "^[a-z_]*\\..*:" config/customize.yaml |
| Find template sensors | grep -rB2 "platform: template" config/ --include="*.yaml" |
| Find groups | grep -rA5 "^group:" config/ --include="*.yaml" |
| List domains used | grep -roh "[a-z_]*\\." config/ --include="*.yaml" | sort -u |