🚀 小爱音箱语音通知工具
このツールは CLI / TUI / MCP / Webhook を通じて、小爱音箱に音声通知を送信することができます。

🚀 クイックスタート
このツールを使用することで、様々な方法を通じて小爱音箱に音声通知を送信できます。以下に、主な機能と使い方を紹介します。
✨ 主な機能
- TUI 交互界面:アカウントの設定、通知の送信、Webhook/PM2 の管理ができます。
- CLI 命令:スクリプトや自動化シーンに適しています。
- MCP Server:Codex/Cursor/VS Code などの AI プログラミングアシスタントから呼び出すことができます。
- Webhook 服务:HTTP インターフェースを提供し、サードパーティシステムとの統合が容易です。
- 多音箱路由:スピーカーリストの管理、デフォルトスピーカーの設定、リクエストの did による一時的な上書きがサポートされています。
- PM2 常驻:Webhook をワンクリックでバックグラウンドで実行できます(ターミナルを開いておく必要がありません)。
📦 インストール
グローバルインストール(推奨)
npm i -g xiaoii
pnpm add -g xiaoii
インストール後、どのディレクトリでも xiaoi と xiaoi-mcp コマンドを使用できます。
ソースコードからインストール
git clone https://github.com/xvhuan/xiaoi.git
cd xiaoi
npm i
npm link
pnpm install
pnpm link --global
📚 ドキュメント
自動作成(インストール/初回実行時)
インストールが完了するか、初めて xiaoi を実行すると、自動的に以下が作成されます。
- ディレクトリ:
~/.xiaoi/(Windows の場合は %USERPROFILE%\.xiaoi\)
- 設定ファイル:
~/.xiaoi/config.json(空のテンプレート)
手動設定
~/.xiaoi/config.json を編集します。
{
"speaker": {
"userId": "あなたの小米ID(数字、携帯番号ではありません)",
"password": "あなたのパスワード(推奨しません)",
"passToken": "あなたのpassToken(推奨)",
"did": "米家アプリでのスピーカー名",
"defaultDid": "デフォルトスピーカーの did(オプション)",
"speakers": [
{
"did": "スピーカーの did",
"name": "リビングの小爱",
"model": "lx04",
"enabled": true
}
],
"ttsMode": "auto",
"verboseLog": false,
"ttsFallbackCommand": [5, 1],
"ttsFallbackCommands": {
"oh2p": [7, 3],
"oh2": [5, 3],
"lx06": [5, 1],
"s12": [5, 1],
"l15a": [7, 3],
"lx5a": [5, 1],
"lx05": [5, 1],
"x10a": [7, 3],
"l17a": [7, 3],
"l06a": [5, 1],
"lx01": [5, 1],
"l05b": [5, 3],
"l05c": [5, 3],
"l09a": [3, 1],
"lx04": [5, 1],
"asx4b": [5, 3],
"x6a": [7, 3],
"x08e": [7, 3],
"x8f": [7, 3]
}
},
"webhook": {
"port": 51666,
"host": "localhost",
"token": "",
"logFile": "log/webhook.log"
},
"mcp": {
"logFile": "log/mcp_server.log"
}
}
設定ファイルの検索優先順位:
~/.xiaoi/config.json
- (フォールバック)インストールディレクトリ/プロジェクトディレクトリ内の
config.json
主なフィールドの説明:
| フィールド |
説明 |
speaker.userId |
小米 ID(数字、小米アカウントの個人情報で確認できます) |
speaker.password |
小米アカウントのパスワード(セキュリティ検証で失敗する可能性があります) |
speaker.passToken |
passToken(推奨) |
speaker.did |
互換性のためのフィールド(旧バージョンのデフォルトデバイス);新バージョンでは defaultDid と同期されます |
speaker.defaultDid |
デフォルトスピーカーの did(リクエストボディに did を指定しない場合に優先的に使用されます) |
speaker.speakers |
追加されたスピーカーのリスト(did/name/model/enabled) |
speaker.ttsMode |
TTS リンクモード:auto(まず ttscmd を試し、失敗した場合はデフォルトに戻ります)、command(ttscmd のみ)、default(デフォルトリンクのみ) |
speaker.verboseLog |
詳細ログのオン/オフ(true/false)、リンクの実行詳細を表示するかどうかを制御します |
speaker.ttsFallbackCommand |
デフォルトの ttscmd(デフォルトは [5,1]、優先的に呼び出されます) |
speaker.ttsFallbackCommands |
モデルごとに ttscmd を上書きします(例:lx04:[5,1]、l09a:[3,1]) |
webhook.host |
リッスンアドレス;外部ネットワークからのアクセスが必要な場合は 0.0.0.0 に設定できます(セキュリティに注意してください) |
webhook.port |
Webhook のポート |
webhook.token |
Webhook の認証トークン(オプション;常駐 Webhook の場合は空のままにすると自動的に生成され、設定ファイルに書き戻されます) |
Webhook のデフォルトスピーカーの優先順位:
speaker.defaultDid
XIAOI_DEFAULT_DID(環境変数)
speaker.did(互換性のためのフィールド)
リクエストボディで明示的に did を指定する場合、did は speaker.speakers に含まれ、enabled=true である必要があります。そうでない場合は 400 が返されます。
ヒント:TUI の「アカウント設定」で TTS モードを切り替え、デフォルト/モデルの ttscmd を変更、詳細ログをオン/オフできます。「接続テスト」では、一時的な ttscmd と一時的なモードを手動で入力してデバッグできます。
推奨:passToken を使用してログインしてください。passToken の取得方法は migpt-next/issues/4 を参照してください。
💻 使用例
TUI 交互界面
xiaoi
CLI 命令
xiaoi tts "コードのコンパイルが完了しました"
xiaoi tts デプロイが完了しました。確認してください
xiaoi volume 30
xiaoi command 3 1 "[]"
xiaoi command 3 1 '[{"piid":1,"value":true}]' --did リビングの小爱
xiaoi getprop 3 1 --did リビングの小爱
xiaoi status
xiaoi help
MiOT cmd の簡単な例(xiaomi.wifispeaker.oh2p)
- 米家の仕様書(あなたのスピーカーの例):
https://home.miot-spec.com/spec/xiaomi.wifispeaker.oh2p
- このモデルの一般的な TTS
ttscmd:[7,3]
xiaoi tts "主人、これは OH2P のテストです" --did あなたのデバイスの did
xiaoi command 7 3 "[\"主人,这是一条 OH2P cmd 测试\"]" --did あなたのデバイスの did
xiaoi getprop 3 1 --did あなたのデバイスの did
cmd(siid/aiid/params)を構築する簡単な方法:
- 対応するデバイスの仕様書ページを開きます(上記の
oh2p のリンクなど)。
- 目的の機能に対応する
Service / Action を見つけ、siid と aiid を記録します。
- その
Action のパラメータ定義に従って params を準備します:パラメータがない場合は []、パラメータがある場合はドキュメントの順序に従って JSON 配列を組み立てます。
- 実行:
xiaoi command <siid> <aiid> '<paramsJson>' [--did <デバイスの did>]。
注意:異なるアクションの params の構造は異なります。必ず仕様書のアクションパラメータ定義に従ってください。
MCP Server(AI プログラミングアシスタントとの統合)
まず、xiaoi をグローバルにインストールし、アカウント設定を完了する必要があります。
VS Code / Cursor(JSON)
プロジェクト内に .vscode/mcp.json を作成します。
{
"servers": {
"xiaoi-voice-notify": {
"type": "stdio",
"command": "xiaoi-mcp"
}
}
}
Codex CLI(TOML)
[mcp_servers.xiaoi-voice-notify]
command = "xiaoi-mcp"
ツールのリスト:
| ツール |
説明 |
notify |
音声通知を送信(TTS) |
play_audio |
オーディオリンクを再生 |
set_volume |
音量を設定 |
do_action |
MiOT コマンドを送信(siid/aiid/params) |
get_property |
MiOT 属性値を読み取る(siid/piid) |
これら 5 つの MCP ツールはすべて、オプションパラメータ did をサポートしています。指定しない場合はデフォルトのスピーカーが使用され、指定した場合は指定されたスピーカーが使用されます。
Webhook サービス(HTTP インターフェース)
TUI で Webhook を起動することも、PM2 を使用して常駐させることもできます(次のセクションを参照)。
webhook.token を設定した場合(または常駐 Webhook で自動生成されたトークンを使用する場合)、リクエストに次のヘッダーを含めてください。
Authorization: Bearer <token>
- または
X-Xiaoi-Token: <token>
リクエストボディで did を指定することで、今回のターゲットスピーカーを指定することもできます。指定しない場合は、デフォルトの優先順位に従って自動的にルーティングされます。
curl -X POST http://localhost:51666/webhook/tts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"text":"こんにちは、世界","did":"リビングの小爱"}'
curl -X POST http://localhost:51666/webhook/audio \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"url":"https://example.com/audio.mp3","did":"寝室の小爱"}'
curl -X POST http://localhost:51666/webhook/volume \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"volume":50,"did":"リビングの小爱"}'
curl -X POST http://localhost:51666/webhook/command \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"siid":3,"aiid":1,"params":[],"did":"リビングの小爱"}'
Webhook の常駐(PM2 でワンクリック起動)
Webhook をサーバー/コンピューターで長期間バックグラウンドで実行したい場合は(ターミナルを開いておく必要がありません)、組み込みの PM2 管理コマンドを使用します。
xiaoi pm2 start
xiaoi pm2 deploy
xiaoi pm2 status
xiaoi pm2 logs 200
xiaoi pm2 webhook-log 200
xiaoi pm2 public on
xiaoi pm2 public off
xiaoi pm2 stop
xiaoi pm2 delete
xiaoi pm2 save
xiaoi pm2 startup
Webhook を外部ネットワークに公開する場合は、必ず webhook.token を設定するか、ファイアウォール/リバースプロキシと組み合わせて認証を行い、任意の呼び出しを防いでください。
Docker デプロイ(コンテナ化された Webhook)
xiaoi Webhook を Docker コンテナにパッケージ化して実行することができます。サーバー/NAS/クラウドホストに適しています。基本的なシーンでは、設定ファイルを手動で編集する必要はありません。環境変数を設定するだけで起動できます(複数のスピーカーのシーンについては、以下の「複数のスピーカーの設定」を参照)。
クイックスタート(直接イメージを取得し、clone する必要はありません)
docker pull iusy/xiaoi:latest
docker run -d \
--name xiaoi-webhook \
--restart unless-stopped \
-p 51666:51666 \
-e XIAOI_USER_ID=あなたの小米ID \
-e XIAOI_PASS_TOKEN=あなたのpassToken \
-e XIAOI_DID=あなたのスピーカー名 \
-e XIAOI_DEFAULT_DID=デフォルトスピーカーの did \
-e XIAOI_TOKEN=あなたのWebhook認証トークン \
iusy/xiaoi:latest
完了です!🎉 コードを clone する必要も、設定ファイルを編集する必要もありません。
または Docker Compose を使用する
curl -O https://raw.githubusercontent.com/xvhuan/xiaoi/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/xvhuan/xiaoi/main/.env.example
docker-compose up -d
.env ファイルには、少なくとも 3 つの項目を入力することをお勧めします(オプションでデフォルトのスピーカーを追加)。
XIAOI_USER_ID=あなたの小米ID(数字)
XIAOI_PASS_TOKEN=あなたのpassToken
XIAOI_DID=あなたのスピーカー名
XIAOI_DEFAULT_DID=デフォルトスピーカーの did
XIAOI_TOKEN=あなたのWebhook認証トークン
passToken の取得方法:migpt-next/issues/4
複数のスピーカーの設定(2 つの方法)
複数のスピーカーを持っている場合は、ターゲットデバイスをすべて speaker.speakers に記述し、speaker.defaultDid を設定することをお勧めします。
方法 1:コンテナ内で xiaoi を使用して対話的に設定する(手動での運用に適しています)
docker exec -it xiaoi-webhook node /app/bin/xiaoi.js
docker compose exec xiaoi-webhook node /app/bin/xiaoi.js
その後、TUI で アカウント設定 -> スピーカーリスト管理 に移動し、「スピーカーの追加/デフォルトスピーカーの設定」を完了します。
方法 2:設定ファイルを直接編集する(バッチ/自動化に適しています)
コンテナ内の設定ファイルのパス:/root/.xiaoi/config.json(永続的なボリュームをマウントしていることが前提)。
{
"speaker": {
"defaultDid": "リビングのスピーカーの did",
"speakers": [
{ "did": "リビングのスピーカーの did", "name": "リビング", "model": "oh2p", "enabled": true },
{ "did": "寝室のスピーカーの did", "name": "寝室", "model": "lx04", "enabled": true }
]
}
}
変更後、コンテナを再起動すると設定が反映されます。
docker restart xiaoi-webhook
docker compose restart xiaoi-webhook
呼び出し規則:
- リクエストに
did を指定しない場合:デフォルトのスピーカーが使用されます(defaultDid > XIAOI_DEFAULT_DID > speaker.did)
- リクエストに
did を指定した場合:指定されたスピーカーが使用されます
did は speaker.speakers に含まれ、enabled=true である必要があります
純粋な Docker コマンド(docker-compose を使用しない場合)
docker build -t xiaoi-webhook .
docker run -d \
--name xiaoi-webhook \
--restart unless-stopped \
-p 51666:51666 \
-e XIAOI_USER_ID=あなたの小米ID \
-e XIAOI_PASS_TOKEN=あなたのpassToken \
-e XIAOI_DID=あなたのスピーカー名 \
-e XIAOI_DEFAULT_DID=デフォルトスピーカーの did \
xiaoi-webhook
環境変数の一覧
| 変数 |
必須 |
説明 |
XIAOI_USER_ID |
✅ |
小米 ID(数字、小米アカウントの個人情報で確認できます) |
XIAOI_PASS_TOKEN |
✅ |
passToken(推奨のログイン方法) |
XIAOI_DID |
✅ |
米家アプリでのスピーカー名(完全に一致する必要があります) |
XIAOI_DEFAULT_DID |
|
デフォルトスピーカーの did(指定しない場合は XIAOI_DID にフォールバックします) |
XIAOI_PASSWORD |
|
パスワードでのログイン(推奨しません、セキュリティ検証でブロックされる可能性があります) |
XIAOI_TOKEN |
|
Webhook の認証トークン(空のままにすると自動的に生成されます) |
XIAOI_PORT |
|
ポート番号(デフォルトは 51666) |
XIAOI_TTS_MODE |
|
TTS モード:auto / command / default |
XIAOI_VERBOSE_LOG |
|
詳細ログ:true / false |
サービスの検証
docker-compose logs
curl http://localhost:51666/
curl -X POST http://localhost:51666/webhook/tts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <ログから取得したトークン>" \
-d '{"text":"Docker デプロイに成功しました!"}'
よく使うコマンド
docker-compose logs -f
docker-compose restart
docker-compose down
git pull
docker-compose up -d --build
🔧 技術詳細
プロジェクト構造
xiaoi/
├── bin/
│ └── xiaoi.js # CLI + TUI のエントリーポイント
├── lib/
│ ├── config.js # ユーザーディレクトリの設定管理(自動的に ~/.xiaoi/config.json を生成)
│ ├── speaker.js # コアモジュール(スピーカー API への直接接続)
│ ├── tui.js # TUI 交互界面
│ ├── webhook_server.js # 常駐 Webhook サービスのエントリーポイント(PM2 と組み合わせて使用できます)
│ └── pm2.js # PM2 のワンクリック管理のラッパー
├── mcp_server.js # MCP Server
├── config.example.json # 設定テンプレート
├── Dockerfile # Docker イメージのビルド
├── docker-compose.yml # Docker Compose のオーケストレーション
├── docker-entrypoint.sh # コンテナの起動エントリースクリプト
├── .env.example # Docker の環境変数テンプレート
└── README.md
よくある質問
ログインに失敗した場合はどうすればいいですか?
userId が小米 ID(数字)であることを確認してください。携帯番号やメールアドレスではありません。
- パスワードでのログインの代わりに、
passToken を使用することをお勧めします。
- passToken の取得方法は migpt-next/issues/4 を参照してください。
デバイスが見つからない場合はどうすればいいですか?
did が米家アプリでのスピーカー名と完全に一致していることを確認してください。
謝辞
このプロジェクトは @mi-gpt/next をベースに構築されています。
https://github.com/idootop/migpt-next
📄 ライセンス
MIT ライセンスです。詳細は LICENSE を参照してください。