MQTT Client DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

MQTT Client DAT がブローカーに接続してトピックを発行・購読する図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – MQTTブローカーと送受信

MQTT Client DATは、MQTT ブローカーに接続してトピック単位でメッセージを発行・購読する DATです。MQTT は IoT 用途で広く使われる軽量な pub/sub プロトコルで、HTTP よりも低オーバーヘッドかつ複数端末との非同期メッセージ送受信に向いています。TouchDesigner からセンサー機器やクラウド IoT サービスへ接続するための基本 OP です。

主な用途 🎯

  • IoT センサー値の受信として、ESP32 / Raspberry Pi などのデバイスがブローカーへ発行する温度・加速度・人感などのデータを TouchDesigner 側で購読
  • 複数端末間のイベント同期として、ライブ会場やインスタレーションで複数の TouchDesigner インスタンスや外部機器の状態をトピック経由で共有
  • 軽量プロトコルでの双方向通信として、HTTP より低オーバーヘッドで pub/sub 型のメッセージングを実装
  • 遠隔操作 UI とのブリッジとして、スマートフォンアプリ・Node-RED などからの操作コマンドをトピック単位で受信して映像演出に反映
  • クラウド連携と状態通知として、AWS IoT Core などの MQTT 互換クラウドに接続し、現場の状態を外部システムへ発信

データフロー 🔄

入力: MQTT ブローカーから配信される購読トピックのメッセージ

MQTT Client DAT が TLS/TCP 接続でメッセージを受信しテーブルに蓄積

出力: 受信メッセージ一覧テーブル (トピック名 / ペイロード / QoS 等) + Python コールバック

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Connect Page 🔌

Active .active 🟢

ブローカーへの接続を有効化するスイッチ:

  • Active: active (接続の有効化) — オンにすると指定したブローカーへの接続を確立します。オフにすると接続を切断します

Network Address .netaddress 🌐

接続先ブローカーのアドレス指定:

  • Network Address: netaddress (接続先アドレス) — 接続するブローカーのアドレス。<プロトコル>://<ホスト>:<ポート> の形式で指定します。プロトコル URI は tcp / ssl / ws / wss が利用可能

Specify ID .specifyid 🆔

クライアント ID の指定方法:

  • Specify ID: specifyid (ID 指定の有効化) — オンにすると User Client ID でクライアント名を指定できます。オフのときは接続ごとに自動で一意なクライアント名が生成されます
  • User Client ID: usercid (ユーザー指定のクライアント名) — Specify ID オン時に使用されるクライアント名

Keep Alive Interval .keepalive 💓

接続維持のためのキープアライブ間隔 (秒):

  • Keep Alive Interval: keepalive (キープアライブ間隔、秒) — 通信が無い状態を許容する最大秒数。この時間データ送信が無いと軽量な ping メッセージをサーバへ送ります。0 にすると ping を送信しません

Max in Flight .maxinflight 🔢

同時送受信可能なメッセージ数の上限:

  • Max in Flight: maxinflight (同時送受信メッセージ数) — 同時に処理中のメッセージ数の上限

Clean Session .cleansession 🧹

セッション状態 (サブスクリプション / 送達情報) の保持設定:

  • Clean Session: cleansession (セッション状態の保持) — Specify ID オン時、サーバが当該クライアント ID に紐づくサブスクリプションや送達状態を保持するかどうかを制御します

Verify Certificate .verifycert 🔐

TLS サーバ証明書の検証スイッチ:

  • Verify Certificate: verifycert (TLS 証明書の検証) — オンにすると TLS (Transport Layer Security) のサーバ証明書をブローカーに対して検証します

Username .username 👤

ブローカー認証のためのユーザー名:

  • Username: username (認証用ユーザー名) — ブローカーが認証を要求する場合に指定するユーザー名。MQTT v3.1 以降のブローカーはユーザー名・パスワード認証に対応します

Password .password 🔑

ブローカー認証のためのパスワード:

  • Password: password (認証用パスワード) — ブローカーが認証を要求する場合に指定するパスワード

Reconnect .reconnect 🔄

