Realmoteで家のリモコンを一つにまとめる
最近、Pluto ステーションとかiRemocon(アイリモコン) IRM-01Lといった、スマートフォンが赤外線リモコンの代わりになる製品をよく見るようになりました。確かにスマートフォンしか持ってない人には便利かもしれません。が、プログラマなら常時起動してる PC・Mac が家に一台くらいはありますよね。それをリモコンにしたらいいと思いませんか。
というわけで、我が家で一年以上稼働している、Web インタフェースから家電製品やルンバが遠隔操作できちゃうリモコンアプリ Realmote を紹介します。
Realmote
Realmote は、右のスクリーンキャプチャのように、かなりシンプルな Web インタフェースを持っています。PC・Mac で起動する際のオプションを変えることで、赤外線リモコン機能、ルンバのリモコン機能を ON/OFF できます。(もう一つなめこカメラ機能というのもありますが、これは俺得機能なので普通は使わないと思います。)
ハードウェア
Realmote を使うのに必要なハードウェアは、次のとおりです。
- 常時起動している PC・Mac
- 赤外線リモコン機能を使うなら: Remote Station
- ルンバのリモコン機能を使うなら: ルンバ本体とRooTooth
Remote Station は BUFFALO の「パソコン用学習リモコン」で、その実態は赤外線 LED と赤外線センサーが USB 接続できるようになっている便利デバイスです。赤外線の出力がそれなりの長さのケーブルで 4 つに分岐しているのもポイントで、このおかげで複数の機器にしっかり信号を送れます。
4000 円ちょっとなので、ケチりたい人は Arduino 互換機と赤外線 LED、センサーを別々に買ってはんだ付けしてプログラムを書いたら少しは経費が浮くかもしれませんが、大差ないので買ったほうが楽でいいと思います。ただし、USB 接続なので、所詮 500mA であり、赤外線の出力は総量としては大したことありません。このあたりが気になるなら、自作するか、iRemoconあたりを買ったほうがいいと思います。
RooTooth はルンバを Bluetooth 接続するためのアダプタです。ルンバの天面の保護カバーを外すと、このアダプタを挿せる穴が出てきます。
ソフトウェア
Realmote のソフトウェアはGitHub で公開されています。ZIP でダウンロードしてください。ハードウェアとソフトウェアが手元にそろったら、次の手順で起動します。
- まず、赤外線リモコン機能が必要なら Remote Station を USB 接続し、ルンバと繋げたいなら PC・Mac の Bluetooth を ON にします。
- 次に、Realmote 起動用のバッチファイルを自分の環境に合わせて書き換えます。(Windows x86: realmote_example.cmd, Windows x64: realmote_example_x64.cmd, Mac: realmote_example.sh)
- 書き換えたファイルをダブルクリックで実行します。(Mac の場合は事前に chmod 755 realmote_example.sh が必要かも)
Realmote 起動用のバッチファイルでは、 -remote に続けて Remote Station の COM ポートの名前を、 -roomba に続けてルンバの Bluetooth アドレスを指定してください。
あとは、PC・Mac のブラウザで http://127.0.0.1:8000/ にアクセスして動作を確認してください。うまくいったら、PC・Mac の LAN 側 IP アドレスを調べて、スマートフォンから http://そのアドレス:8000/ にアクセスしてみてください。
実装
Realmote は Java ベースの Web サーバです。そして、特定の URL にアクセスがあると、Remote Station やルンバにコマンドを送るようになっています。その部分の実装は恐ろしくシンプルで、例えばルンバに掃除させるコードや、掃除をキャンセルするコードは次のように書けます。(RoombaHandler.javaより抜粋)
private boolean clean(HttpExchange exchange) throws IOException {
Roomba.RooTooth.wakeUp(roomba);
RoombaCore core = roomba.requestResource(RoombaCore.class, this);
core.clean();
roomba.freeResource(core, this);
exchange.sendResponseHeaders(200, 0);
exchange.close();
return true;
}
private boolean cancel(HttpExchange exchange) throws IOException {
RoombaCore core = roomba.requestResource(RoombaCore.class, this);
core.safe();
core.power();
roomba.freeResource(core, this);
exchange.sendResponseHeaders(200, 0);
exchange.close();
return true;
}
記事を通して何が言いたかったかというと、Phybots 便利!ということでした。Remote Station もルンバも、専用のクラス(RemoteStation, Roomba)が最初から用意されていて、すぐに操作用のコードを書き始めることができます。プログラマのみなさまにおかれましては、冬休みの自由工作として家のオートメーションに取り組まれてはいかがでしょうか。