Switchbot カーテンをRaspberry Piで動かしてみた
この記事はIoT LTアドベントカレンダー25日目の投稿です
今年はIoTLTで登壇したのは、記念すべき100回目の時だけでした
(久々に見てたら今年公開したスライドの中でかなりたくさんの人に見られててかなり話題性あったことを物語ってますね)
実はあれから半年たち、名古屋市内に引っ越してついにれっきとした名古屋市民になりましたw
で僕が住んでいるマンションの近所では新たなマンションが絶賛建設中です。そのマンションにはこんな広告があります
最近はIoT対応のマンションも増えているようですが、今僕が住んでいるところはIoTという概念どころかインターネットが世に出始めたぐらいの20年以上昔に建てられた物件です
そういうところだからこそ自作でホームハックしがいがあるわけです
というわけで前置きが長くなりましたが、その一環として今回はSwitchbotカーテンを設置して実際に運用してみました
今回買ったもの
今回買ったデバイスは内側に車輪が入っているレールのカーテンに対応したモデルです。中のカーテンレールのサイズに合わせて車輪の大きさが調整できるようにアタッチメントも付属しています。
自宅のカーテンレールに対しては特にアタッチメントつけなくてもすんなり設置ができました。
設置ができたらアプリで2台のデバイスをグループ化させてキャリブレーションすればアプリ上でカーテンの開け閉めができるようになります
設置もキャリブレーションもアプリで簡単にできた
— KMiura (@k_miura_io) 2023年11月14日
あとはハックもしたいねー pic.twitter.com/9X4vrgMbGc
アプリを使わなくても手で開けることもできます
Raspberry Piで動かしてみる
ここまでできたところで本題です。
今度はRaspberry Piでハックしていきます。
SwitchBotシリーズはBLEのAPIがオープンになっており、プログラムで操作することができます。
そして、そのAPIでデバイスを操作するためのコードもGithubで公開されています
公式ではPyBluezを使った switchbot_py3.py
のセットアップ方法が紹介されていますが、バグがあるようで動きません。そして、中で使われているgattlibのビルドも失敗します…
同じ現象のissueは立ってましたが、Openされたまま放置されてますね…
というわけでこのissueの回答通り switchbot_py2topy3.py
を使ってみます。
こっちはbluepyを使ったコードになっており、セットアップはさほど難しくありません。
実行環境
- Raspbian GNU/Linux 10 (buster)
- Raspberry Pi Zero 2 W
セットアップ
基本的にはbluepyと同様のセットアップ方法で問題なさそうでした。
sudo apt-get install python3-pip libglib2.0-dev sudo pip3 install bluepy
追加でSwitchbotを操作するスクリプトで必要になるライブラリもインストールします。
sudo apt-get update sudo apt-get install python3-pexpect sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev sudo apt-get install libudev-dev libical-dev libreadline-dev
動かしてみた
以下のコマンドを実行することでデバイスをスキャンします。
sudo python3 switchbot_py2topy3.py
スキャンが終わると以下の通りデバイスのMACアドレスとそのコマンドがリストアップされます。
0 ['xx:xx:xx:xx:xx:xx', 'Curtain', 'Open'] 1 ['xx:xx:xx:xx:xx:xx', 'Curtain', 'Close'] 2 ['xx:xx:xx:xx:xx:xx', 'Curtain', 'Pause'] 3 ['xx:xx:xx:xx:xx:xx', 'Curtain', 'Pause'] 4 ['xx:xx:xx:xx:xx:xx', 'Curtain', 'Open'] 5 ['xx:xx:xx:xx:xx:xx', 'Curtain', 'Close']
あとはリストアップされたコマンドの中で実行したいコマンドを番号で指定するとカーテンを操作できるようになります
やっとRaspberry PiでSwitchBotカーテンをハック出来た
— KMiura (@k_miura_io) 2023年12月23日
SwitchBot自体久々にハックしたけどセットアップ結構詰まった… pic.twitter.com/TwA7luSGUX
ちなみに↑のポストのように2台同時に開閉するにはアプリのデバイス設定で確認できる「デバイス情報」のMACアドレスを選択すると操作できます。
これで接続、動作確認ができれば以下のコマンドでデバイスの操作ができます。
sudo python3 switchbot_py2topy3.py xx:xx:xx:xx:xx:xx Curtain [Close / Open]
あとはCronとかを使ってカーテンを自動で開閉する操作をRaspberry Piで実装できます
まとめ
今回はSwitchBotカーテンを使って自宅のカーテンを自動開閉できるようにしてみました。
実際にRaspberry PiにCronを仕込んで起床時間にカーテンを開けて帰宅前にカーテンを閉めるように操作してますが、ちょっとした操作が快適になった気がします!
久々にBLE周りのセットアップしましたが今までできたセットアップができなくなるなどのクセがあるので、他で使い回せるようにOS自体をバックアップするとか対策を取らないといけない気がしてきました。