Apple Watch+Raspberry Pi+スマートリモコンで作る未来の部屋~自動で部屋の明かりを制御してみた~
こんにちは、sato.tです!
皆さんはスマートリモコンを触ったことありますか?
簡単に説明すると家電のリモコン代わりにスマホから操作し、決まった時間に特定の操作を家電に指示することができるデバイスになります。(SwitchBot社やNatureRemoなどが有名です。)
また、スマートスピーカと連携して音声操作で照明をつけるなどの使い方もできて、
私もAlexaと連携させて「アレクサ、電気つけて」と言って部屋の照明を操作していたのですが、使っていくうちにだんだんと
「いちいち声に出して部屋の明かりつけたり消したりするの面倒だなぁ」
「部屋に入ったら明かりが点いて、部屋から出たら消えるシーリングライトがほしいなぁ」
と欲が出てきてしまいました。
無いなら作ってしまおう!
ということで、スマートリモコンとRaspberry PiとApple Watchを組み合わせて実現していきたいと思います!
【目次】
【実現したいこと】
まず、実現したいことをまとめると以下になります。
『部屋に入ったら照明がついて、部屋から出たら照明が消える』
これを実現させるために
が必要になります。
ここで「1.部屋の入退室を把握する。」はApple Watchをつけた人とRaspberry Piの置かれている部屋との距離を測定し、
「2.上記に応じてスマートリモコンから照明を操作する。」はRaspberry Piからスマートリモコンに対して
照明をON/OFFさせる命令を送ることで実現していきたいと思います。
【構成】
図にすると以下のような感じです。
Apple WatchとRaspberry PiはBluetoothのBLEを使い距離を測定し、
Raspberry Piからスマートリモコンへの命令は今回使用するスマートリモコン(Switch Botハブミニ)で用意されているAPIを使用します。
主にRaspberry Pi側での処理実装になるのですがフロー図にまとめると以下のようになります。
続いては、「1.部屋の入退室を把握する。」、「2.上記に応じてスマートリモコンから照明を操作する。」を実現する方法を紹介していきます。
◆1.部屋の入退室を把握する
まず、部屋にRaspberry Piを設置しそのRaspberry Piと身につけたApple Watchとの距離を測れるようにします。
そのためにRaspberry Piに備わっているBluetoothを使いApple Watchから出ているBLE(Bluetooth Low Energy)のアドバタイズ信号をキャッチし、
信号の受信電波強度(RSSI)を使って強度の値によってRaspberry PiとApple Watchとの距離を測定していきます。
ざっくりとBLEのアドバタイズ信号とは?についての説明ですが、発信側が不特定多数の相手に対して一方通行で自分の存在やデータを送る信号で中身は送信端末を一意に示すUUIDや電波強度(TxPower)などの値が入っています。
受信側は信号内にあるUUIDでどの端末からの信号かを判別しその信号の受信時の強度とTxPowerから大体の距離を計算することができます。
BLEのアドバタイズ信号はPythonのbeacontoolsというライブラリを使うことで簡単に取得できます。(参考URL:https://github.com/citruz/beacontools)
また、部屋の入退室を判断するためにRaspberry Pi側でステータスを保持し部屋にいない状態から近づいた時を入出、部屋にいる状態から離れたときを退出と判断させます。
◆2.Raspberry Piからスマートリモコンを操作する
スマートリモコン(Switch Botハブミニ)で用意されているAPI(Switch Bot API)をRaspberry Pi側から呼び出すことで、スマートリモコンに登録されている家電の操作をRaspberry Piから実行することができます。(参考URL:https://github.com/OpenWonderLabs/SwitchBotAPI)
【試してみた結果】
部屋のドアと反対の壁際にRaspberry Piとスマートリモコンを設置して、Apple Watchをつけてドア付近に立ったときのRSSIが「-70」だったのでその値を閾値としてその値より大きければ部屋の中、値以下であれば部屋の外と判断するようにし、
部屋の外から部屋の中に状態が変わったタイミングでシーリングライトを点灯、逆に部屋の中から部屋の外に行ったら消灯するよう設定しました。
実際に動かすと、部屋の中にいても電波強度に揺らぎがあり一時的に電波強度が低くなり部屋の外に出たと判断されてしまう場合があったので、
中から外の判断に「30秒間外にいる」という条件を追加して、一時的な電波強度の低下で誤動作しないよう制御を加えるとうまくいきました。
【最後に】
今回はRaspberry PiとApple Watchを使ってスマートリモコンをさらに便利にできる方法を紹介しました。
今回はBLEの信号を送信するデバイスとしてApple Watchを使いましたがそれ以外にもBLEを発信できる端末であればできるかと思うので、無くしものを防止するためのタグやApple Watch以外のウェアラブルデバイスでもできないか試してみたいと思いました。
また、Raspberry Piを複数台用意して複数の部屋に設置すれば三角測量の要領で部屋のどの位置にいるのかも測定できると思うので、それができればその位置ごとに別のアクションを起こさせることができてやれることが増えて楽しそうだなと思っています。