ブローカーへ再接続するパルス:

  • Reconnect: reconnect (再接続のパルス) — MQTT ブローカーへの再接続を試みます。ネットワーク復旧後の手動再接続に使用

Received Data Page 📥

Callbacks DAT .callbacks 🔔

接続イベント / 受信メッセージで呼び出されるスクリプト DAT のパス:

  • Callbacks DAT: callbacks (コールバックスクリプト) — 接続が確立・切断されたとき、および購読しているトピックでメッセージが配信されたときに呼ばれる関数を定義した DAT へのパス。使用方法は mqttclientDAT_Class を参照

Execute from .executeloc 📍

スクリプトの実行コンテキストの決定

項目 内部名 説明
Current Node .current この DAT 自身を起点としてスクリプトを実行
Specified Operator .specified From Operator で指定した OP を起点としてスクリプトを実行

From Operator .fromop 🎯

スクリプト実行の起点となる OP パス:

  • From Operator: fromop (実行起点 OP) — Execute fromSpecified Operator のとき、状態変化トリガと実行起点パスとして使用される OP のパス

Clamp Output .clamp 📏

受信メッセージ保持件数の制限スイッチ:

  • Clamp Output: clamp (出力件数の制限) — オンにすると受信メッセージのテーブル行数を Maximum Lines の値で制限します。オフのときは無制限。デフォルトは 100 行で制限

Maximum Lines .maxlines 🔢

保持する受信メッセージ数の上限:

  • Maximum Lines: maxlines (最大行数) — 保持する受信メッセージ数の上限。超過した古いメッセージは順次削除されます

Clear Output .clear 🗑️

受信メッセージテーブルのクリアパルス:

  • Clear Output: clear (クリアパルス) — 見出し行を残してすべての受信メッセージを削除します。Python では op("opname").par.clear.pulse()

Bytes Column .bytes 🔣

生バイト列を別カラムで出力するスイッチ:

  • Bytes Column: bytes (バイト列カラムの出力) — オンにすると受信メッセージの生バイト列を独立したカラムとして出力します。バイナリペイロードの処理に便利

Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: IoTセンサー受信 🌡️

ESP32 (sensor) → MQTT Broker → MQTT Client DAT (subscribe) → Select DAT → CHOP Execute → Render

ESP32 / Raspberry Pi などの IoT デバイスが温度・加速度センサーの値を MQTT ブローカーへ発行し、TouchDesigner が MQTT Client DAT で同じトピックを購読してテーブルに受信、映像演出のパラメータへ反映する基本構成です。

  1. 公開ブローカー (例: test.mosquitto.org:1883) または自前ブローカーを準備
  2. MQTT Client DAT の Network Addresstcp://<ホスト>:1883 を入力し、Active をオン
  3. Callbacks DAT に Python スクリプトを書き、onMessage で対象トピックの購読 (dat.subscribe("sensor/temp")) と受信値の取得を実装
  4. 受信したセンサー値を Select DAT で抽出し、CHOP Execute や DAT to CHOP 経由でレンダラーのパラメータに供給
  5. 現場でブローカーが立ち上がっていればケーブル接続不要で複数センサーのデータを統合できます

Example 2: 複数TD間で同期 🔁

TD-A (publisher) → MQTT Broker → MQTT Client DAT (subscribe) → TD-B / TD-C

ライブ会場で複数台の TouchDesigner を走らせる構成で、マスター機がシーン切替などのコマンドを MQTT ブローカーへ発行し、各サブ機が同じトピックを購読して同時に演出を切り替える同期パターンです。

  1. 会場 LAN 上に MQTT ブローカー (Mosquitto 等) を 1 台用意
  2. マスター TD は Python から dat.publish("show/cue", "scene_2") でコマンドを発行
  3. 各サブ TD は onMessage コールバックでトピックを購読し、受信したペイロードに応じて Switch TOP / COMP Active を切り替え
  4. 公演中に再接続が必要になったら Reconnect パルスで自動復帰
  5. OSC と比べて到達保証 (QoS) と再送が組み込まれているため演出ミスのリスクが下がります

Example 3: クラウドIoT連携 ☁️

