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で確認)。 HiveMQauth.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 ID | Plant1 |
| Edge Node ID | EDGE_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. 次のステップ
- IIoT 例 — Sparkplug B 送信
- ゲートウェイ自身の Sparkplug コンポーネント: Sparkplug B (上級)