mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
5.3 KiB
5.3 KiB
📡 MQTT チャンネル
PicoClaw は任意の MQTT クライアントをメッセージチャンネルとして使用できます。デバイスやサービスがブローカーにリクエストをパブリッシュし、PicoClaw がサブスクライブして処理し、レスポンスをパブリッシュして返します。
🚀 クイックスタート
1. ~/.picoclaw/config.json にチャンネルを追加:
{
"channel_list": {
"mqtt": {
"enabled": true,
"type": "mqtt",
"settings": {
"broker": "tcp://localhost:1883",
"agent_id": "assistant"
}
}
}
}
2. ゲートウェイを起動:
picoclaw gateway
3. 任意の MQTT クライアントからメッセージを送信:
mosquitto_pub -t "/picoclaw/assistant/device1/request" \
-m '{"text": "CPU使用率を確認してください"}'
4. レスポンスを受信するためにサブスクライブ:
mosquitto_sub -t "/picoclaw/assistant/device1/response"
📨 トピック構造
{prefix}/{agent_id}/{client_id}/request # クライアント → PicoClaw
{prefix}/{agent_id}/{client_id}/response # PicoClaw → クライアント
| セグメント | 説明 |
|---|---|
prefix |
トピックのプレフィックス。サーバー側で設定。デフォルト:/picoclaw |
agent_id |
PicoClaw インスタンスの識別子。agent_id フィールドに設定 |
client_id |
クライアントが定義するセッション識別子。デバイスごとに同一の ID を使用するとコンテキストが維持される |
メッセージペイロード(JSON)
{ "text": "メッセージ内容" }
⚙️ 設定
config.json
{
"channel_list": {
"mqtt": {
"enabled": true,
"type": "mqtt",
"settings": {
"broker": "ssl://your-broker:8883",
"agent_id": "assistant",
"topic_prefix": "/picoclaw",
"client_id": "",
"keep_alive": 60,
"qos": 0
}
}
}
}
.security.yml(認証情報)
ユーザー名とパスワードは config.json ではなく ~/.picoclaw/.security.yml に保存します:
channel_list:
mqtt:
settings:
username: your_username
password: your_password
設定フィールド
| フィールド | 場所 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
broker |
settings |
はい | — | MQTT ブローカー URL。例:tcp://host:1883、ssl://host:8883 |
agent_id |
settings |
はい | — | エージェント識別子。トピックパスの一部として使用される |
topic_prefix |
settings |
いいえ | /picoclaw |
トピックの名前空間プレフィックス |
username |
.security.yml |
いいえ | — | ブローカー認証のユーザー名 |
password |
.security.yml |
いいえ | — | ブローカー認証のパスワード |
client_id |
settings |
いいえ | 自動生成 | ブローカーに送信する paho クライアント ID。未設定の場合 picoclaw-mqtt-{agent_id}-{8桁hex} で自動生成。プロセスの生存期間中は固定され、再接続時も同じ ID を使用 |
keep_alive |
settings |
いいえ | 60 |
MQTT キープアライブ間隔(秒) |
qos |
settings |
いいえ | 0 |
パブリッシュおよびサブスクライブの QoS レベル:0、1、2 |
環境変数
| 変数 | フィールド |
|---|---|
PICOCLAW_CHANNELS_MQTT_BROKER |
broker |
PICOCLAW_CHANNELS_MQTT_AGENT_ID |
agent_id |
PICOCLAW_CHANNELS_MQTT_TOPIC_PREFIX |
topic_prefix |
PICOCLAW_CHANNELS_MQTT_USERNAME |
username |
PICOCLAW_CHANNELS_MQTT_PASSWORD |
password |
PICOCLAW_CHANNELS_MQTT_CLIENT_ID |
client_id |
PICOCLAW_CHANNELS_MQTT_KEEP_ALIVE |
keep_alive |
PICOCLAW_CHANNELS_MQTT_QOS |
qos |
🔄 再接続
接続が切断された場合、PicoClaw は 5 秒間隔で自動的にブローカーに再接続します。再接続後はサブスクリプションも自動的に再確立されます。再接続時はブローカー側のクライアント ID が同一に保たれるため、ブローカーは同じセッションとして認識します。
⚠️ 注意事項
- TLS:SSL/TLS をサポートしています(ブローカー URL に
ssl://を使用)。デフォルトでは証明書検証をスキップします。 - ストリーミングレスポンス:ストリーミング出力時はレスポンストピックに複数のメッセージが送信されます。順番に結合すると完全なレスポンスになります。
- client_id とセッション ID の違い:トピックパスの
client_idはクライアントアプリケーションが設定するセッション識別子です。PicoClaw がブローカーへの接続に使用する paho クライアント ID とは別の概念です。 - 複数インスタンス:同じ
agent_idで複数の PicoClaw インスタンスを同一ブローカーに接続する場合、ブローカーレベルの競合を避けるために各インスタンスに異なるclient_idを設定してください。