
概要 📖 – 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 コールバック
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 fromがSpecified 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 Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
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 で同じトピックを購読してテーブルに受信、映像演出のパラメータへ反映する基本構成です。
- 公開ブローカー (例:
test.mosquitto.org:1883) または自前ブローカーを準備 - MQTT Client DAT の
Network Addressにtcp://<ホスト>:1883を入力し、Activeをオン - Callbacks DAT に Python スクリプトを書き、
onMessageで対象トピックの購読 (dat.subscribe("sensor/temp")) と受信値の取得を実装 - 受信したセンサー値を Select DAT で抽出し、CHOP Execute や DAT to CHOP 経由でレンダラーのパラメータに供給
- 現場でブローカーが立ち上がっていればケーブル接続不要で複数センサーのデータを統合できます
Example 2: 複数TD間で同期 🔁
TD-A (publisher) → MQTT Broker → MQTT Client DAT (subscribe) → TD-B / TD-C
ライブ会場で複数台の TouchDesigner を走らせる構成で、マスター機がシーン切替などのコマンドを MQTT ブローカーへ発行し、各サブ機が同じトピックを購読して同時に演出を切り替える同期パターンです。
- 会場 LAN 上に MQTT ブローカー (Mosquitto 等) を 1 台用意
- マスター TD は Python から
dat.publish("show/cue", "scene_2")でコマンドを発行 - 各サブ TD は
onMessageコールバックでトピックを購読し、受信したペイロードに応じて Switch TOP / COMP Active を切り替え - 公演中に再接続が必要になったら
Reconnectパルスで自動復帰 - OSC と比べて到達保証 (QoS) と再送が組み込まれているため演出ミスのリスクが下がります
Example 3: クラウドIoT連携 ☁️
MQTT Client DAT (ssl + username/password) → Cloud IoT Broker → 外部システム
AWS IoT Core や HiveMQ Cloud などのマネージド MQTT ブローカーに TLS 接続して、現場の状態 (来場者数・センサー値) を外部のダッシュボードや Slack 通知へ橋渡しする運用例です。
- クラウドサービスでブローカーエンドポイントとユーザー名・パスワードを発行
- MQTT Client DAT の
Network Addressにssl://<エンドポイント>:8883を指定 Verify Certificateをオンにし、Username/Passwordに認証情報を入力- 現場側の TD から状態トピック (
venue/<id>/status) を一定間隔で発行 - 外部側 (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 形式でディスクへ書き出し
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – MQTT Client DAT
- TouchDesigner公式ドキュメント – MqttclientDAT Class (Python API)
- MQTT 関連オペレータ (Wiki)

