跳到主要内容

Sparkplug B 节点

存在像 node-red-contrib-sparkplug-b 或 node-red-contrib-mqtt-sparkplug-plus 这样的节点集。它们在同一个 MQTT 代理上运行,但会自动处理 Sparkplug B 规范(spBv1.0/... 主题 + protobuf 负载 + birth/death 序列)。

网关已经将 Sparkplug B 发送 作为自己的组件实现(参考 advanced/sparkplug),但在 Node-RED 中,您可以用它来创建 接收/监控 或 模拟外部设备 的功能。

2026.05+ 版本的 broker 连接信息
  • Broker:127.0.0.1:1883(HiveMQ,位于同一容器内)
  • Username / Password:app.properties 中的 mqtt.server.user / mqtt.server.password — 生产版本的盒子由 install.sh 为每个盒子随机生成(在 /etc/kopens/credentials.txt 中查看)。 HiveMQ auth.properties 的入口脚本会在每次启动时自动与 app.properties 同步。
  • Group ID / Edge Node ID:留空则自动使用 edge.site_id / edge.id(例如:SITE_00001 / EDGE_00303)
  • 兼容 Sparkplug 3.0.0 规范(NBIRTH seq=0,DDEATH/NDEATH bdSeq,Properties,alias 选项)

1. 核心概念​

术语含义
Group ID分组(例如:Plant1)
Edge Node ID单个网关/设备的标识符
Device ID其下的单个设备 — 可选
Metric对应一个标签(Sparkplug 的度量)
Birth(NBIRTH/DBIRTH)节点/设备一次性发布其度量的“完整定义” — 订阅者立即同步
Data(NDATA/DDATA)平时的值变化 — 仅变化的度量(增量)
Death(NDEATH/DDEATH)自身通过 LWT 注册的存活消息 — 连接断开时自动发布

2. 基本发布流程(边缘 → 云端)​

inject (5s) ─▶ 태그값 읽기 ─▶ function (Sparkplug 메트릭 변환) ─▶ sparkplug device out

function:

return {
payload: {
metrics: [{
name: msg.payload.tag_id, // "TAG_TEST_00042"
type: 'Int32',
value: parseInt(msg.payload.value, 10),
timestamp: Date.now()
}]
}
};

sparkplug device out(或 mqtt-sparkplug device)设置:

项目值(示例)
Group IDPlant1
Edge Node IDEDGE_00303
Device ID(可省略 — 直接在边缘层级发布)
Broker(直接复用上面 MQTT 中创建的 broker)

Birth/Death 由节点自动处理 — 部署时发布 NBIRTH,节点停止/崩溃时通过 LWT 发布 NDEATH。


3. 接收流程(云端 / 监控中心 → 监控各个边缘节点)​

sparkplug client in (Group=Plant1) ─▶ switch (msg.topic 으로 분기) ─▶ ...

sparkplug client in 的一个节点订阅 spBv1.0/Plant1/... 的整个主题,并自动解析消息类型(NBIRTH/NDATA/NDEATH/DBIRTH/...),整理成 msg.command / msg.payload.metrics。

分支示例(switch):

条件处理
msg.command === 'NBIRTH'设备元数据 数据库同步 — 更新度量目录
msg.command === 'NDATA'存储到时序数据库(InfluxDB / Cassandra 等)
msg.command === 'NDEATH'通知 — “EDGE_00303 断开”

4. 使用 Sparkplug 时的注意事项​

  • 度量名称必须在 BIRTH 和 DATA 中保持一致(如果名称改变,则从下一次 BIRTH 开始生效)。
  • 如果多个客户端同时使用相同的 Group/Edge Node ID 发布,会导致 seq number 冲突并被标记为 Stale — 请确保 Edge ID 对每个网关唯一。
  • 云端发送 Rebirth Request 时,需要重新发布 NBIRTH — 库会自动处理,但如果自行实现,则需要实现该功能。

5. 后续步骤​