MQTT ノード
ゲートウェイは、自前の HiveMQ ブローカーを同一マシン上で起動しています(デフォルトポート 1883、TLS 1884)。外部 SCADA / クラウド IoT と接続する際の標準パターンです。
2026.05+ ボックスの broker 接続情報
- Broker URL:
tcp://127.0.0.1:1883(plain) /ssl://127.0.0.1:1884(TLS) - Username / Password:
app.propertiesのmqtt.server.user/mqtt.server.password— 量産ボックスはボックスごとにランダム(/etc/kopens/credentials.txtで確認)。entrypoint が HiveMQ auth.properties を自動同期します。 - MQTT 5 対応 (HiveMQ 2025.4): retained / will / session expiry / shared subscriptions のフル機能をサポート。
- Sparkplug B とブローカーを共有 —
spBv1.0/#を同時に購読してモニタリングが可能。
1. ノードの種類
| ノード | 用途 |
|---|---|
mqtt in | トピックを購読 — メッセージが届くたびにフローが開始される |
mqtt out | メッセージを発行 (publish) |
2. Broker(サーバー)設定 — 一度作成すればすべてのノードで共有
mqtt in または mqtt out ノードをダブルクリック → Server 欄の右側にある鉛筆アイコン → 新しいブローカー設定。
| タブ | 項目 | 推奨値 |
|---|---|---|
| Connection | Server | 127.0.0.1 (ゲートウェイ自前の HiveMQ) または外部ブローカー IP |
| Port | 1883 (TLS の場合は 8883) | |
| Client ID | 空欄の場合は自動生成。運用環境では固定 ID を推奨 (edge-<gateway-id>-flow1 など) | |
| Keep alive | 60 秒を推奨 | |
| Use TLS | 外部クラウド接続時に ON | |
| Security | Username/Password | ブローカー認証を使用する場合 |
| Messages | LWT (Last Will) | edge/<id>/status トピック + ペイロード offline — ゲートウェイが突然停止した際に自動通知 |
| Messages | Birth | 接続時に edge/<id>/status へ online を retain 発行 |
3. 発行(mqtt out) — シナリオ: すべてのタグ値をクラウドへ
inject (1s) ──▶ 태그값 읽기 ──▶ change (topic 만들기) ──▶ mqtt out
change ノード:
| 動作 | Property | To |
|---|---|---|
| Set | msg.topic | plant/${msg.payload.tag_id}/value (J-Expression ${...} または mustache) |
| Set | msg.payload | { "ts": $millis(), "v": msg.payload.value, "q": msg.payload.value_read_status } (JSONata) |
mqtt out ノード設定:
| 項目 | 値 |
|---|---|
| Topic | (空欄 → msg.topic を使用) |
| QoS | 1 (最低1回は到達を保証) — 通常のテレメトリは 0 でも OK |
| Retain | false (リアルタイム値) — 状態性 データであれば true |
4. 購読(mqtt in) — シナリオ: 外部から届いた命令でタグに書き込み
mqtt in (plant/+/cmd) ──▶ change (tag_id/value 추출) ──▶ 태그값 쓰기
mqtt in:
| 項目 | 値 |
|---|---|
| Topic | plant/+/cmd (ワイルドカード + = 1段階) |
| QoS | 1 |
| Output | parsed JSON object — ペイロードが自動的にオブジェクト化されます |
change:
| 動作 | Property | To |
|---|---|---|
| Set | msg.tag_id | msg.topic.split('/')[1] (JSONata) |
| Move | msg.payload.value → msg.payload | (そのまま書き込みノードへ投入) |
これにより、外部 SCADA が plant/TAG_VALVE_01/cmd トピックに {"value":"1"} だけを publish すれば、ゲートウェイが PLC にその値を書き込みます。
5. よくある落とし穴
| 症状 | 原因 / 解決策 |
|---|---|
| メッセージが一度も届かない | トピックワイルドカード(#/+)のタイポ。MQTT Explorer などの別ツールでトピックツリーを確認 |
| クライアントが頻繁に切断される | Client ID の衝突(他のクライアントが同じ ID で接続) — 固有 ID を付与 |
| Retain メッセージが無限に蓄積される | 同じトピックに毎回 retain true を publish。retain は状態性 (online/offline, 最終アラーム) にのみ使用 |
| メッセージの順序がおかしい | QoS 0 の限界。順序が重要な場合は QoS 1 以上を使用 |
6. 次のステップ
- OPC-UA ノード詳細 — 外部 OPC-UA サーバーとの通信
- Sparkplug B ノード詳細 — Sparkplug 仕様の自動処理
- IIoT 例題集