☰
Home Assistant 底层机制拆解:一个传感器数值要经历的四段路
2026/10/4 8:55:45 网站建设 项目流程

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.markdownMQTT 集成文档,含订阅与设备发现机制
规则引擎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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询