Sparkplug B ノードを詳しく使う
node-red-contrib-sparkplug-b や node-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.propertiesのmqtt.server.user/mqtt.server.password— 量産ボックスは install.sh がボックスごとにランダム生成(/etc/kopens/credentials.txtで確認)。 HiveMQauth.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 ID | 1つのゲートウェイ/デバイスの識別子 |
| 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 ID | Plant1 |
| Edge Node ID | EDGE_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. 次のステップ
- IIoT 例 — Sparkplug B 送信
- ゲートウェイ自体の Sparkplug コンポーネント: Sparkplug B(高度)