Roborock掃除機をクラウド不要でローカル管理!自前MQTTサーバーで完全プライベート運用する方法

タグ RoborockMQTTローカルサーバースマートホームHome AssistantDockerプライバシーIoTcolumnコラムlinuxLinuxdockerGitHubオープンソースPython-roborocklocal_roborock_server

Roborock掃除機をクラウド不要でローカル管理!自前MQTTサーバーで完全プライベート運用する方法

ひとことでいうと

Roborock Local Serverは、Roborock製ロボット掃除機がメーカーのクラウドサーバーと行っている通信を、自宅のサーバーに向け直せるオープンソースのソフトウェアです。設定を済ませると、掃除機はインターネットではなく自宅のネットワーク(LAN)の中だけで動くようになります。操作ログや通信データが外部に出ていかないため、プライバシーを重視する方に向いています。Home Assistant(スマート家電を一括管理できるプラットフォーム)のアドオンとしても利用できます。現在は「Very Early Beta(超初期ベータ)」という開発初期段階のため、ネットワークやLinuxの知識がある上級者向けのプロジェクトです。

こんな人におすすめ

1. スマートホームをすべて自宅LAN内で完結させたい人 メーカーのクラウドサービスに操作履歴や間取りデータを送りたくない、という方に向いています。このソフトを使うと、掃除機の通信がすべて自宅のサーバー内で完結し、外部サービスに依存しない運用ができます。

2. Home Assistantで掃除機をもっと深く制御したい人 このプロジェクトはHome Assistantのアドオンとしてインストールできます。既存のスマートホーム環境にそのまま組み込み、独自の自動化ルールや状態監視を設定しやすくなります。

3. Roborock掃除機の通信プロトコルを研究したい開発者・研究者 MQTTというプロトコル(通信の取り決め)で掃除機がどんなメッセージを送っているかを手元で観察できます。ファームウェアや通信仕様を調べたい方にとって、非常に有用な実験環境になります。

インストール・使い方

このプロジェクトの導入はいくつかの準備が必要です。以下はDockerを使った基本的な手順です。Dockerとは、ソフトウェアを仮想的なコンテナ(独立した入れ物)に入れて動かす仕組みで、環境の差異を吸収してくれます。

Step 1: 事前に用意するもの

