MQTT 节点详解
网关在同一台机器上自带 HiveMQ 代理(默认端口 1883,TLS 1884)。这是与外部 SCADA / 云端 IoT 对接时的标准方案。
2026.05+ 机型的 broker 连接信息
- Broker URL:
tcp://127.0.0.1:1883(plain) /ssl://127.0.0.1:1884(TLS) - Username / Password:
app.properties中的mqtt.server.user/mqtt.server.password—— 量产 机型每台随机生成(可在/etc/kopens/credentials.txt中确认)。entrypoint 会自动同步 HiveMQ auth.properties。 - 支持 MQTT 5(HiveMQ 2025.4):retained / will / session expiry / shared subscriptions 全功能。
- 与 Sparkplug B 共用同一 broker —— 可同时订阅
spBv1.0/#进行监控。
1. 节点类型
| 节点 | 用途 |
|---|---|
mqtt in | 订阅 主题 —— 每当消息到达即触发流程 |
mqtt out | 发布 消息 (publish) |
2. Broker(服务器)配置 —— 只需创建一次,所有节点共享
双击 mqtt in 或 mqtt out 节点 → Server 栏右侧的铅笔图标 → 新建 broker 配置。
| 选项卡 | 项目 | 推荐值 |
|---|---|---|
| Connection | Server | 127.0.0.1(网关自带的 HiveMQ)或外部代理 IP |
| Port | 1883(TLS 时为 8883) | |
| Client ID | 留空则自动生成。生产环境建议使用 固定 ID(如 edge-<gateway-id>-flow1) | |
| Keep alive | 推荐 60 秒 | |
| Use TLS | 连接外部云端时开启 | |
| Security | Username/Password | 使用代理认证时填写 |
| Messages | LWT (Last Will) | edge/<id>/status 主题 + payload offline —— 网关意外宕机时自动通知 |
| Messages | Birth | 连接成功后向 edge/<id>/status 以 retain 方式发布 online |
3. 发布(mqtt out)—— 场景:将所有标签值发送到云端
inject (1s) ──▶ 태그값 읽기 ──▶ change (topic 만들기) ──▶ mqtt out
change 节点:
| 操作 | Property | To |
|---|---|---|
| Set | msg.topic | plant/${msg.payload.tag_id}/value(J-Expression ${...} 或 mustache) |
| Set | msg.payload | { "ts": $millis(), "v": msg.payload.value, "q": msg.payload.value_read_status } (JSONata) |
mqtt out 节点配置:
| 项目 | 值 |
|---|---|
| Topic | (留空 → 使用 msg.topic) |
| QoS | 1(保证至少送达一次)—— 普通遥测数据用 0 也可以 |
| Retain | false(实时值)—— 若为 状态型 数据则用 true |
4. 订阅(mqtt in)—— 场景:用外部下发的命令写入标签
mqtt in (plant/+/cmd) ──▶ change (tagId/value 추출) ──▶ 태그값 쓰기
mqtt in:
| 项目 | 值 |
|---|---|
| Topic | plant/+/cmd(通配符 + = 单层) |
| QoS | 1 |
| Output | parsed JSON object —— payload 会自动解析为对象 |
change:
| 操作 | Property | To |
|---|---|---|
| Set | msg.tagId | msg.topic.split('/')[1] (JSONata) |
| Move | msg.payload.value → msg.payload | (直接传入写入节点) |
这样一来,外部 SCADA 只需向 plant/TAG_VALVE_01/cmd 主题 publish {"value":"1"},网关就会把该值写入 PLC。
5. 常见陷阱
| 现象 | 原因 / 解决方法 |
|---|---|
| 一条消息都收不到 | 主题通配符(#/+)拼写错误。用 MQTT Explorer 等工具确认主题树 |
| 客户端频繁断开 | Client ID 冲突(其他客户端使用相同 ID 接入)—— 分配唯一 ID |
| Retain 消息无限堆积 | 对同一主题每次都以 retain true 发布。retain 仅应用于 状态型 数据(online/offline、最后一条报警) |
| 消息顺序异常 | QoS 0 的固有限制。若顺序重要请使用 QoS 1+ |
6. 后续步骤
- OPC-UA 节点详解 —— 与外部 OPC-UA 服务器通信
- Sparkplug B 节点详解 —— 自动处理 Sparkplug 规范
- IIoT 示例集