平台与工具 · 2026.07.22

给 Home Assistant 做桥接设备时,ESPHome 和 OpenMQTTGateway 应该怎么选

ESPHome 更适合把确定的传感器、执行器和 Modbus 设备做成 Home Assistant 原生实体;OpenMQTTGateway 更适合把 BLE、RF、IR 和串口等异构信号汇聚到 MQTT。本文给出桥接节点的选择边界与混合部署方式。

给 Home Assistant 做桥接设备时,ESPHome 和 OpenMQTTGateway 应该怎么选

给 Home Assistant 做桥接设备时,ESPHome 和 OpenMQTTGateway 不是“功能更多者胜出”的关系。如果桥接节点要把一组确定的传感器、继电器、Modbus 寄存器或红外动作稳定映射成 Home Assistant 实体,并在节点本地保留少量逻辑,优先选 ESPHome;如果目标是用一个节点接收多种 BLE 广播、315/433 MHz RF、IR 或串口数据,再统一发布到 MQTT,优先选 OpenMQTTGateway。

最关键的区别是建模方向:ESPHome 从“这台节点上有哪些实体和自动化”出发,OpenMQTTGateway 从“哪些异构协议需要被收进 MQTT”出发。前者更像可配置的设备固件,后者更像多协议采集网关。

你的首要目标 更合适的选择 需要接受的代价
Home Assistant 原生实体、低延迟状态更新、节点级逻辑 ESPHome 每类硬件要维护 YAML、组件配置和固件构建
BLE / RF / IR 等多协议统一进 MQTT OpenMQTTGateway 需要维护 broker、topic、discovery 和解码器边界
RS485 / Modbus 寄存器直接映射成实体 ESPHome 需要准确维护寄存器地址、类型、倍率和轮询周期
大量广播型传感器的集中发现与转发 OpenMQTTGateway 设备支持度取决于解码库和射频硬件组合
同一住宅同时有固定控制节点与长尾无线传感器 两者共存 运维上要明确命名、责任边界和故障域

这张表给出的不是绝对能力清单,而是长期维护的主路径。两套固件都能碰到 MQTT、BLE、IR 或 RF,但如果选错主路径,后续代价会表现为越来越多的自定义 topic、模板实体、lambda 或私有补丁。

安装在家庭设备柜中的 ESP32 桥接节点、RS485 转换器与无线网关

1. 先按“实体优先”还是“协议汇聚优先”做判断

Home Assistant 官方把 ESPHome 集成定义为本地推送:Home Assistant 通过 ESPHome Native API 与每台节点保持连接,节点可以直接推送状态并接收命令。对桥接设备而言,这意味着传感器、开关、数值、选择项和在线状态在固件配置阶段就已经有清晰含义,Home Assistant 不需要先理解一套通用 MQTT 载荷。

OpenMQTTGateway 的主路径不同。它把 BLE、RF、IR、LoRa 或串口等信号转换为 MQTT,并通过 Home Assistant MQTT Discovery 创建设备和实体。这个模型更适合协议入口多、设备来源杂、广播数据多的场景,因为网关首先负责“收到并规范化消息”,具体自动化再由 broker 后面的系统处理。

flowchart TD

A("桥接节点最重要的职责是什么?"):::slate --> B("稳定映射已知设备与实体"):::blue
A --> C("汇聚多种无线或串口协议"):::orange
A --> D("两类职责同时存在"):::violet

B --> E("优先 ESPHome"):::cyan
C --> F("优先 OpenMQTTGateway"):::green
D --> G("拆成两个节点或明确双栈边界"):::violet

E --> H("Native API / 本地逻辑 / Modbus 实体"):::blue
F --> I("MQTT / BLE 广播 / RF / IR"):::orange
G --> J("统一命名、可观测性与故障隔离"):::slate

classDef blue fill:#EAF4FF,stroke:#3B82F6,color:#16324F,stroke-width:2px;
classDef cyan fill:#E9FBF8,stroke:#14B8A6,color:#134E4A,stroke-width:2px;
classDef orange fill:#FFF3E8,stroke:#F08A24,color:#7C3F00,stroke-width:2px;
classDef violet fill:#F4EDFF,stroke:#8B5CF6,color:#4C1D95,stroke-width:2px;
classDef green fill:#ECFDF3,stroke:#22C55E,color:#14532D,stroke-width:2px;
classDef slate fill:#F8FAFC,stroke:#64748B,color:#1F2937,stroke-width:2px;

