
前提条件你已经有一个正在运行的独立 Mosquitto 服务器。你知道该服务器的IP 地址和端口默认是 1883。你已经准备好了用户名和密码如果你为 Mosquitto 配置了认证强烈推荐。可选但推荐如果你配置了 SSL/TLS 加密你拥有相应的 CA 证书。启动HA,我自己创建了虚拟环境所以要先激活虚拟环境再启动HA,具体参见后面的参考链接source venv313/bin/activatehomeasssitant 我的用户名x 密码1HA定义HA 就是一个**“万能设备翻译官 实时状态数据库 自动化规则大脑”**。它不生产设备只做设备的统一管理和联动。核心架构主干数据流向设备 → 翻译(Integration) → 统一模型(Entity) → 记录状态(State) / 捕捉变化(Event) → 规则引擎(Automation) → 执行动作最值得研究的 4 个核心概念1. Integration翻译官/驱动层不同厂家的设备小米、海康、ESP32语言不通。Integration 就是驱动把它们全部翻译成 HA 能听懂的统一格式。2. Entity实体/统一模型HA 不把设备当整体看而是拆成一个个独立的数据点。比如一个温度计会被拆成“温度实体”、“电量实体”、“在线状态实体”。你做 AIoT 平台这是极佳的数据抽象参考3. State vs Event状态与事件State当前怎样系统的短期记忆。比如“温度36℃”、“风扇OFF”。Event发生了什么刚刚发生的动作。比如“温度突然升高”、“检测到有人”。精髓状态变化会触发事件事件驱动规则运转。4. Automation自动化大脑ECA模型经典的触发(Trigger) → 条件(Condition) → 动作(Action)。比如有人Trigger且温度35℃Condition就开空调Action。执行动作后改变 State又会产生新 Event形成闭环。总结别被 HA 的安装和各种插件迷惑。它最值得你借鉴的就是如何把异构设备统一抽象成 Entity用 Event 驱动 State 变化再通过 Automation 实现跨设备联动。把这四个词Entity, State, Event, Automation刻在脑子里你再看 ThingsBoard 或设计自己的 AIoT 平台架构就会非常清晰。#更进一步说1. Integration它不只是翻译还负责发现设备、引导用户配置config flow、注册服务。ESP32 通常通过 ESPHome 或 MQTT 接入小米、海康各有各的 integration。**2.Device设备。HA 里是设备包含多个实体一个温度计是一个 Device下面挂温度、电量、在线状态几个 Entity。所以不是不把设备当整体而是设备做分组实体做数据单元。3. State vs EventHA 里每次状态变化都会在内部事件总线上发一个state_changed事件这是状态变化触发事件的实际机制。温度突然升高不是 HA 自带的事件而是由自动化里的触发条件如数值阈值、状态持续多久判断出来的。HA 只有原始的state_changed语义要你自己定义。另外 HA 还有专门的event类实体用于按键按下这类没有持续状态、只有瞬时动作的东西。状态是当前值放内存里历史由 recorder 存进数据库所以说短期记忆不完全准确。4. AutomationAction 调用的是Service服务比如switch.turn_off。Service 是第五个值得研究的概念因为它是HA 对外提供的动作接口你的 AI 服务要控制设备最终也是调用它。二、能不能扩展自己的实体、事件、集成按由浅到深有三层1. 不写 HA 代码MQTT Discovery最省事你的设备或数据网关往homeassistant/sensor/id/config发一段 JSONHA 自动创建实体。你的产品只要会发 MQTT就能接入。适合教学第一阶段也适合你的模拟器。2. 自定义事件触发自动化的 action、REST APIPOST /api/events/事件名、WebSocket 都能发自定义事件比如ai_alert带上event_data位置、严重程度。监听自动化里用事件触发器订阅这个事件名。适合让 AI 服务通知HA 发生了什么而不用把结果硬塞成一个实体状态。3. 自定义 Integration真正集成你的产品在配置目录下新建custom_components/你的域名/最小文件如下manifest.json声明域名、名称、版本、依赖、config_flow等。__init__.py入口初始化连接。sensor.py或 switch 等定义实体类。config_flow.py可选做界面配置向导。实体类骨架大致是这样示意具体接口请以官方文档为准classTrashDistanceSensor(SensorEntity):_attr_unique_idtrash1_distance_attr_name垃圾桶1距离_attr_native_unit_of_measurementcmpropertydefnative_value(self):returnself._device.latest_distance要点实体要有unique_id才能在界面里改名、归属区域。用device_info把多个实体归到同一个 Device 下。设备主动推送用async_write_ha_state()需要轮询用DataUpdateCoordinator。自定义服务用hass.services.async_register注册自定义事件用hass.bus.async_fire发出。4. 对外发布放到 GitHub用 HACS 分发想进官方核心要走 HA 的代码审核流程门槛较高。三、对我们实验平台的想法第一阶段让学生用 MQTT Discovery 接入传感器模拟器理解设备到实体的对应。进阶开放题让学生为我们的模拟器/数据网关写一个最小的自定义 Integration这正是软件工程含量的体现。AI 结果回流把 AI 预测做成实体如sensor.trash1_fill_prediction把告警做成自定义事件如ai_alert再由自动化响应形成闭环。这个设计也是你的案例能和同质化产品区分开的地方。HA 的开发接口更新较快写代码前建议对照官方开发者文档developers.home-assistant.io核对你所用版本。在 Home Assistant 中的配置步骤第1步添加 MQTT 集成打开您的 Home Assistant 后台。进入「设置」-「设备与服务」。点击右下角的「添加集成」按钮。在搜索框中输入MQTT然后选择出现的 「MQTT」 集成。# ---- 普中 F103 温湿度 -----unique_id: xw103_temperature name:RoomTemperaturestate_topic:xw103/home/sensor_dataunit_of_measurement:°Cvalue_template:{{ value_json.properties.temperature2 }}device_class: temperature-unique_id: xw103_humidity name:RoomHumiditystate_topic:xw103/home/sensor_dataunit_of_measurement:%value_template:{{ value_json.properties.humidity2 }}device_class: humidity...第2步填写连接信息点击 「MQTT」 后会弹出一个配置窗口你需要填写你独立 Mosquitto 服务的详细信息。代理: 填写你的 Mosquitto 服务器的IP 地址或主机名。例如192.168.1.100或mqtt.myhome.com。端口: 默认是1883非加密或8883SSL加密。请根据你的 Mosquitto 配置填写。用户名: 你在 Mosquitto 中创建的用户名。密码: 对应用户的密码。高级选项点击「显示高级选项」:协议: 保持默认的 「MQTT 3.1.1」 即可它有最好的兼容性。SSL/TLS: 这是一个关键选项。不使用 SSL/TLS: 如果你的 Mosquitto 使用默认的 1883 端口且未加密请选择此项不推荐用于生产环境。使用 SSL/TLS不验证证书: 如果你使用了自签名证书并且只希望加密通信而不验证证书有效性可以选择此项。使用 SSL/TLS并验证证书: 如果你拥有受信任的 CA 签发的证书请选择此项以提供最高安全性。#我是通过修改配置文件完整这个且慢不对~~~目录错了是/home/dragon/.homeassistant/ 这个目录 带点的~~~第3步提交并测试连接填写完所有信息后点击「提交」按钮。如果所有信息都正确Home Assistant 会成功连接到你的独立 Mosquitto 服务器并返回到集成列表页面。你会看到一个新的 「MQTT」 卡片状态应该是「已连接」。故障排除如果连接失败Home Assistant 会提示错误信息。请检查以下几点网络连通性: 确保 Home Assistant 主机可以ping通你的 Mosquitto 服务器 IP。防火墙设置: 检查 Mosquitto 服务器上的防火墙是否打开了指定的端口1883或8883。认证信息: 仔细核对用户名和密码是否正确。你可以在 Mosquitto 服务器上使用mosquitto_passwd命令验证或重置密码。Mosquitto 配置: 检查 Mosquitto 的配置文件mosquitto.conf确保设置了listener端口如listener 1883。如果 Mosquitto 服务器不在本地需要设置allow_anonymous false并配置密码文件或者将listener绑定到0.0.0.0默认只绑定到 127.0.0.1。验证连接可选但推荐为了确认一切工作正常你可以使用 Home Assistant 的 MQTT 开发工具。进入「开发者工具」-「MQTT」标签页。在「监听主题」中输入#监听所有主题然后点击「开始监听」。让你的一些 MQTT 设备发布消息或者手动在「发布消息」部分发布一个测试主题例如home/test看看是否能收到。如果你能正常收发消息恭喜你Home Assistant 已经成功连接到你的独立 Mosquitto 服务了完成以上步骤后所有通过此 MQTT 代理进行通信的设备例如 ESPHome、Tasmota 设备等都可以被 Home Assistant 自动发现或手动配置接入。目前的规划结构ps:在Ubuntu上从零开始编译并运行Home Assistant源码并集成HACS与小米开源的Ha Xiaomi Home