Meshtastic LoRa ハードウェア

MeshClaw

メッシュに AI を — インターネット不要

npm version license GitHub stars last commit openclaw compat

English | 中文 | 日本語 | Français | Português | Español

**MeshClaw** は、[OpenClaw](https://github.com/openclaw/openclaw) のチャンネルプラグインで、AI Agent と [Meshtastic](https://meshtastic.org/) の LoRa メッシュネットワークを橋渡しします。電波経由で AI 駆動のメッセージを送受信できます — 山中、外洋、あるいはインフラの届かない場所でも動作します。 ```mermaid flowchart LR subgraph mesh ["📻 LoRa Mesh Network"] N["Meshtastic Nodes"] end subgraph gw ["⚙️ OpenClaw Gateway"] P["Meshtastic Plugin"] AI["AI Agent"] end subgraph llm ["🧠 AI Backend"] CLOUD["Cloud (OpenAI, Anthropic, …)"] LOCAL["Local (Ollama, llama.cpp, …)"] end N -- "Serial (USB)" --> P N -- "HTTP (WiFi)" --> P N -. "MQTT (Broker)" .-> P P <--> AI AI -- "Cloud API" --> CLOUD AI -. "Private" .-> LOCAL ``` [ドキュメント][docs] · [ハードウェアガイド](#推奨ハードウェア) · [バグ報告][issues] · [機能提案][issues] ## 目次 - [機能](#機能) - [クイックスタート](#クイックスタート) - [ユースケース](#ユースケース) - [デモ](#デモ) - [推奨ハードウェア](#推奨ハードウェア) - [セットアップウィザード](#セットアップウィザード) - [設定](#1-トランスポート) - [トラブルシューティング](#2-lora-リージョン) - [ロードマップ](#3-ノード名) - [開発](#4-チャンネルアクセス-grouppolicy) - [貢献方法](#5-mention-必須) ## 機能 - **AI Agent 連携** — OpenClaw の AI Agent と Meshtastic の LoRa メッシュネットワークをつなぎます。クラウド AI はそのまま使えます。完全ローカル運用も可能です([ハードウェア](#推奨ハードウェア) を参照)。 - **DM とグループチャンネルのアクセス制御** — DM の許可リスト、チャンネル応答ルール、@mention ゲーティングに対応します。 - **マルチアカウント対応** — 複数の独立した接続を同時に実行できます。 - **堅牢なメッシュ通信** — 再接続とリトライを設定可能です。切断時も安全に復旧します。 ## クイックスタート 前提条件: 稼働中の [OpenClaw](https://github.com/openclaw/openclaw) インスタンス(Node.js 22+)。 ```bash # 1. Install plugin openclaw plugins install @seeed-studio/meshtastic # 2. Guided setup — walks you through transport, region, and access policy openclaw onboard # 3. Verify openclaw channels status --probe ``` たった 3 コマンドで、AI がメッシュに参加します。

OpenClaw セットアップウィザード

## ユースケース - **フィールドリサーチ** — 携帯電波圏外の現場から、研究者や調査チームが AI ナレッジベースに問い合わせます。 - **災害対応** — インフラ停止時でも、緊急対応チームに AI 補助の意思決定支援を提供します。 - **海事・航空** — 沖合や地上局から離れていても、船舶や航空機が AI との対話を維持します。 - **オフグリッドコミュニティ** — 僻地の集落でも、コミュニティメッシュネットワーク経由で AI ツールにアクセスできます。 - **プライバシー最優先の運用** — ローカル LLM と組み合わせ、データ主権が重要な現場でエアギャップ運用を実現します。 - **クロスチャンネルブリッジ** — オフグリッドな LoRa から送信し、AI の返信を Telegram、Discord、その他の OpenClaw チャンネルで受信できます。 ## デモ
https://github.com/user-attachments/assets/837062d9-a5bb-4e0a-b7cf-298e4bdf2f7c
Fallback: [media/demo.mp4](media/demo.mp4)

オフラインで情報を問い合わせ    クロスチャンネルブリッジ

左: LoRa 経由でオフラインのまま AI に問い合わせ  ·  右: クロスチャンネルブリッジ — メッシュから送って Telegram で受信

## 推奨ハードウェア

Seeed XIAO モジュール搭載 Meshtastic デバイス

| デバイス | 用途 | リンク | | ----------------------------- | ---------------------------------- | ----------------- | | XIAO ESP32S3 + Wio-SX1262 kit | エントリ向け開発 | [購入][hw-xiao] | | Wio Tracker L1 Pro | ポータブルなフィールドゲートウェイ | [購入][hw-wio] | | SenseCAP Card Tracker T1000-E | コンパクトなトラッカー | [購入][hw-sensecap] | > **ゲートウェイホスト: [reComputer R1024][hw-r1024]** — Mac Mini は不要です。reComputer R1024(約 $189、約 5 W)はファンレスの産業グレードエッジコンピュータで、OpenClaw を 24 時間 365 日稼働できます。PoE 給電、DIN レール取り付け対応、デュアル Ethernet と オプションの LoRa/4G モジュールを搭載 — フィールドで常時稼働するゲートウェイに最適です。[はじめかたガイド →][wiki-openclaw-recomputer] > 任意: 完全オフラインの AI スタック — クラウド依存をゼロにしたい場合は、[reComputer J series][hw-recomputer] でローカル LLM(Ollama、llama.cpp など)を動かしてください。無線、ゲートウェイ、推論まで、すべてが自前のハードウェア上で完結します。API キーは不要で、データはネットワーク外に出ません。 ハードウェアがなくても大丈夫です。MQTT トランスポートなら broker 経由で接続でき、ローカルデバイスは不要です。 Meshtastic 互換デバイスなら何でも使えます。 ## セットアップウィザード `openclaw onboard` を実行すると、対話式ウィザードが起動し、順を追って設定できます。各ステップの意味と選び方を下記にまとめます。 ### 1. トランスポート ゲートウェイが Meshtastic メッシュに接続する方法です。 | オプション | 説明 | 必要なもの | | ------------------- | ------------------------------------------------------------- | ------------------------------------------------ | | **Serial** (USB) | ローカルデバイスに USB で直接接続します。利用可能なポートを自動検出します。 | Meshtastic デバイスを USB 接続 | | **HTTP** (WiFi) | ローカルネットワーク越しにデバイスへ接続します。 | デバイスの IP またはホスト名(例: `meshtastic.local`) | | **MQTT** (broker) | MQTT broker 経由でメッシュに接続します。ローカルハードウェアは不要です。 | broker のアドレス、認証情報、購読トピック | ### 2. LoRa リージョン > Serial と HTTP のみ。MQTT は購読トピックからリージョンを導きます。 デバイスの無線周波数リージョンを設定します。各国の法規とメッシュ内の他ノードに合わせる必要があります。よく使う選択肢: | 地域 | 周波数 | | -------- | ------------------- | | `US` | 902–928 MHz | | `EU_868` | 869 MHz | | `CN` | 470–510 MHz | | `JP` | 920 MHz | | `UNSET` | デバイス既定を維持 | 全一覧は [Meshtastic region docs](https://meshtastic.org/docs/getting-started/initial-config/#lora) を参照してください。 ### 3. ノード名 メッシュ上でのデバイス表示名です。グループチャンネルでの「@mention トリガー」にも使われます。他のユーザーは `@OpenClaw` のように送ってボットに話しかけます。 - **Serial / HTTP**: 任意です。空のままなら接続されたデバイスから自動検出します。 - **MQTT**: 必須です。物理デバイスがないため名前を取得できません。 ### 4. チャンネルアクセス (`groupPolicy`) メッシュのグループチャンネル(例: LongFast、Emergency)でボットが返信するか、どのように返信するかを制御します。 | ポリシー | 動作 | | -------------------- | ------------------------------------------------------------- | | `disabled` (既定) | すべてのグループチャンネルを無視します。DM のみ処理します。 | | `open` | メッシュ上の「すべての」チャンネルで返信します。 | | `allowlist` | 指定したチャンネルのみに返信します。プロンプトに従ってチャンネル名(カンマ区切り、例: `LongFast, Emergency`)を入力します。`*` はワイルドカードとして全一致に使えます。 | ### 5. @mention 必須 > チャンネルアクセスが有効(`disabled` 以外)のときのみ表示されます。 有効にすると(デフォルト: はい)、グループチャンネルでは誰かがノード名をメンションしたときだけボットが返信します(例: `@OpenClaw how's the weather?`)。これにより、チャンネル内のすべてのメッセージに反応するのを防ぎます。 無効にすると、許可されたチャンネル内の「すべて」のメッセージに返信します。 ### 6. DM アクセスポリシー (`dmPolicy`) ボットに **ダイレクトメッセージ** を送れる相手を制御します。 | ポリシー | 動作 | | ------------------- | ------------------------------------------------------------- | | `pairing` (既定) | 新しい送信者はペアリング要求が発生し、許可されるまでチャットできません。 | | `open` | メッシュ上の誰でも自由に DM できます。 | | `allowlist` | `allowFrom` に記載されたノードのみ DM を許可します。その他は無視します。 | ### 7. DM 許可リスト (`allowFrom`) > `dmPolicy` が `allowlist` のとき、またはウィザードが必要と判断したときに表示されます。 DM を送信できる Meshtastic User ID のリストです。形式: `!aabbccdd`(16 進 User ID)。複数はカンマ区切りです。

### 8. アカウント表示名 > マルチアカウント構成のときのみ表示されます。任意です。 各アカウントに読みやすい表示名を割り当てます。たとえば ID が `home` のアカウントに「Home Station」といった名前を付けられます。省略すると生のアカウント ID をそのまま使います。見た目だけの設定で、機能には影響しません。 ## 設定 ガイド付きセットアップ(`openclaw onboard`)で以下の設定はすべてカバーします。手動で設定する場合は `openclaw config edit` で編集します。 ### Serial (USB) ```yaml channels: meshtastic: transport: serial serialPort: /dev/ttyUSB0 nodeName: OpenClaw ``` ### HTTP (WiFi) ```yaml channels: meshtastic: transport: http httpAddress: meshtastic.local nodeName: OpenClaw ``` ### MQTT (broker) ```yaml channels: meshtastic: transport: mqtt nodeName: OpenClaw mqtt: broker: mqtt.meshtastic.org username: meshdev password: large4cats topic: "msh/US/2/json/#" ``` ### マルチアカウント ```yaml channels: meshtastic: accounts: home: transport: serial serialPort: /dev/ttyUSB0 remote: transport: mqtt mqtt: broker: mqtt.meshtastic.org topic: "msh/US/2/json/#" ```
全オプションリファレンス | キー | 型 | 既定値 | 備考 | | ------------------- | ------------------------------- | --------------------- | ------------------------------------------------------------- | | `transport` | `serial \| http \| mqtt` | `serial` | | | `serialPort` | `string` | — | Serial で必須 | | `httpAddress` | `string` | `meshtastic.local` | HTTP で必須 | | `httpTls` | `boolean` | `false` | | | `mqtt.broker` | `string` | `mqtt.meshtastic.org` | | | `mqtt.port` | `number` | `1883` | | | `mqtt.username` | `string` | `meshdev` | | | `mqtt.password` | `string` | `large4cats` | | | `mqtt.topic` | `string` | `msh/US/2/json/#` | 購読トピック | | `mqtt.publishTopic` | `string` | derived | | | `mqtt.tls` | `boolean` | `false` | | | `region` | enum | `UNSET` | `US`, `EU_868`, `CN`, `JP`, `ANZ`, `KR`, `TW`, `RU`, `IN`, `NZ_865`, `TH`, `EU_433`, `UA_433`, `UA_868`, `MY_433`, `MY_919`, `SG_923`, `LORA_24`。Serial/HTTP のみ。 | | `nodeName` | `string` | auto-detect | 表示名兼 @mention トリガー。MQTT では必須。 | | `dmPolicy` | `open \| pairing \| allowlist` | `pairing` | 誰が DM を送れるか。詳しくは [DM アクセスポリシー](#6-dm-アクセスポリシー-dmpolicy)。 | | `allowFrom` | `string[]` | — | DM 許可リストのノード ID。例: `["!aabbccdd"]` | | `groupPolicy` | `open \| allowlist \| disabled` | `disabled` | グループチャンネルでの応答ポリシー。詳しくは [チャンネルアクセス](#4-チャンネルアクセス-grouppolicy)。 | | `channels` | `Record` | — | チャンネル単位の上書き: `requireMention`, `allowFrom`, `tools` |
環境変数による上書き これらは既定アカウントの設定を上書きします(名前付きアカウントでは YAML が優先されます)。 | 環境変数 | 対応する設定キー | | ----------------------- | -------------------- | | `MESHTASTIC_TRANSPORT` | `transport` | | `MESHTASTIC_SERIAL_PORT`| `serialPort` | | `MESHTASTIC_HTTP_ADDRESS` | `httpAddress` | | `MESHTASTIC_MQTT_BROKER` | `mqtt.broker` | | `MESHTASTIC_MQTT_TOPIC` | `mqtt.topic` |
## トラブルシューティング | 症状 | 確認事項 | | --------------------- | ------------------------------------------------------------ | | Serial に接続できない | デバイスパスは正しいですか?ホストにアクセス権がありますか? | | HTTP に接続できない | `httpAddress` に到達できますか?`httpTls` はデバイス設定と一致していますか? | | MQTT を受信しない | `mqtt.topic` のリージョンは正しいですか?broker の認証情報は有効ですか? | | DM に返信がない | `dmPolicy` と `allowFrom` は設定済みですか?[DM アクセスポリシー](#6-dm-アクセスポリシー-dmpolicy) を参照してください。 | | グループで返信がない | `groupPolicy` は有効ですか?許可リストにチャンネルがありますか?@mention が必須では?[チャンネルアクセス](#4-チャンネルアクセス-grouppolicy) を参照してください。 | バグを見つけましたか?トランスポート種別、設定(秘密情報は除く)、そして `openclaw channels status --probe` の出力を添えて [issue][issues] を作成してください。 ## ロードマップ リアルタイムのノードデータ(GPS 位置、環境センサー、デバイス状態)を OpenClaw のコンテキストに取り込み、ユーザーの問い合わせを待たずに AI がメッシュネットワークの健全性を監視し、能動的にアラートを配信できるようにする計画です。 ## 開発 ```bash git clone https://github.com/Seeed-Solution/MeshClaw.git cd MeshClaw npm install openclaw plugins install -l ./MeshClaw ``` ビルド手順は不要です — OpenClaw が TypeScript のソースを直接読み込みます。`openclaw channels status --probe` で確認してください。 ## 貢献方法 あらゆる形の貢献を歓迎します。 - **バグ報告・機能要望** — [issue を作成][issues] - **コード貢献** — リポジトリを fork し、ブランチを切って PR を送ってください。既存の TypeScript のコーディング規約に合わせてください。 - **ドキュメント・翻訳** — ドキュメントの改善や新しい言語の追加も大歓迎です。 ローカル環境のセットアップは [開発](#開発) を参照してください。 --- MeshClaw が役立ったと感じたら、スター ⭐ をお願いします。プロジェクトを見つけてもらいやすくなります。 [docs]: https://meshtastic.org/docs/ [issues]: https://github.com/Seeed-Solution/MeshClaw/issues [hw-xiao]: https://www.seeedstudio.com/Wio-SX1262-with-XIAO-ESP32S3-p-5982.html [hw-wio]: https://www.seeedstudio.com/Wio-Tracker-L1-Pro-p-6454.html [hw-sensecap]: https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-E-for-Meshtastic-p-5913.html [hw-recomputer]: https://www.seeedstudio.com/reComputer-J4012-p-5586.html [hw-r1024]: https://www.seeedstudio.com/reComputer-R1024-10-p-5923.html [wiki-openclaw-recomputer]: https://wiki.seeedstudio.com/getting_started_with_openclaw_on_recomputer/