如果一个节点既要承担关键控制,又要持续扫描大量广播设备,先拆分通常比把所有组件塞进同一块 ESP32 更稳。扫描、射频解码和 MQTT 重连会争用 CPU、内存与无线时隙;关键继电器或 Modbus 控制则更需要可预测的循环和故障行为。

2. BLE、IR、RF、串口与 Modbus 的选择边界

2.1 BLE:控制已知设备,还是收集大量广播

ESPHome 的 Bluetooth Proxy 让 Home Assistant 通过 ESP32 扩展蓝牙覆盖范围。它适合 Home Assistant 已经理解目标设备、需要把蓝牙链路延伸到设备附近的场景。节点仍然围绕 Home Assistant 的设备模型工作,部署路径短,诊断也集中在 ESPHome 节点与 Home Assistant 集成。

OpenMQTTGateway 更适合“扫描、解码、转发”型 BLE 网关。官方文档说明其 BLE 解码依赖 Theengs Decoder,并可把广播设备的数据送入 MQTT。若现场有大量温湿度计、胎压传感器、信标或其他广播型设备,而且还要让 Node-RED、OpenHAB 或自研服务消费同一份数据,MQTT 汇聚比只为 Home Assistant 暴露代理更自然。

因此,BLE 选择不应只看支持设备数量:Home Assistant 是唯一上层且需要紧密控制时,ESPHome Bluetooth Proxy 更直接;多个消费者需要共享广播数据时,OpenMQTTGateway 的 MQTT 边界更清楚。

2.2 IR 与 RF:固定动作节点,还是长尾协议入口

ESPHome 的 remote_receiverremote_transmitter 适合已知遥控器、已知协议和固定动作。开发者可以把“学习到的码”“发送动作”和本地条件组合进同一份 YAML。对空调、风扇、幕布或少量 433 MHz 插座,这种写法容易把动作直接映射成 Home Assistant 服务或实体。

OpenMQTTGateway 更适合把 IR、315/433/868/915 MHz RF 等能力集中在一个网关。它借助 RCSwitch、Pilight、IRRemoteESP8266 等上游库覆盖多种协议,并以 MQTT 消息收发。如果目标是接入大量品牌不一的老设备,或者需要观察未知射频流量再逐步补解码,协议网关模式更省重复固件配置。

边界也很明确:如果关键控制依赖一个未验证的 RF 解码器,换成 OpenMQTTGateway 并不会自动提高可靠性;如果只是发送两个固定红外动作,部署完整 MQTT 网关也可能比 ESPHome 节点更重。

2.3 串口与 Modbus:不要把字节转发等同于设备建模

ESPHome 的 modbus_controller 可以把 coil、input、holding register 和 read register 映射为 sensor、switch、number、select 等实体。对于电表、热泵、逆变器、空调控制器或 RS485 传感器,这种“寄存器到实体”的路径通常最短。

OpenMQTTGateway 的 Serial gateway 可以在串口与 MQTT 之间发送和接收数据,也支持把串口 JSON 拆成 MQTT topic。但它解决的是串口消息搬运,不等于自动理解 Modbus 寄存器、字节序、倍率和轮询策略。若仍需在 Node-RED 或自研服务里解析 Modbus,系统只是把协议语义从桥接节点移到了服务器端。

所以在 Modbus 场景里,少量已知设备、需要直接形成 Home Assistant 实体时选 ESPHome;自定义串口协议需要先汇入通用数据总线,且团队已经有服务器端解析能力时,OpenMQTTGateway 才更有吸引力。

3. 真正拉开差距的是依赖与运维模型

运维维度 ESPHome OpenMQTTGateway
上层连接 Home Assistant Native API 为主,也可使用 MQTT MQTT broker 为核心边界
配置单位 每台节点的 YAML、组件与固件 网关构建、WebUI / 运行配置、topic 与解码器
状态模型 预先定义的 Home Assistant 实体 协议消息先进入 MQTT,再由 discovery 或消费者解释
故障域 单节点与 Home Assistant 连接 网关、网络、broker、discovery 与消费者链路
扩展方式 增加组件、lambda 或外部组件 增加协议模块、解码器或 MQTT 消费逻辑
多系统共享 可以走 MQTT,但不是最短路径 天然适合多个 MQTT 消费者

ESPHome 的主要成本是配置碎片化。节点数量增加后,团队要治理 packages、secrets、板型差异、实体命名和 OTA 节奏。OpenMQTTGateway 的主要成本则是消息治理:topic 设计、retain、availability、broker 权限、发现消息和解码器版本都需要成为运维对象。

