コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Home Assistant(Hass.io)でホームオートメーション】ルンバ 発進!

Five, Four, Three, Two, One, Roombas are GO!*1

昨年末のビックカメラの新聞広告に踊らされて、家のルンバを更新しました。今までのルンバはグルグル廻るちょっとバカっぽいルンバだった*2のですが、新型はどうだ?真っ直ぐなヤツだが、隅々まで気が回らないヤツだという噂も。

1. はじめに

f:id:maky_Ba:20191222142406j:plain:w400
(ルンバって買い換えても「変わった!」って感じにならないのですよね…)

今まではルンバ885Plus*3でした(左のやつ)。交換用フィルタや、お部屋ナビ(複数のお部屋を順番に掃除させる赤外線ゲート的なもの)2個、バーチャルウォール(入っちゃダメなところに赤外線で線引きするもの)とかおまけがいっぱいでした。赤外線リモコンがあったので、汎用赤外線リモコンで学習させてHomeAssistantから「Roomba Go!」とかは一応出来なくはない(テストはした)のですが、運用上はうまくいかなかった*4ので、Home Assistant連携は放置してました。

今回のビッグカメラの特価品はルンバ980でした(右のやつ)。同じ900番台にルンバ960という定価がちょっと安いのがあります。違いは「付属品(バーチャルウォール1個増、交換用フィルタ・エッジブラシ1個増)」「吸引力(カーペットブースト)」「稼働時間」だそうです。ううむ、あまり有難くない…バーチャルウォールって意外と使わないのです。カーペットブーストに至っては、我が家は部屋をルンバ仕様にしていて、一か所(1畳程度)を除いてカーペットが無いのです。稼働時間を気にするほど家は広くないし、バッテリー無くなったら充電して続きを掃除してくれるらしいので、まったく問題ないでしょう。ま、特価になっていたから良しとしますか。

2. Roomba 980の初期設定

2.1. 本体充電

箱からだして、充電ステーションを設置して本体を置く。3時間充電、とか書かれているが既に本体充電済みなので、すぐに満充電になって電気が消えるかもしれません。びっくりしないように(びっくりしました、私は。)。

2.2. iRobot Homeアプリ設定

まあ、アプリが無くても足で「Clean」ボタンをぽちっと押せば掃除はしてくれるのですが、まあアプリ連携推奨らしいので、設定しましょう。掃除したところをマップしてくれるって機能もあるらしいし。AppStoreもしくはGoogle Playで「iRobot Home」アプリをインストールしましょう。

アプリで家の外からでもアクセスできるようにするために、ユーザアカウントの作成を迫られます。あんまり好きではないのですが…しかたなし。
f:id:maky_Ba:20191222204233p:plain:w125 f:id:maky_Ba:20191222204325p:plain:w125 f:id:maky_Ba:20191222204347p:plain:w125 f:id:maky_Ba:20191222204824p:plain:w125

初めてルンバを接続する時は「ロボットを追加」画面がでます。 確認事項に表示される3点「充電ステーション」「ロボット」「Wi-Fi」以外に、「Bluetooth」「位置情報」が必要です。ううむ。
f:id:maky_Ba:20191222204849p:plain:w125 f:id:maky_Ba:20191222204918p:plain:w125 f:id:maky_Ba:20191222204943p:plain:w125 f:id:maky_Ba:20191222205005p:plain:w125

ルンバの名前を決めて、接続先のWi-Fiパスワードを入力(Home Assistantと同じネットワークのWi-Fi)するとルンバの起動を求められます。
あとでHome Assistantから操作するためにIPを固定化しておいた方がよいので、左から3番目の画面で「最新のネットワーク設定」をクリックし、静的IPを設定しておきます。
f:id:maky_Ba:20191222205058p:plain:w125 f:id:maky_Ba:20191222205116p:plain:w125 f:id:maky_Ba:20191222205144p:plain:w125 f:id:maky_Ba:20191222205212p:plain:w125

