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

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.propertiesmqtt.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 設定。

タブ項目推奨値
ConnectionServer127.0.0.1(ゲートウェイ自身の HiveMQ)または外部ブローカーの IP
Port1883(TLS 時は 8883)
Client ID空欄なら自動生成。運用環境では固定 ID を推奨(edge-<gateway-id>-flow1 など)
Keep alive60 秒を推奨
Use TLS外部クラウド接続時は ON
SecurityUsername/Passwordブローカー認証を使用する場合
MessagesLWT (Last Will)edge/<id>/status トピック + payload offline — ゲートウェイが突然停止した際に自動通知
MessagesBirth接続されたら edge/<id>/statusonline を retain 発行

3. 発行(mqtt out) — シナリオ: すべてのタグ値をクラウドへ

inject (1s) ──▶ 태그값 읽기 ──▶ change (topic 만들기) ──▶ mqtt out

change ノード:

動作PropertyTo
Setmsg.topicplant/${msg.payload.tag_id}/value(J-Expression ${...} または mustache)
Setmsg.payload{ "ts": $millis(), "v": msg.payload.value, "q": msg.payload.value_read_status } (JSONata)

mqtt out ノードの設定:

項目
Topic(空欄 → msg.topic を使用)
QoS1(1回の到達を保証) — 通常のテレメトリなら 0 でも OK
Retainfalse(リアルタイム値) — 状態性データであれば true

4. 購読(mqtt in) — シナリオ: 外部から来た指令でタグへ書き込み

mqtt in (plant/+/cmd) ──▶ change (tagId/value 추출) ──▶ 태그값 쓰기

mqtt in:

項目
Topicplant/+/cmd(ワイルドカード + = 1階層)
QoS1
Outputparsed JSON object — payload が自動的にオブジェクト化されます

change:

動作PropertyTo
Setmsg.tagIdmsg.topic.split('/')[1] (JSONata)
Movemsg.payload.valuemsg.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. 次のステップ