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

Sparkplug B ノードを詳しく使う

node-red-contrib-sparkplug-bnode-red-contrib-mqtt-sparkplug-plus といったノードセットがあります。同じ MQTT ブローカー上で動作しますが、Sparkplug B スペック(spBv1.0/... トピック + protobuf payload + birth/death シーケンス)を自動的に処理してくれます。

ゲートウェイは Sparkplug B 送信 を独自コンポーネントとしてすでに実装していますが(advanced/sparkplug 参照)、Node-RED で 受信/監視 または 外部デバイスの模擬 を作る場合に使用します。

2026.05+ ボックスの broker 接続情報
  • Broker: 127.0.0.1:1883 (HiveMQ、同一コンテナ内)
  • Username / Password: app.propertiesmqtt.server.user / mqtt.server.password — 量産ボックスは install.sh がボックスごとにランダム生成(/etc/kopens/credentials.txt で確認)。 HiveMQ auth.properties は entrypoint が起動ごとに app.properties と自動 sync。
  • 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 ID1つのゲートウェイ/デバイスの識別子
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 を発行し、ノードが stop/crash すると NDEATH が LWT として発行されます。


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

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

sparkplug client in ノード1つで 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. 次のステップ