Roomba-bot−640

「@Roomba 掃除しろ」 Slack BOT から新型ルンバ980をWiFiで制御する

おうちハック Advent Calendar 2015の5日目の記事です。

こんにちは。CTOのkamocです。
前回の記事(ルンバがうちに、やってきた。)では最新モデルのルンバ980をハックしていく方向性について書きました。
今回はアプリとiRobot API間の通信をハックして行きます。

最初に

今回は図の★の部分。アプリとiRobot API間の通信をハックして行きます。

新型ルンバ980のシステム構成

新型ルンバ980のシステム構成

今回のゴール

今回の記事では、ルンバに「掃除しろ」と命令したらルンバが掃除を開始する Slack BOT を開発します。

iRobot アプリの掃除開始命令を解析し、Slack BOT から同命令を叩いてルンバに掃除させます。

通信内容を観察してみる

それでは早速 iRobot アプリと iRobot API の通信を解析してみましょう。
通信の解析には Charles というツールを使用しました。

iPhone のパケットキャプチャのやり方はこちらを参考にしました。

Charles を起動して iPhone のプロキシ設定を済ませた状態で、iRobotアプリを立ち上げるとこんな感じになります。

Charles で iRobot アプリの通信を表示した様子
Charles で iRobot アプリの通信を表示した様子

いろいろ通信してますね〜。
http://www.irobot.com と https://irobot.axeda.com のどちらかが iRobot API でしょう。この後詳しく見ていきます。
https://e.crashlytics.com はアプリのクラッシュレポートや利用状況を記録しているやつですね。いつもお世話になっています。
http://192.168.10.4 はルンバとの直接通信ですね。ルンバのIPアドレスは前回の記事で書いたとおり、iRobotアプリから確認することができます。

http://www.irobot.com との通信内容

Charles で通信内容覗いてみました。レスポンスのJSONの一例はこちら。

termsUrlの値のURL(www.irobot.com/roombaterms)をブラウザで開いてみると、Legal Informationが表示されますね。
これは iRobot アプリの
このアプリについて > 利用規約および個人情報保護方針
を選択した時に表示されるページです。

f527ad21-ceca-4195-961c-83ff811b66d7

どうやらこのドメインとの通信では、アプリ内のWebView等で表示するコンテンツの情報を取得しているようですね。

https://irobot.axeda.com との通信内容

というわけで、こちらのドメインがルンバのAPIである可能性が濃厚になってきました。
通信を覗いてみましょう。

同ドメインについては以下のURLに対してのみ通信を行っています。
https://irobot.axeda.com/services/v1/rest/Scripto/execute/AspenApiRequest

一番上の通信のリクエストパラメータを見てみます。

本記事では以降 blid を {{ ROOMBA_ID }}, robotpwd を {{ ROOMBA_PW }} と表記します。

どうやら、APIのURLは共通で、”method”パラメータの値で挙動を定義しているようですね。
レスポンスはこちらです。

おぉ!いろいろと取れましたねぇ。
このAPIを定期的に呼び出せば、ルンバの現在の状態を知ることができそうですね。

次に、掃除開始命令を探してみましょう。
Charles さんに接続した状態で、iRobot アプリから掃除開始命令を出します。

掃除開始命令
掃除開始命令

はい。いましたねー。

 

iRobot APIの紹介

解析して明らかになった iRobot API をいくつか紹介します。

API の URL はすべて以下のURL。

https://irobot.axeda.com/services/v1/rest/Scripto/execute/AspenApiRequest

掃除開始

リクエストパラメータを以下のように設定

ステータス確認

リクエストパラメータを以下のように設定

行動履歴確認

リクエストパラメータを以下のように設定

APIの調査が終わったところで、curlコマンドを使ってAPIを叩き、実際にルンバが動くかどうか試してみましょう。

curl コマンドを使った検証

試しに掃除開始APIを curl コマンドで叩いてみましょう。

valueのパラメータは JSON 文字列をURLエンコードしています。

コンソールのEnterキーをターン!と叩きます。

・・・(2,3秒間があく)

ルンバ「ててーててー♪ ぴー ぴー ぴー ぴー」==◎

ルンバが走り出しました!!

 

ここまできたら後は Slack BOT とつなぐだけですね。

Slack bot の作成

Slack bot の作成は以下のサイトを参考にしました。

Coffeeスクリプトはこんな感じです。

Slack bot のソースコード一式はGitHubにあげてあります。

{{ROOMBA_ID}} と {{ROOMBA_PW}} だけご自身のルンバの値に書き換えてください。

社内 Slack で運用してみた

弊社 Slack にて世界中どこからでも、何時でも、kamoc宅のルンバを起動できるという状態にしてみました。

弊社社員に可愛がってもらっている様子がこちらです。

Slack BOTでルンバに命令する様子
Slack BOTでルンバに命令する様子

夜11:39に福島県からのリクエストで静岡県のルンバが掃除しております。

これはもう事件ですね。

セキュリティーの重要性について改めて考えさせられました。

現在1週間程運用しておりますが、深夜の掃除で目が覚めるといった自体は起きておりません。

SlackBOTをホストしているHerokuさんがスリープ状態になってしまい、呼びかけに反応しないという問題が発生するため、設定の調整が必要です。

それでは、今日はこの辺で。

ルンバかわいいよ、ルンバ。

kamoc

しくみ製作所CTO。お掃除ロボットルンバをかわいがっています。 ライターの記事一覧はこちら

「@Roomba 掃除しろ」 Slack BOT から新型ルンバ980をWiFiで制御する” への4件のフィードバック

  1. これはルンバ622 でも同じようなことはできるのでしょうか?

    1. ルンバ622にはWiFi機能が搭載されていないため、WiFi経由でハックすることはできません。
      しかし、シリアルポートがついていますので、ケーブルを使ってハックすることが可能です。
      参考:http://hyakuren-soft.sakura.ne.jp/hobby_robot_sdk/about_roomba_page.html

  2. 初めまして。
    blidとrobotpwdがわからないです。
    一番上の通信のリクエストパラメータの場所と見方を教えて下さい。
    宜しくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)