このガイドの目的は、Roborockを直接リバースエンジニアリングすることではない。Home Assistantの公式Roborock統合と公式MCP Serverを間に置き、AIへ見せる範囲を自分で制御しながら、まず状態確認・掃除開始・ドック帰還まで通す。
本稿は2026年8月17日に公式文書を突き合わせた手順で、ロボ図鑑ではまだ実機確認を終えていない。画面名や対応機能はHome Assistantと機種の更新で変わり得る。実測済みの印は、実機で往復確認するまで付けない。
先に結論: いちばん保守しやすい配線
AIクライアント
└─ MCP (Streamable HTTP)
└─ Home Assistant /api/mcp/assist
└─ Assistに公開した vacuum エンティティ
└─ Home Assistant公式Roborock統合
└─ Roborock S8など
Roborockの公開済み開発者API文書を前提にせず、Home Assistant公式統合へ寄せる。公式統合は機種差・認証・ローカル通信とクラウドフォールバックを一段吸収してくれる。AI側はRoborock専用の非公式MCPを直接抱えず、照明や空調と同じHome Assistantの口で扱える。
0. 接続前の安全確認
掃除ロボットは画面内のデータではなく、床の上を動く機械だ。最初のAI操作は必ず人が見ている場所で行う。電源コード、細いひも、液体、段差付近、ペットの食器を片付け、停止とドック帰還を手元のRoborockアプリまたはHome Assistant画面から実行できる状態にしておく。
AIへ公開するのは、最初は対象の掃除機だけにする。Home Assistantも、Assistへ公開するエンティティを必要最小限にするよう案内している。鍵・ガレージ・警報などを同じ勢いで公開しない。
1. RoborockをHome Assistantへ登録する
前提は、掃除機が公式Roborockアプリへ登録済みであること。Mi Homeへだけ登録した古い機種は経路が異なる。Home Assistantで次の順に進む。
設定 → デバイスとサービス → 統合を追加を開く。Roborockを選ぶ。- Roborockアプリで使うメールアドレスを入力する。
- メールへ届く確認コードを入力する。リージョンは、問題がなければ
Autoのままにする。 vacuum.*エンティティが作られ、Home Assistantの画面から掃除開始とドック帰還が通ることを先に確かめる。
公式文書ではS・QV・Qrevo・Sarosシリーズを完全対応としている。ロボット掃除機はコマンドと定期取得でローカル通信を優先する一方、初期設定、フォールバック、マップやルーチンにはクラウドを使う。インターネットを遮断した完全ローカル運用にはならない。 Home Assistantから機体のTCP 58867とUDP 58866へ到達できるようにし、IPアドレスはDHCP予約で固定するのが公式の推奨である。
2. Home Assistant側だけで動作を切り分ける
MCPを足す前に、Home Assistant内で次の4点を確認する。ここで失敗するならAI側を触っても直らない。
- 現在状態とバッテリーが読める。
- 掃除開始が通る。
- 一時停止または停止が通る。
- ドック帰還が通る。
部屋指定を使う場合は、掃除機エンティティの設定から Map vacuum segments to areas を開き、Roborockのマップ上の部屋をHome Assistantのエリアへ割り当てる。公式文書の Cleaning by area がHome Assistant内で動くところまでを先に確かめる。Roborockは部屋を指定した清掃には対応するが、部屋を任意の順番で清掃する指定には対応しない。
3. 対象の掃除機だけをAssistへ公開する
設定 → 音声アシスタント → 公開 を開き、対象の vacuum.* エンティティをAssistへ公開する。MCP統合のLLM API選択でも Assist を選ぶ。以後はAssist APIを明示する /api/mcp/assist を使う。ここで公開していない機器は操作対象にならない。
名前とエリアは曖昧にしない。たとえばエンティティ名を「掃除機」、エリアを「リビング」と設定し、同じ名前の機器を複数作らない。AIへ見せる機器が増えるほど選択ミスとコンテキスト量が増える。
4. 公式MCP Serverを追加する
設定 → デバイスとサービス → 統合を追加 から Model Context Protocol Server を追加し、Home Assistantの制御を許可する。Assist APIを直接指定するエンドポイントは次の形になる。
https://<Home Assistantの外部URL>/api/mcp/assist
公式MCP ServerはStreamable HTTPを使う。外部から接続するクライアントでHome Assistantをインターネット公開する場合はOAuthを優先し、クライアントIDにはHome Assistantではなく接続元アプリのベースURLを指定する。Home AssistantをLANまたはVPN内だけで使う場合は、公式文書が示すようにローカルMCPプロキシと長期アクセストークンを使う経路がある。長期トークンを記事、チャット、リポジトリへ貼らない。
接続後、AIクライアントから次を1件ずつ試す。
- 「リビングの掃除機の状態を教えて」
- 「リビングの掃除機で掃除を開始して」
- 「リビングの掃除機をドックへ戻して」
各操作の後にHome Assistantの状態と実機の両方を見る。AIの返答だけを成功判定にしない。標準Assistには掃除機の停止intentがないため、停止はRoborockアプリまたはHome Assistant画面から行う。
5. 部屋指定と停止は『見えているツール』を確認してから
Home AssistantのRoborock統合には、マップと部屋IDを返す roborock.get_maps や、画面上の Cleaning by area がある。ただし、Home Assistant内に存在するすべての統合固有アクションが、そのままMCPのAssist APIへ自動公開されるとは限らない。 一般的な掃除開始が通ったことを、部屋指定や停止まで通った証拠にしない。
部屋指定がMCPから直接見えない場合は、Home Assistant側に「キッチンを掃除する」のような引数なしスクリプトを作る。UIでは Clean area with vacuum cleaner を選び、対象の掃除機と Areas の両方を指定する。YAMLでは target.entity_id と必須の cleaning_area_id を省略しない。
action: vacuum.clean_area
target:
entity_id: vacuum.<対象の掃除機>
cleaning_area_id:
- kitchen
MCPから停止も必要なら、別の専用スクリプトで vacuum.stop を呼ぶ。こちらも target.entity_id を対象機へ固定し、省略しない。対象を省略すると接続中の全掃除機へ作用し得る。
action: vacuum.stop
target:
entity_id: vacuum.<対象の掃除機>
スクリプトの説明には対象と動作を短く明記し、スクリプトの設定からAssistへ公開する。Home Assistant公式文書では、公開したスクリプトはLLM向けの呼び出し可能なツールとして扱われる。
それでもMCPクライアントのツール一覧や実際のツール呼び出しに現れないなら、そのクライアントとHome Assistantの組み合わせでは未接続である。『AIが理解したはず』で押し切らず、Home AssistantのAssist Debugとクライアント側のツール呼び出し記録で確認する。
6. 運用上の限界
- 掃除機の状態は即時イベントだけに頼れない。公式文書はロボット掃除機の定期取得を30秒間隔としており、短時間に何度も状態確認しても鮮度は上がらない。
- マップ、現在位置など一部の取得はクラウドへ到達する。過度な再読込や位置取得はRoborock側のレート制限を招き、Home Assistantのエンティティが一時的に利用不能になることがある。
- 完全ローカルではない。掃除機のインターネット接続を遮断すると、ローカルAPIも使えなくなる場合がある。
- S8はValetudoの公式対応機種一覧に載っていない。対応外のroot化経路を、このガイドの代替手段として勧めない。
完了判定
次の5項目を実物で確認できれば、最初の接続は完了である。
- Home Assistantの画面から開始・停止・帰還が通る。
- MCPクライアントが対象掃除機の現在状態を取得できる。
- MCP経由の開始後、実機が動く。
- MCP経由の帰還後、実機がドックへ向かう。
- 公開対象が掃除機と必要なスクリプトだけに絞られている。
機種の接続性評価と非公式経路の比較はRoborock S8の標本、Home Assistant自体の接続性はHome Assistantの標本を参照。
出典(2026-08-17確認)
- Home Assistant Roborock統合 公式ドキュメント
- Home Assistant Model Context Protocol Server 公式ドキュメント
- Home Assistant: Exposing entities to Assist
- Home Assistant: Exposing scripts to LLM conversation agents
- Home Assistant: Roborock Get maps action
- Home Assistant Developer Docs: API for Large Language Models
- Home Assistant: Vacuum Clean area action
- Home Assistant Developer Docs: Built-in intents
- Valetudo: Supported Robots