Home Assistant 实体、服务与状态模型
Home Assistant 的核心抽象
Home Assistant 的整个系统围绕三个核心概念构建:实体(Entity)、服务(Service)、状态(State)。理解了这三个概念,Home Assistant 的一切都好理解了。
实体(Entity)—— 一切都用实体表示
实体是 Home Assistant 的基本数据单元。每一个被 Home Assistant 知道的东西——一盏灯、一个温度传感器、一个开关、一个摄像头、一个自动化脚本——都是实体。
实体 ID 格式
每个实体有唯一的 ID:domain.entity_id
| Domain | 含义 | 示例 |
|---|---|---|
light | 灯 | light.living_room |
switch | 开关 | switch.heater |
sensor | 传感器 | sensor.temperature_kitchen |
binary_sensor | 二态传感器(开/关、在/不在) | binary_sensor.door_front |
climate | 温控/空调 | climate.thermostat_upstairs |
cover | 窗帘/车库门 | cover.garage_door |
media_player | 媒体播放器 | media_player.sonos_kitchen |
camera | 摄像头 | camera.doorbell |
lock | 门锁 | lock.front_door |
automation | 自动化 | automation.lights_sunset |
script | 脚本 | script.arrive_home |
person | 人员 | person.me |
zone | 区域 | zone.home |
group | 组 | group.all_lights |
input_boolean | 输入开关(UI 按钮) | input_boolean.guest_mode |
select | 下拉选择 | select.home_mode |
number | 数值 | number.thermostat_setpoint |
实体状态
每个实体都有一个当前状态(State)和零个或多个属性(Attributes)。
实体:light.living_room
状态:on
属性:
brightness: 80
color_temp: 300
friendly_name: 客厅主灯
device_class: light
area_id: living_room
...
实体:sensor.temperature
状态:24.5
属性:
unit_of_measurement: °C
device_class: temperature
state_class: measurement
...
特殊状态值
| 状态 | 含义 |
|---|---|
on / off | 二态实体 |
unknown | 实体刚出现,还没拿到有效状态 |
unavailable | 实体对应的设备离线了 |
none | 某些特定场景的空值 |
服务(Service)—— 执行动作
服务是 Home Assistant 执行动作的方式。任何"做事"都通过调用服务完成:开个灯 = 调用 light.turn_on,发个通知 = 调用 notify.xxx。
服务命名格式
同样是 domain.action:
| 服务 | 做什么 |
|---|---|
light.turn_on | 开灯 |
light.turn_off | 关灯 |
light.toggle | 切换 |
switch.turn_on | 开开关 |
climate.set_temperature | 设温度 |
notify.mobile_app_me | 给我手机发通知 |
homeassistant.restart | 重启 Home Assistant |
automation.turn_off | 禁用某个自动化 |
camera.snapshot | 摄像头拍照 |
lock.lock | 锁门 |
media_player.media_play | 播放媒体 |
调用服务的三个参数
action:
- service: light.turn_on # 服务名
target: # 目标(可以是 entity_id / area_id / device_id / floor_id)
entity_id: light.living_room
data: # 服务参数(不同服务参数不同)
brightness_pct: 80
color_name: warmwhite
用 YAML 模板动态调用
action:
- service: "{{ trigger.service_name }}" # 动态服务名
target:
entity_id: "{{ trigger.entity_id }}"
data:
state: "{{ trigger.to_state.state }}"
服务发现
所有可用服务可以在 Developer Tools → Services 页面浏览——这是 Home Assistant 里最强大的"手册",每个服务的参数、目标、示例都在这里。
状态变化触发事件
实体的状态变化会产生事件——Home Assistant 的事件总线(Event Bus)把这些事件分发给所有订阅者。自动化就是最主要的事件消费者。
light.living_room 状态从 off → on
→ 事件总线发出 state_changed 事件
→ 监听这个事件的自动化被触发
→ 自动化检查条件
→ 条件满足,执行动作
Developer Tools —— 探索系统的最佳入口
Home Assistant 内置的 Developer Tools 是了解实体、服务、状态的最佳工具:
| Tab | 功能 |
|---|---|
| States | 所有实体的当前状态实时列表 |
| Services | 浏览和调用所有服务 |
| Events | 查看 Home Assistant 事件总线(实时监听 state_changed 事件最有用) |
| Template | Jinja2 模板调试器 |
| Set States | 手动设置实体状态(调试自动化时很有用) |
| Call Service | 快速调用某个服务(调试动作时) |
| Manifests | 查看所有已加载的集成 |
| Logs | 实时日志 |
总结理解
实体 = Home Assistant 知道的所有东西(灯、传感器、摄像头、自动化…)
状态 = 每个实体当前是什么情况(开/关、24.5°C、电量 80%…)
服务 = 能做什么动作(开灯、设温度、发通知…)
事件 = 实体状态变化时发出的通知(触发自动化)
自动化 = 监听事件 + 检查条件 + 调用服务
这五个概念构成了 Home Assistant 的整个运行模型。理解它们之后,Home Assistant 就不再是一个"魔法盒子",而是一个清晰可预测的系统。