以下の4点が必要です。

  • 自分が管理するドメイン名(例: example.com
  • Cloudflare(DNSサービス)のAPIトークン(SSL証明書の自動更新に使います)
  • LAN内で常時稼働できるサーバー(Raspberry Piや自宅NASなど)
  • 掃除機の初期設定(オンボーディング)用の別マシン

まず、公式ドキュメントの docs/tested_vacuums.md で自分の掃除機が対応モデルかどうかを確認してください。モデルによって使うSSL証明書の種類が異なります。

Step 2: リポジトリを手元にコピーする

ターミナル(文字で命令を送る画面)を開いて、以下のコマンドをコピー&ペーストして実行します。

git clone https://github.com/Python-roborock/local_roborock_server
cd local_roborock_server

git clone はプロジェクトのファイル一式をダウンロードするコマンドです。cd はそのフォルダへ移動する命令です。

Step 3: SSL証明書の種類を選ぶ

掃除機のモデルにより、使う証明書プロバイダーが変わります。多くのモデルにはZeroSSLが推奨されており、古い機種や特定モデルにはActalisが適しています。docs/tested_vacuums.md で自分の機種を確認してから選んでください。

Step 4: Dockerでサーバーを起動する

設定ファイルを事前に編集したうえで、以下のコマンドでサーバーを起動します。-d は「バックグラウンドで動かす」という意味です。

docker compose up -d

これにより、MQTTサーバーや通信リダイレクト処理が自動的に立ち上がります。

Step 5: オンボーディング(掃除機とサーバーのペアリング)

サーバーが起動したら、別の端末から以下のスクリプトを実行して、掃除機の通信先を自宅サーバーに切り替えます。これが通信リダイレクトの核心部分です。

python start_onboarding.py

画面操作で進めたい場合は、GUIツール(グラフィカルな操作画面)の start_onboarding_gui.py も利用できます。Cloudflare経由でSSL証明書の自動更新を設定したい場合は、docs/cloudflare_setup.md を参照してください。

動かしてみた

DockerコンテナのビルドにはPython 3.12.13が使われており、正常にビルドできることを確認しました。依存パッケージの管理には uv(高速なPythonパッケージマネージャー)が採用されており、pyproject.tomluv.lock が含まれています。

プロジェクトのファイル構成を確認すると、通信リダイレクト用の mitm_redirect.py、オンボーディング処理の start_onboarding.pyonboarding_shared.py、GUIツールの start_onboarding_gui.py、コーデックのパッチ処理を行う patcher/patch_librrcodec.py が含まれています。テストスイートは tests/ ディレクトリに test_security.pytest_onboarding_gui.pytest_version_sync.py の3本が用意されており、セキュリティ・GUI・バージョン管理の各観点からコードが検証される構成になっています。

デモについて

このプロジェクトはRoborock実機・独自ドメイン・LANサーバー・SSL証明書の設定など、実際の環境に依存する要素が多いため、ブラウザで気軽に試せるデモの提供はありません。実際に試す場合は、公式ドキュメントの docs/installation.md から順を追って読み進め、十分な技術的理解のうえで構築を進めることをおすすめします。

はじめの一歩:導入前に確認しておくと安心なこと

セットアップをスムーズに進めるために、以下の点を事前に押さえておきましょう。

  • 動作確認済みモデルを調べる: docs/tested_vacuums.md で自分の掃除機が対応しているかを必ず確認します。すべてのモデルが同じ証明書チェーンを受け付けるわけではありません。
  • 証明書プロバイダーを決める: ZeroSSL(多くのモデルに推奨)またはActalis(古い機種向け)のどちらを使うか、モデルに合わせて選んでください。
  • LAN内専用で使う: このサービスはLAN(自宅ネットワーク)内での利用を前提に設計されています。インターネットに直接公開することは推奨されていません。
  • 公式アプリとの共存も選択肢: docs/roborock_app.md のガイドに沿えば、Roborock公式スマホアプリを引き続き使いながらローカルサーバーと並行動作させられる可能性があります(モデルによります)。
  • 「Very Early Beta」を理解して使う: 現時点では機能が発展途上のため、安定性や対応機種は今後変わる可能性があります。十分なバックアップと技術的な準備のうえで試してください。

活用例

  • 完全オフラインの掃除スケジュール管理: Home Assistant経由でローカルMQTTサーバーから掃除機のスケジュールを管理します。メーカーのサーバーが一時停止していても影響を受けません。
  • 掃除ログのプライベート蓄積と可視化: 掃除の開始・終了・状態ログをすべて自宅サーバーに保存し、独自のダッシュボードでグラフ化・分析ができます。
  • カスタムMQTTクライアントによる機能拡張: docs/custom_mqtt.md を参考に自作のMQTTクライアントを接続し、掃除機が発するメッセージを受信・解析して独自の機能を作り込めます。
  • IoTデバイスの通信プロトコル学習: MQTTの実際のメッセージをリアルタイムで観察できるため、IoT通信の仕組みを学ぶ実験環境として活用できます。
  • Home Assistantを使った高度な自動化: 掃除機の状態をトリガーにして、他のスマート家電と連携するオートメーションをHome Assistantで組み立てられます。
  • プライバシー要件が厳しい環境での検証: クラウド非依存の運用が求められる環境(セキュリティ研究・内部テストなど)で、デバイス通信の完全なコントロールを確かめるケースに活用できます。

用語とポイント解説

MQTT(Message Queuing Telemetry Transport) IoT機器(センサーや家電など)が軽量・非同期にメッセージをやり取りするための通信プロトコル(取り決め)です。かんたんに言うと、「デバイス同士が小さな手紙を送り合うための共通ルール」のようなものです。Roborock掃除機もこのMQTTを使ってクラウドサーバーと情報をやり取りしています。

MITMリダイレクト(Man-In-The-Middle Redirect) 通常の通信経路の途中に自分のサーバーを割り込ませ、通信を転送・観察する手法です。かんたんに言うと、「掃除機からメーカーへ送る郵便を、途中で自分のポストへ届くよう宛先変更する」イメージです。本プロジェクトでは悪意なく、プライバシー保護を目的にこの技術を利用しています。

LAN(Local Area Network) 自宅や会社など、限られた範囲だけで繋がるネットワークのことです。かんたんに言うと「家の中のWi-Fiネットワーク」です。このプロジェクトはLAN内専用に設計されており、インターネットへの直接公開は想定していません。

DNS-01チャレンジ SSL証明書(通信を暗号化するための証明書)を取得・更新する際に、ドメインのDNS(インターネット上の住所録)に特定の記録を書き込んで本人確認を行う方式です。かんたんに言うと「自分がそのドメインの持ち主であることをDNS経由で証明する手続き」です。Cloudflare APIと組み合わせることで自動更新が可能になります。

オンボーディング 掃除機を新しいサーバーに初めて登録・認識させる初期セットアップ工程です。かんたんに言うと「掃除機に『これからはこのサーバーと話してね』と教える作業」です。本プロジェクトでは start_onboarding.py または start_onboarding_gui.py で実行します。

Home Assistant スマート家電やIoTデバイスを一括管理できるオープンソースのスマートホームプラットフォームです。かんたんに言うと「様々なメーカーのスマート機器を1つの画面でまとめて操作・自動化できるアプリ」です。本プロジェクトはHome Assistantのアドオンとしてインストールできます。

Docker / docker compose ソフトウェアをコンテナ(独立した仮想環境の箱)に入れて動かす仕組みです。かんたんに言うと「アプリを動く箱ごと持ち運べる技術」で、パソコンの環境の違いによるトラブルを防ぎます。docker compose up -d の1コマンドで複数のサービスをまとめて起動できます。

ZeroSSL / Actalis SSL証明書(通信の暗号化に必要な電子的な身分証明書)を発行する認証機関です。かんたんに言うと「サーバーの正当性を証明してくれる公的な機関」のようなものです。Roborock掃除機のモデルによって受け付ける認証機関が異なるため、docs/tested_vacuums.md で確認して適切な方を選んでください。

uv(Pythonパッケージマネージャー) Pythonのライブラリ(追加機能のパッケージ)を高速にインストール・管理するツールです。かんたんに言うと「Pythonアプリに必要な部品を素早く揃えてくれる道具箱」です。本プロジェクトでは pyproject.tomluv.lock によって依存関係が管理されています。

SSL証明書チェーン 通信を暗号化するSSL証明書が、複数の認証機関によって連鎖的に信頼を保証する仕組みです。かんたんに言うと「複数の保証人が連なって信頼を裏付けている書類の束」のようなものです。掃除機の機種によってどの証明書チェーンを受け入れるかが異なるため、モデルの確認が重要です。


ぜひ、スマートホームのプライバシー強化やHome Assistantを使った掃除機の高度な自動化などに活用してみてはいかがでしょうか。