Home Assistant Entities
When to Use This Skill
| 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 |
Entity ID Structure
domain.object_id
Examples:
light.living_room_ceilingsensor.outdoor_temperaturebinary_sensor.front_door_contactswitch.garden_irrigation
Common Domains
| 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.
Entity Customization
customize.yaml
# 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"
Glob Customization
customize_glob:
"light.*_ceiling":
icon: mdi:ceiling-light
"sensor.*_temperature":
device_class: temperature
unit_of_measurement: "°C"
"binary_sensor.*_motion":
device_class: motion
Template Sensors
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.
State Attributes
Common Attributes
| 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 |
Accessing Attributes
# 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
Quick Reference
State Functions
| 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') |
Agentic Optimizations
| 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 |