MQTT Client DAT (ssl + username/password) → Cloud IoT Broker → 外部システム

AWS IoT Core や HiveMQ Cloud などのマネージド MQTT ブローカーに TLS 接続して、現場の状態 (来場者数・センサー値) を外部のダッシュボードや Slack 通知へ橋渡しする運用例です。

  1. クラウドサービスでブローカーエンドポイントとユーザー名・パスワードを発行
  2. MQTT Client DAT の Network Addressssl://<エンドポイント>:8883 を指定
  3. Verify Certificate をオンにし、Username / Password に認証情報を入力
  4. 現場側の TD から状態トピック (venue/<id>/status) を一定間隔で発行
  5. 外部側 (Node-RED / Lambda 等) で同トピックを購読し可視化・通知へ橋渡し

関連オペレータ 🔗

類似機能OP 🔍

  • OSC In DAT — OSC プロトコルでメッセージを受信する pub/sub 風の DAT
  • OSC Out DAT — OSC プロトコルでメッセージを送信する DAT
  • Web Client DAT — HTTP/HTTPS でリクエストを送信するクライアント系 DAT
  • TCP/IP DAT — 生の TCP/IP ソケットでテキストデータを送受信する DAT
  • UDP In DAT — UDP でテキストメッセージを受信する DAT

組み合わせ推奨OP 🔄

  • DAT Execute DAT — 受信テーブルの更新を検知して Python スクリプトを起動
  • Select DAT — 受信メッセージから対象トピック・列だけを抽出
  • Convert DAT — JSON 形式のペイロードを CSV / Table 形式に整形
  • JSON DAT — JSON ペイロードを構造化データとして解析
  • CHOP Execute DAT — 受信値の変化に応じて Python スクリプトを起動
  • Info CHOP — MQTT Client DAT 自身の num_rows / num_cols 等のメタ情報取得

前処理・後処理DAT 🎯


Info CHOP情報 📊

MQTT Client DAT は Info CHOP による詳細情報取得に対応しています。num_rows / num_cols でテーブル規模、total_cooks / cook_time で実行統計を参照できます。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

DAT 共通情報 📋

  • num_rows: 現在テーブルが保持している受信メッセージの行数
  • num_cols: 出力テーブルの列数 (トピック / ペイロード / QoS など)
  • total_cooks: DAT がクックされた累計回数
  • cook_time: 直近のクック処理にかかった時間 (ミリ秒)

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: ブローカーに接続できない
✅ Solution:

  • Network Address がプロトコル付き (tcp://host:1883 等) になっているか確認
  • ファイアウォール / セキュリティソフトが 1883 / 8883 等の MQTT ポートを遮断していないか確認
  • 外部ブローカーへの接続は社内プロキシ・VPN の影響を受けることがあるため、別ネットワーク (テザリング等) で切り分け

❌ Problem: TLS 接続 (ssl://) で接続が失敗する
✅ Solution:

  • Verify Certificate をオンにしている場合、ブローカー側の証明書が有効か、ホスト名が証明書の CN / SAN と一致しているか確認
  • テスト環境で自己署名証明書を使う場合は Verify Certificate を一時的にオフにして切り分け
  • Username / Password が正しく設定され、ブローカー側のアクセス権 (ACL) でトピック購読が許可されているか確認

❌ Problem: メッセージは届くがコールバックが呼ばれない
✅ Solution:

  • Callbacks DAT に指定した Text DAT のパスと Language (Python) を確認
  • mqttclientDAT_Class のドキュメントに沿って onMessage / onConnect 等の関数名が正しいか確認
  • Text DAT に構文エラーが無いか textport (Alt + T) で出力を確認

❌ Problem: 古いメッセージが消えてしまい履歴を追えない
✅ Solution:

  • Clamp Output をオフにするか Maximum Lines を十分大きな値に増やす
  • 履歴が長期に必要な場合は Table DAT へ Python コールバックで append して保存
  • ファイル保存が必要な場合は onMessage 内で CSV / JSON 形式でディスクへ書き出し

参考資料 📚

その他 🔗

公式リソース 📖

関連記事 🔗

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました