跳到主要内容

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 inmqtt out 节点 → Server 栏右侧的铅笔图标 → 新建 broker 配置。

选项卡项目推荐值
ConnectionServer127.0.0.1(网关自带的 HiveMQ)或外部代理 IP
Port1883(TLS 时为 8883)
Client ID留空则自动生成。生产环境建议使用 固定 ID(如 edge-<gateway-id>-flow1)
Keep alive推荐 60
Use TLS连接外部云端时开启
SecurityUsername/Password使用代理认证时填写
MessagesLWT (Last Will)edge/<id>/status 主题 + payload offline —— 网关意外宕机时自动通知
MessagesBirth连接成功后向 edge/<id>/status 以 retain 方式发布 online

3. 发布(mqtt out)—— 场景:将所有标签值发送到云端

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

change 节点:

操作PropertyTo
Setmsg.topicplant/${msg.payload.tag_id}/value(J-Expression ${...}mustache)
Setmsg.payload{ "ts": $millis(), "v": msg.payload.value, "q": msg.payload.value_read_status } (JSONata)

mqtt out 节点配置:

项目
Topic(留空 → 使用 msg.topic)
QoS1(保证至少送达一次)—— 普通遥测数据用 0 也可以
Retainfalse(实时值)—— 若为 状态型 数据则用 true

4. 订阅(mqtt in)—— 场景:用外部下发的命令写入标签

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

mqtt in:

项目
Topicplant/+/cmd(通配符 + = 单层)
QoS1
Outputparsed JSON object —— payload 会自动解析为对象

change:

操作PropertyTo
Setmsg.tagIdmsg.topic.split('/')[1] (JSONata)
Movemsg.payload.valuemsg.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. 后续步骤