多分Bluetoothがちゃんと機能していれば、ルンバから「設定中です」的な音声が流れるのですが、うまくいかないと、下の左端の画面とその次の画面の間ぐらいかな、そこらへんで「(アプリを使っている)スマホ等のWi-Fiを切り替えて直接ルンバに接続せよ」って言われたりします。多分Wi-FiSSID/パスワードを伝えたいだけだと思います。スマホWi-Fi設定で「roomba........」というSSIDを選んで接続すると、またすぐに「元のWi-Fiに戻せ」って言われて右往左往…。それが終わると再び左端の画面になって、ネットに接続してFirmwareのアップデートなんやらが走って(いるらしい)しばらくすると「設定が完了しました!」画面になる*5
リモコン代わりに「Clean」できるボタンが表示されます。 ルンバを切り替えたいときは、左上の三本線をクリックすると選択できる画面が表示されます(下、右端)。
f:id:maky_Ba:20191222205328p:plain:w125 f:id:maky_Ba:20191222205407p:plain:w125 f:id:maky_Ba:20191222205447p:plain:w125 f:id:maky_Ba:20191222205512p:plain:w125

2.3. 掃除させてみた

f:id:maky_Ba:20191222211957p:plain:w125:left f:id:maky_Ba:20191222212026p:plain:w125:left 掃除させてみました。バカっぽさが消えて(愛くるしさも減少??)、真っ直ぐな優等生君に生まれ変わりました。左がClean Map機能でどこを掃除したか(しなかったか)がわかる機能です。しかも道中Wi-Fiの受信感度も測定しているし。
iRobot社の社長が「家の中がどうなっているかわかるIoTデバイスはルンバだけだ」的な発言をしたくなる気もわかります。が、しかし、ねぇ、家の中の情報がねぇ…。このClean Map機能をOffにすればCloud(iRobot社)にはデータが送られなくなるのですが、面白いからねぇこの機能。そこが狙いか。

3. Home AssistantからルンバGo!

次は本命のHome Assistantからのルンバ制御です。基本的には下記のHome AssistantのIntegrationsのiRobot roombaの記載に従えば良いのですが、相変わらず言葉足らず。
www.home-assistant.io

3.1. ルンバのBLID/Passwordを取得する

ルンバのBLID(Build ID?)とPasswordを取得しないと連携できないのですが、Home Assistantのサイトはそのあたりは、下記のサイトに丸投げ工法。
github.com

