Switchbotで部屋を定期的に換気するようにした
毎日は訪問できない部屋があって、そこの湿気が以前から気になっていた。
ときどきエアコンをかけてやれば少しは改善しそうだ。窓を開けて換気するのがベストだとは思うけど、部屋に行けないのでそれは無理だ。
というわけで、Switchbotのハブ2を買ってホームオートメーションに挑戦してみる。
ハブ2の赤外線でエアコンを定期的にオン・オフするだけの簡単な仕組みを考えた。
この仕組みを実現するためには以下の材料が必要になる。
- スクリプトがハブ2に接続して指示を出す
- ハブ2がエアコンに指示を出すための「シーン」の設定
- タイマーが指定時間にスクリプトを起動
プログラムでハブ2をコントロールする方法
Switchbotハブ2でエアコンを制御するためには、ハブ2にエアコンのオンオフを指示するためのコードを書く。
プログラムでSwitchbotを制御するために、まずはプログラムからSwitchbotのハブ2を発見できるようにする。Switchbotのデバイスはネットに繋がっていて、それぞれデバイスIDをもっている。プログラムを実行するPCとハブが同じローカルのネットワークに繋がっていても、必ずインターネット経由で制御する。
次に、ハブ2がエアコンをオン・オフするのだが、そのためにハブ2に「シーン」を追加する。シーンは、「エアコンのオン」と「エアコンのオフ」だ。シーンは通常いろんな操作をまとめて行うものだ。こんな単機能のためにシーン?と思うけど、プログラムで制御するにはこれが簡単そうだ。
そして、このシーンを実行するプログラムをスケジュールにしたがって実行すれば、「毎日決まった時間にエアコンをオン・オフする」プログラムの完成だ。
Pythonでハブ2をコントロール
デバイスIDの取得方法は、公式にもあるけど、日本語だとこちらとかにもある。
デバイスIDがわかれば、次はこれをプログラムで制御する。といっても、デバイスIDと制御したい処理を含んだURLを作って、そこを開くだけだ。なので最悪手動でも制御は可能だ。
僕は毎回手作業とかめんどうだし、URLを調べるのもめんどうだったので、先人の知恵=ライブラリを利用した。pythonでSwitchbotを制御するためのライブラリがあるので、pipでインストールする。
pip install python-switchbot
制御したい処理は、シーンに割り当ててあるので、このシーンのIDがわかればいい。シーンを知るには以下のようにする。
from switchbot import SwitchBot
bot_token = 'Your Token'
bot_secret = 'Your Secret'
args = sys.argv
switchbot = SwitchBot(token=bot_token, secret=bot_secret)
device = switchbot.device(id='Your hub id')
scenes = switchbot.scenes()
for scene in scenes:
print(scene)
# エアコン4ストップ(id=Scene ID)
# エアコン4スタート(id=Scene ID)
これで必要な材料が揃ったので、以下のようなプログラムを書いた。引数にonをつければエアコンをオンにする。on以外だとoffにする。引数がないと終了する。
なおこのスクリプトはサーバにおいておく。
次はこのスクリプトを定期実行する。
import sys
from switchbot import SwitchBot
bot_token = 'Your Token'
bot_secret = 'Your Secret'
args = sys.argv
switchbot = SwitchBot(token=bot_token, secret=bot_secret)
device = switchbot.device(id='Your hub id')
if len(args) == 1:
exit()
if args[1] == "on":
scene = switchbot.scene(id='Turn on Scene id')
else:
scene = switchbot.scene(id='Turn off Scene id')
scene.execute()
スクリプトの定期実行
僕のサーバはLinuxなので、定期実行のための仕組み=cronを動かせる。 ここに毎日17時にエアコンをオンにして、19時にエアコンをオフにする設定を記述する。
crontabを最初に起動すると使用するエディタを聞かれるので適当なエディタを選ぶ。わからない人はnanoを選べばWindowsのメモ帳的に使える。 下にコマンド一覧が出ているけど、「^」はCtrlキーを押しながらって意味。
> crontab -e
0 17 * * * /home/myname/aircon_on.sh
0 19 * * * /home/myname/aircon_off.sh
ここではPythonスクリプトではなくシェルスクリプトになっている。シェルスクリプトは単に上記のPythonスクリプトを起動するだけのものだ。
オンの場合はこんな感じ。
python3 /home/myname/aircon.py on
このスクリプトに実行権限をつけておく。
chmod u+x /home/myname/aircon_on.sh
chmod u+x /home/myname/aircon_off.sh
わざわざシェルスクリプトを作らなくても直接cronでPythonスクリプトを実行してもいい。 僕はシェルスクリプトを書くほうが楽な気がしたので、シェルスクリプト経由を選択した。