跳到主要内容

MQTT 节点

网关会在同一台机器上运行自己的 HiveMQ 代理(默认端口 1883,TLS 1884)。连接外部 SCADA / 云 IoT 时的标准模式。

2026.05+ 版本盒子的 broker 连接信息
  • Broker URL: tcp://127.0.0.1:1883 (明文) / 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 设置。

选项卡项目推荐值
连接Server127.0.0.1 (网关自身的 HiveMQ) 或外部代理 IP
Port1883 (TLS 时使用 8883)
Client ID留空则自动生成。生产环境中推荐使用 固定 ID (如 edge-<gateway-id>-flow1 等)
Keep alive推荐 60 秒
Use TLS连接外部云时开启
安全Username/Password使用代理认证时填写
消息LWT(遗嘱)edge/<id>/status 主题 + 负载 offline —— 网关意外终止时自动通知
消息Birth连接成功时在 edge/<id>/status 上以 retain 方式发布 online

3. 发布(mqtt out)—— 场景:将所有标签值上传至云端​

inject (1s) ──▶ 태그값 읽기 ──▶ change (topic 만들기) ──▶ mqtt out

change 节点:

操作属性指向
设置msg.topicplant/${msg.payload.tag_id}/value(J-Expression ${...} 或 mustache)
设置msg.payload{ "ts": $millis(), "v": msg.payload.value, "q": msg.payload.value_read_status } (JSONata)

mqtt out 节点设置:

项目值
主题(留空 → 使用 msg.topic)
QoS1(确保至少送达一次)—— 普通遥测数据设为 0 也可以
保留false(实时值)—— 对于 状态性 数据设为 true

4. 订阅(mqtt in)—— 场景:通过外部命令写入标签​

mqtt in (plant/+/cmd) ──▶ change (tag_id/value 추출) ──▶ 태그값 쓰기

mqtt in:

项目值
主题plant/+/cmd(通配符 + = 单层级)
QoS1
输出parsed JSON object —— 负载自动对象化

change:

操作属性指向
设置msg.tag_idmsg.topic.split('/')[1] (JSONata)
移动msg.payload.value → msg.payload(直接放入写入节点)

这样,外部 SCADA 只需向 plant/TAG_VALVE_01/cmd 主题发布 ({"value":"1"}),网关便会将该值写入 PLC。


5. 常见陷阱​

症状原因/解决方法
消息从未收到主题通配符(#/+)拼写错误。使用 MQTT Explorer 等独立工具确认主题树
客户端频繁断开Client ID 冲突(其他客户端使用了相同 ID)—— 分配唯一 ID
保留消息无限累积对同一主题每次都保留发布 true。保留应该仅用于 状态性 信息 (在线/离线,最后报警)
消息顺序异常QoS 0 的限制。若需保证顺序,请使用 QoS 1+

6. 下一步​