MQTT
MQTT は、Meshtastic のメッシュネットワークをインターネットに橋渡しし、無線の到達範囲を超えた長距離通信を可能にします。
概要
MQTT モジュールは、ノードを MQTT サーバーに接続し、次のことを可能にします:
- インターネット経由で、物理的に異なるメッシュ上のノードにメッセージを届ける
- ホームオートメーションや監視システムとの連携
- ノードの位置を公開の Meshtastic マップに公開する
- ログ記録や通知のためのカスタムデータパイプライン
仕組み
[自分のノード] → 無線 → [WiFi 付きゲートウェイノード] → MQTT サーバー → [リモートゲートウェイ] → 無線 → [リモートノード]
インターネットに接続されたゲートウェイノード(WiFi または Ethernet)が、メッシュのメッセージを MQTT トピックに公開します。 同じトピックを購読しているリモートのゲートウェイが、それらのメッセージを自分のローカルメッシュに取り込みます。
設定
MQTT を有効にする
- 「設定 → モジュール設定 → MQTT」に移動します。
- MQTT モジュールを有効にします。
- サーバーへの接続を設定します:

| 設定項目 | 説明 | デフォルト |
|---|---|---|
| サーバーアドレス | MQTT サーバーのホスト名 | mqtt.meshtastic.org |
| ユーザー名 | サーバーの認証 | meshdev |
| パスワード | サーバーの認証 | large4cats |
| ルートトピック | メッセージのベーストピック | msh |
| 暗号化 | MQTT ペイロードを暗号化 | 有効 |
| ⚠️ 非推奨:JSON パケットのサポートはファームウェアから削除されました。このフィールドは無視されます | 無効 | |
| TLS | サーバーへのセキュアな接続 | 無効 |
| マップ報告 | 公開マップに位置を報告 | 無効 |
このスマートフォンでの MQTT プロキシ
ノード自体がインターネットに接続できない場合、接続中のスマートフォンを MQTT ゲートウェイとして使えます。モジュール設定で「MQTT」と「クライアントへのプロキシを有効化」を有効にすると、アプリがスマートフォンのインターネット接続を通じて、無線機とサーバーの間で MQTT の通信を中継します。
MQTT 設定画面の上部にある「このスマートフォンでの MQTT プロキシ」トグルは、この中継が現在動作しているかどうかを示し、デバイスの MQTT 設定を編集して保存し直すことなく、すぐに停止(または再開)できます。
デフォルトの Meshtastic サーバー
コミュニティが mqtt.meshtastic.org で公開サーバーを運用しています。 これは一般的な利用やテストを目的としています。
ℹ️ 注意:
mqtt.meshtastic.orgへの接続は、TLS のトグルがオフでも常に TLS(ポート 8883)を使用します。 それ以外のサーバーでは、TLS は有効にした場合にのみ使用されます(TLS ありはポート 8883、なしは 1883)。
🔒 プライバシー: 公開サーバー上のメッセージは、購読している誰もが読めます。 プライベートな通信には、必ずチャンネルの暗号化を使用してください。
プライベートサーバー
プライバシーと制御を高めるために、独自の MQTT サーバーを運用できます:
- Mosquitto(軽量、オープンソース)
- HiveMQ
- EMQX
適切な認証情報を設定して、ノードがプライベートサーバーに接続するよう構成します。
マップ報告
マップ報告を有効にすると、ノードは自分の位置を Meshtastic のコミュニティマップに公開します:
- meshmap.net や、同様のコミュニティマップサービスで表示されます
- 共有されるのは位置とノード情報のみです
- 位置を公開したくない場合は、これを無効にしてください
アップリンクとダウンリンク
| 方向 | 説明 |
|---|---|
| アップリンク | メッシュ → MQTT サーバーへのメッセージ |
| ダウンリンク | MQTT サーバー → メッシュへのメッセージ |
メッセージの流れと電波利用時間を制御するため、どの方向を有効にするかをチャンネルごとに設定します。
メッセージ形式
MQTT は protobuf のメッセージ形式を使用します:
| 形式 | 説明 | 用途 |
|---|---|---|
| Protobuf | バイナリの Meshtastic protobuf エンコード | ノード間のメッシュ橋渡し |
⚠️ 注意: JSON 出力のサポートはファームウェアから削除されました。
json_enabledの設定は、以前との互換性のためにアプリ上には表示されますが、現在のファームウェアバージョンには影響しません。
暗号化とプライバシー
階層化された暗号化モデルを理解する:
- チャンネルの暗号化は、MQTT の前にメッシュ上で行われます。 チャンネルに PSK が設定されている場合、MQTT ペイロードはすでに暗号化されています。サーバーや購読者には暗号文しか見えません。
- MQTT の暗号化(モジュールの設定)は、サーバーへの転送のために追加の暗号化レイヤーを加えます。 これはメタデータやルーティング情報を保護します。
- TLS はサーバーへの TCP 接続自体を暗号化し、ネットワークレベルの盗聴を防ぎます。
🔒 重要: デフォルトの公開チャンネルは、よく知られた鍵を使用しています。 デフォルトチャンネルで MQTT 経由で送信されるメッセージは、実質的に暗号化されていません。誰でも解読できます。 プライベートな通信には、必ずカスタムの PSK を使用してください。
ベストプラクティス
- MQTT に橋渡しするチャンネルでは、チャンネルレベルの暗号化(PSK)を使用します
- インターネットに接続できないノードでは MQTT を有効にしないでください(バッファリングしてメモリを浪費します)
- 機密性の高い運用にはプライベートサーバーを使用します
- 混雑した MQTT トピックからメッセージをダウンリンクする際は、電波利用時間に注意してください。ダウンリンクされたメッセージはすべて、ローカルメッシュの無線の電波利用時間を消費します
- メッセージを送り返さず、リモートでメッシュを監視するだけでよい場合は、アップリンクのみを有効にすることを検討してください
トラブルシューティング
MQTT が接続できない
- WiFi を確認: ゲートウェイノードには、有効なインターネット接続(WiFi または Ethernet)が必要です。 MQTT は LoRa の無線リンク自体では動作しません。
- 認証情報を確認: ユーザー名やパスワードが正しくないと、ほとんどのサーバーでは何も表示されずに失敗します。 末尾のスペースがないか、よく確認してください。
- ファイアウォール: ポート 1883(MQTT)または 8883(MQTT+TLS)が開いている必要があります。 一部のネットワークは、標準外のポートをブロックします。
- DNS 解決: カスタムのサーバーホスト名を使う場合は、ノードがそれを解決できるか確認してください。 サーバーの IP アドレスを直接試してみてください。
メッセージが橋渡しされない
- アップリンク/ダウンリンクの設定を確認: アップリンクのみが有効な場合、メッセージはメッシュから MQTT へ流れますが、戻ってきません。 受信側のゲートウェイでダウンリンクを有効にしてください。
- チャンネルの不一致: 両方のゲートウェイが、同じ PSK を持つ同じチャンネルを共有している必要があります。 不一致の場合、メッセージは異なる鍵で暗号化され、判読できないデータとして表示されます。
- トピックの不一致: 両方のゲートウェイが同じルートトピックを使用しているか確認してください。 デフォルトの
mshは公開サーバーで機能します。
関連トピック
- 設定:モジュールと管理:MQTT モジュールの設定リファレンス
- メッセージとチャンネル:チャンネルの暗号化と PSK の設定
- MQTT 連携ガイド:meshtastic.org にある詳細な MQTT ドキュメント