Home Assistant 底层机制拆解:一个传感器数值要经历的四段路
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
当卧室的 Zigbee 人体传感器突然上报状态,灯为什么会在几秒后亮起,而仪表盘上的卡片又为何同步刷新?Home Assistant 的自动化背后,是一条层次分明的状态数据流。
把传感读数抽象成实体
这一层解决最底层的问题:如何让成百上千个来自不同品牌的读数,变成一套系统可以统一读写的表格。Home Assistant 把所有读数抽象为实体(Entity)——每个实体有唯一的实体 ID(如binary_sensor.bedroom_motion)、当前状态和一组属性。同一个物理设备的多个实体被归组为一个设备,设备再按"客厅""卧室"这类空间概念归入区域。
一个人体传感器设备至少产出三个实体:运动状态(detected / clear)、照度、电量。这套设计意味着触发器、仪表盘、自动化引用时,面对的都是同一张状态表,而不是各厂商私有的协议格式。
相关文档:source/getting-started/concepts-terminology.markdown
从集成与订阅注入数据
数据模型定好之后要回答:数值从哪来。答案是集成(Integration),每个集成就是一枚协议驱动,负责与外部硬件或服务双向通信:Philips Hue 灯具经 Hue Bridge 集成进入,自建传感器网络则经 MQTT 集成进入。
MQTT 是典型的发布/订阅机制:设备向特定主题发布 JSON 负载,Home Assistant 的 MQTT 集成订阅该主题后把数值写入对应实体,配合发现机制,新设备无需手工配置即可自动出现在平台上。
# 设备向主题发布温度,负载为 JSON # MQTT 集成订阅该主题并更新实体状态 topic: zigbee2mqtt/livingroom/temperature payload: {"temperature": 26.8}该文件位于 source/_integrations/mqtt.markdown
状态变化如何成为自动化触发
实体只会存数据,需要规则引擎才有意义。Home Assistant 自动化全部由三要素构成:触发(When)、条件(And if)、动作(Then do)。触发器本质上是订阅实体状态变化——运动实体从 clear 跳到 detected 的瞬间,自动化引擎被唤醒,逐条过完条件后才执行动作。
以"21:45 时若有人在家则打开玄关灯"为例:
# 时间触发 + 在场条件 + 开灯动作 alias: 晚间开启玄关灯 trigger: - trigger: time at: "21:45:00" condition: - condition: state entity_id: person.family state: home action: - action: light.turn_on target: entity_id: light.hallway该文件位于 source/_docs/automation/basics.markdown
动作如何回写到设备
动作不是直接发给设备的指令,而是一次服务调用(Service),例如light.turn_on。服务会分派给对应集成,由集成把它翻译成该设备自己的协议:MQTT 设备收到的是命令主题上的消息,Hue 灯具收到的是桥接器接口调用。
这种"服务作为统一出口"与实体作为统一入口互为镜像:自动化永远不需要知道灯是 Zigbee 还是 Wi-Fi 的。脚本(Script)是同一套动作的延伸——一段保存好的步骤序列,可被按钮、语音或自动化随时调起,适合多处复用的操作。
该文件位于 source/_integrations/script.markdown
端到端:一次数据闭环
前面四层在此闭合成环:设备经 MQTT 上报写入状态,状态变化触发自动化,自动化调用服务,服务经集成回写设备,新状态再推送给前端。
让仪表盘与状态保持同步
最后一环是展示。仪表盘(Lovelace)上的每张卡片只是实体的投影:前端通过 WebSocket API 建立长连接,实体状态一变,服务端主动推送,无需轮询。于是自动化把灯翻亮的瞬间,卡片上的灯泡图标立刻变色,整条链路在秒级内闭合。
# 实体卡片:把卧室的关键实体聚合展示 type: entities title: 卧室 entities: - entity: light.bedroom_main name: 主灯 - entity: binary_sensor.bedroom_motion name: 人体该文件位于 source/_dashboards/entities.markdown
速查表
| 关注点 | 对应路径 | 一句话说明 |
|---|---|---|
| 数据模型 | source/getting-started/concepts-terminology.markdown | 定义集成、设备、实体、区域的层级关系 |
| 设备接入 | source/_integrations/mqtt.markdown | MQTT 集成文档,含订阅与设备发现机制 |
| 规则引擎 | source/_docs/automation/basics.markdown | 拆解触发、条件、动作三要素 |
| 动作序列 | source/_integrations/script.markdown | 可复用、可手动触发的脚本 |
| 用户界面 | source/_dashboards/entities.markdown | 把实体以卡片形式放上仪表盘 |
想看一次自动化完整的执行轨迹,从 source/_docs/automation/testing.markdown 的 traces 说明入手,逐步核对每次触发与条件判定。
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考