メインコンテンツまでスキップ

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 は entrypoint が毎回起動時に app.properties と自動同期。
  • Group ID / Edge Node ID: 空にすると edge.site_id / edge.id を自動使用(例: SITE_00001 / EDGE_00303)
  • Sparkplug 3.0.0 spec 互換(NBIRTH seq=0、DDEATH/NDEATH bdSeq、Properties、alias オプション)

1. 核心理念​

用語意味
Group IDグループ(例: Plant1)
Edge Node IDゲートウェイ/デバイスごとの識別子
Device IDその下の個別機器 — 任意
Metricタグ 1 つに相当(Sparkplug のメトリック)
Birth (NBIRTH/DBIRTH)ノード/デバイスが自身のメトリック「全定義」を一括 publish — 購読者が即時同期
Data (NDATA/DDATA)通常時の値変更 — 変更されたメトリックのみ(delta)
Death (NDEATH/DDEATH)自身が生存中として LWT で登録したメッセージ — 切断されると自動発行

2. 基本発行フロー(Edge → Cloud)​

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(省略可 — Edge レベルで直接 publish)
Broker(上記 MQTT で作成した broker をそのまま再利用)

Birth/Death はノードが自動処理します — Deploy 時に NBIRTH を発行、ノードが停止/クラッシュすると NDEATH が LWT で発行されます。


3. 受信フロー(Cloud / 監視 → Edge 群のモニタリング)​

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'デバイスメタ DB 同期 — メトリックカタログ更新
msg.command === 'NDATA'InfluxDB / Cassandra などに時系列保存
msg.command === 'NDEATH'通知 — "EDGE_00303 切断"

4. Sparkplug 使用時の注意​

  • メトリック名は BIRTH と DATA で一致 させる必要があります(名前が変わると次の BIRTH から開始)。
  • 同じ Group/Edge Node ID で複数クライアントが同時に発行すると seq number が衝突し Stale 扱いになります — Edge ID はゲートウェイごとに一意に。
  • Cloud 側から Rebirth Request を送信すると NBIRTH を再発行する必要があります — ライブラリが自動処理しますが、直接作成する場合は実装が必要です。

5. 次のステップ​