如果家庭里只有 Home Assistant,一个额外 broker 可能增加无必要的共享故障点;如果现场已经把 MQTT 当作统一事件总线,强行让所有协议都走 Home Assistant 专用连接又会限制数据复用。选择应跟现有控制平面一致,而不是另起一套中间件。

4. 三种可落地的部署方式

4.1 ESPHome 单节点:适合确定、稳定、可建模的桥接

典型组合是 ESP32 + RS485 收发器,或 ESP32 + IR 收发头。每个寄存器、开关或动作都在配置中有名字,Home Assistant 直接看到实体。它适合设备清单稳定、自动化依赖明确、出现故障时需要快速定位到具体实体的项目。

不适合的情况是协议来源不断增加,而且多数设备只有广播数据。此时每加入一种长尾设备都修改节点配置,会把本来简单的实体固件变成通用网关。

4.2 OpenMQTTGateway 单节点:适合异构协议集中采集

典型组合是 ESP32 + BLE + CC1101 / RF 模块,或 BLE + IR。网关把信号统一送入 broker,Home Assistant 通过 MQTT Discovery 获取设备,其他系统也能订阅同一数据。它适合被动传感器多、协议杂、数据消费者不止一个的现场。

不适合的情况是桥接节点承担安全相关或强确定性的本地控制。MQTT topic、broker 和消费者链越长,越需要补权限、离线策略、命令确认与审计,而不能把 discovery 成功当成控制可靠性。

4.3 混合部署:让每个节点只承担一种主要职责

最稳的混合方案通常不是一块板刷两套逻辑,而是把关键控制与协议采集分开:ESPHome 节点负责继电器、Modbus 和固定红外动作;OpenMQTTGateway 节点负责 BLE 广播与长尾 RF。Home Assistant 在上层统一自动化,但两种节点保留独立升级和回滚路径。

混合部署的代价是设备数量增加,不过它换来了更清楚的故障隔离。射频扫描异常不应拖慢冷柜控制,broker 维护也不应让本地温控节点失去基本动作能力。

5. 哪些情况下两者都不是最佳答案

  • 需要认证级可靠性或安全联锁。 ESP32 桥接固件不应替代安全 PLC、硬接线保护或经验证的控制器。
  • 需要 Thread / Zigbee 网络协调器。 这类网络应优先使用成熟的 Border Router、ZHA 或 Zigbee2MQTT 路径,而不是把 BLE / RF 网关当成通用协调器。
  • 需要大规模设备生命周期管理。 当节点达到数百或数千台,配置仓库、OTA、证书、库存、遥测和回滚需要平台化,不能只靠家庭自动化式的节点管理。
  • 协议需要复杂事务或强时序。 多步骤握手、总线仲裁或厂商私有状态机可能需要专用固件或 Linux 网关。
  • 团队无法维护所选依赖。 不熟悉 MQTT 运维时不要因为“协议多”就引入 broker;不愿维护每节点配置时也不要把所有功能都做成 ESPHome YAML。

6. 开始制作桥接节点前的检查清单

  1. 写清上层消费者:只有 Home Assistant,还是还有 Node-RED、自研平台与数据仓库。
  2. 把协议分成控制型与采集型:控制需要确定性、确认与离线策略,采集更关心覆盖和解码。
  3. 明确设备模型放在哪里:固件实体、MQTT discovery,还是服务器端解析。
  4. 为 broker、Home Assistant 和节点分别定义离线行为,不把“断线重连”当作完整容错。
  5. 先做一台节点的长时间扫描、内存、Wi-Fi 与重连测试,再复制部署。
  6. 固定命名、topic、实体 ID、固件版本和回滚方式,避免后期重复实体与遗留 retained 消息。

如果前四项答不清,先不要选固件。桥接节点失败往往不是因为“少支持一个协议”,而是系统从未决定谁负责建模、谁负责命令、谁负责断线后的行为。

结论

ESPHome 更适合把已知硬件做成 Home Assistant 能直接理解和控制的设备;OpenMQTTGateway 更适合把多种无线或串口信号汇聚成可被多个系统消费的 MQTT 数据流。前者的优势是实体清晰、Native API 紧密、本地逻辑容易放置;后者的优势是协议入口广、广播设备友好、数据总线边界明确。

如果必须用一句话做选择:从“我要做哪些 Home Assistant 实体”出发,选 ESPHome;从“我要把哪些协议收进 MQTT”出发,选 OpenMQTTGateway。 同时存在两种目标时,把关键控制和长尾采集拆成不同节点,通常比追求一块万能 ESP32 更容易维护。

延伸阅读:

参考资料

星野云联微信二维码