ただWindowsのWLS(ubuntu)環境でやろうとしたらPythonのバージョンなのか何なのかでイマイチうまくいかず。下記のサイトの言う通りに進めたら無事BLID/Passwordが取得でき、うまくいきました。 community.home-assistant.io

  1. Windowsのどこか(例えばデスクトップ)に、作業用のフォルダ(roomba)を作成して、exeインストーラgithubのファイルの置き場にします。
  2. Pythonのサイト(https://www.python.org)から最新版のexeインストーラを取得
  3. GithubのNickWaterton/Roomba980-Python(https://github.com/NickWaterton/Roomba980-Python)からRoomba980-Pythonをzipで固めたものを取得
  4. Pythonのインストール。「カスタムインストール」でC:\Pythonにインストール。「環境変数Pythonを追加」(Add Python to environment variables)も忘れずに。
  5. Roomba980-Python-master.zipの中のroombaというフォルダをC:\Pythonの直下に展開
  6. DOSプロンプトを立ち上げる(Windows左下の検索窓からcmdとか入れて)
> cd C:\Python
> pip install six
> python .\roomba\getpassword.py -R 192.168.xx.xx  (←ルンバのIP)

途中で止まって「ルンバがホームステーションに居て電源が入っている状態か確認しろ」「確認したらルンバのホームボタンをピロッって言うまで2秒ほど押せ」と言ってくるので言われた通り操作して、DOS窓でEnterを押す。

(中略)
Roomba (Roomba_no1) IP address is: 192.168.xx.xx
blid is: 69F4051123456789
Password=> :1:1577025355:SE0pEGauevFJOgxK <= Yes, all this string.
Use these credentials in roomba.py

このblid「69F4051123456789」とPassword「:1:1577025355:SE0pEGauevFJOgxK」(どちらも値はサンプルですよ)の両方が重要。メモっておきましょう。

ちなみにpip install sixは、1回やれば十分。次に(2台目ルンバ―とか)BLID/Passwordを取得したいときは、PythonスクリプトだけでOKです。

3.2. Configuration.yaml設定

先ほどメモったBLIDとPasswordそれとルンバのIPアドレスをConfigurationファイルに記載します。

(前省略)
# iRobot roomba 980
vacuum:
  - platform: roomba
    name: <表示用のルンバの名前>
    host: <IP_ADDRESS>
    username: <BLID>
    password: <PASSWORD>
(後省略)

あとは再起動。

これで、vaccum.turn_onやらvaccume.turn_offやらでルンバを制御することができるようになります。一日複数回のタイマー起動とかもOK(のはず)。コマンドは、掃除機(Vacuum)の項にありますよ。

www.home-assistant.io

3.3. UI設定

表示パネルのどこかに「vaccum.<付けた名前を基にしたエンティティ名>*6」を設定します。例えば下記の様に設定すると右のような感じになります。
f:id:maky_Ba:20200110005844j:plain:w300:leftf:id:maky_Ba:20200110005904j:plain:w250

右の画面のルンバの名前(上では「Roomba No.1 - 1st Floor」)をクリックするとルンバの状態と操作の画面がポップアップします。
f:id:maky_Ba:20200110010736j:plain:w300:left

4. さいごに

Home Assistantのコミュニティのやりとりを見るに、BLID/Passwordの取得は結構苦労しているみたいです。

「Multiple Connectionがいかん」(どうやらルンバは一度に一か所としかやり取りできないので、ルンバアプリ(クラウドサービス)とおうちサーバHass.ioの2か所(Multiple)の接続はだめだという理論)とか言って、すべての端末の全てのルンバアプリを削除してからgetpassword.pyスクリプトを実行すべし、とか言っている人もいましたが、少なくとも私はそんなことしなくても大丈夫でした。一応、アプリは停止させてからスクリプト実行しましたが。

またHass.ioからの制御に関しても「Multiple Connectionが邪魔をするのだ」とかいうコメントもありましたが、今のところiRobot HomeアプリとHAの両方からアクセスしてもきちんと動いています、今のところ。 まあ組み合わせや、タイミングでダメになったりしそうですが…

さて、新年早々、やっぱり汎用赤外線リモコンには到達せず。
赤外線リモコンにはいろいろやらせたいけど、とりあえず電気をつけるとこだけにするか。

Home Assistant(Hass.io)でホームオートメーション目次

  1. RaspberryPiにHome Assistant導入
  2. Home Assistant初期設定
  3. 環境センサー(Omron)を接続
    1. 環境センサー(Omron)を接続 - 前編
    2. 環境センサー(Omron)を接続 - 中編
    3. 環境センサー(Omron)を接続 - 後編
  4. スマートコンセントでクリスマスツリー点灯!(スマートプラグ)
  5. スマートディスプレイ
  6. OK、ぐーぐる、クリスマスツリーを点けて(IFTTT連携)
  7. ルンバ発進!《今回》
  8. 汎用赤外線リモコンを接続《次回》
  9. UIを改善
  10. データベースの外部化

*1:サンダーバード好きなので「発進!」(正確にはGoは準備完了的な意味合いですが)はこのセリフで。Roomba"s"なのは一階と二階の両方にあるからです。

*2:右往左往しながら何度もしっかりと掃除してくれるので、ういやつよのう、という感じで好きでしたよ。でもお別れ…

*3:ああこれもビッグカメラ.comで買ったやつだったなぁ。

*4:汎用赤外線リモコンは、基本的に横から上の範囲に赤外線を広範囲に照射するのですが、ルンバは床の上なので赤外線がうまく届かないのですが…なんか反射でうまくいくときもあったりするのですが。天井、と言うかシーリングライトに汎用赤外線リモコンを組み合わせるのが、到達範囲という点では何気に良いと思うのですが。製品化されないのかなPanasonicとかから。

*5:この「設定が完了しました!」画面はアニメーションが凝っています。ごみをぶちまけて(上記画面)、ぐるぐる走りまわってごみを掃除したり、猫を載せて走ったりして、最後は綺麗な状態で止まります。

*6:ちなみに名前にスペースとかピリオドとかが含まれるとそこはアンダースコアに置き換わります。また大文字は小文字に。「Roomba No.1 - 1st Floor」は「roomba_no_1_1st_floor」になります。