MQTTノードを詳しく使う
ゲートウェイは自身の HiveMQ ブローカーを同一マシン上で起動しています(default ポート 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— 量産 ボックスはボックスごとに random(/etc/kopens/credentials.txtで確認)。entrypoint が HiveMQ auth.properties を自動 sync します。 - MQTT 5 対応(HiveMQ 2025.4): retained / will / session expiry / shared subscriptions のフル機能。
- Sparkplug B と同じ broker を共有 — 同時に
spBv1.0/#を購読してモニタリング可能。
1. ノードの種類
| ノード | 用途 |
|---|---|
mqtt in | トピックを購読 — メッセージが到着するたびにフローが開始される |
mqtt out | メッセージを発行(publish) |
2. Broker(サーバー)設定 — 一度作れば全ノードで共有
mqtt in または mqtt out ノードをダブルクリック → Server 欄右側の鉛筆アイコン → 新しい broker 設定。
| タブ | 項目 | 推奨値 |
|---|---|---|
| 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 トピック + payload 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 (tagId/value 추출) ──▶ 태그값 쓰기
mqtt in:
| 項目 | 値 |
|---|---|
| Topic | plant/+/cmd(ワイルドカード + = 1階層) |
| QoS | 1 |
| Output | parsed JSON object — payload が自動的にオブジェクト化されます |
change:
| 動作 | Property | To |
|---|---|---|
| Set | msg.tagId | 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 事例集