Raspberry Pi + SwitchBot + 人感センサーで玄関の照明を自動オン・オフ、勿論 HomeKit対応!
“スマートホーム化を実現するSwitchBotを我が家のリビングルームに導入しました!”
“リビングルームの照明用にスイッチボット SwitchBot スマートスイッチを導入しました”
“Raspberry Pi + 人感センサーでLEDライトを自動的にオン・オフ 勿論、HomeKit対応!“の続きです。
アマゾンのタイムセール祭りで、”【Amazon.co.jp 限定】Philips Hue ホワイトシングルランプE17(電球色) 4個セット |2700K E17スマートLEDライト4個|【Amazon Echo、Google Home、Apple HomeKit、LINE対応】 “を見かけたので、玄関の廊下で使っている照明と交換しようかな、と思ったのですが、そう言えば、使っていない”Raspberry Pi Zero W“と”aitendo“で”PIRセンサーモジュール [HC-SR501]“が手元にあったことを思い出し、ここは電子工作した方が面白そうということで、
を購入することにしました。
< ラズパイと人感センサー、スイッチボットのセットアップ >
・人感センサーをRaspberry Piに接続する詳しい手順は、“Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (4) “人感センサーで照明を自動制御””をご覧下さい。
・スイッチボットのセットアップと概要は、”リビングルームの照明用にスイッチボット SwitchBot スマートスイッチを導入しました“をご覧下さい。
< スイッチボットを制御するスクリプトを作成する >
“SwitchBot”製品の制御できるオープンソースのPythonスクリプト “python-host“を利用します。
インストール手順は次の通りです。
sudo apt-get install python-pexpect
sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev
sudo apt-get install libudev-dev libical-dev libreadline-dev
sudo pip install bluepy
git clone https://github.com/OpenWonderLabs/python-host.git
インストールが完了したら、動作確認をしておきます。周囲の”SwitchBot”製品をスキャンして、スイッチボットのBLE MACアドレスを表示していれるようなのですが、何度試してもうまくいきませんでした。
cd python-host
sudo python switchbot.py
とは言え、”SwitchBot”製品を制御するためには、スイッチボットのBLE MACアドレスが必要です。
スイッチボットのBLE MACアドレスは、”SwitchBot” iOSアプリでスイッチボットの設定画面 (Bot セット)の右上にある”…”をタップすると表示される画面で確認できます。
こちらのBLE MACアドレスをメモして下さい。
スイッチボットのBLE MACアドレスが分かったので、スイッチボットを制御するコマンドを投入してみましょう。
・スイッチボットの押すを実行。< >は要りません。
sudo python switchbot.py <BLE MACアドレス> Press
・スイッチボットでスイッチをオンにする。
sudo python switchbot.py <BLE MACアドレス> Turn On
・スイッチボットでスイッチをオフにする。
sudo python switchbot.py <BLE MACアドレス> Turn Off
それでは、”SwitchBot”製品を制御するPythonスクリプトを2つ作ります。
1つ目は、スイッチモードのスイッチボットで電源スイッチをオンにするスクリプトです。
sudo nano /home/pi/switchbot_turnon.py
2つ目は、スイッチモードのスイッチボットで電源スイッチをオフにするスクリプトです。
sudo nano /home/pi/switchbot_turnoff.py
スクリプトを実行して動作を確認して下さい。
python /home/pi/switchbot_turnon.py
python /home/pi/switchbot_turnoff.py
※ p = Peripheral(“BLE MACアドレス”, “random”)
※ スイッチモードの制御は、次の箇所を変更するだけです。
Press:binascii.a2b_hex(“570100”)
Turn On:binascii.a2b_hex(“570103”)
Turn Off:binascii.a2b_hex(“570104”)
< 人感センサーとスイッチボットを組み合わせる >
sudo nano /home/pi/pir_sensor_switchbot.sh
スクリプトの骨格は、先日のTALK (“Raspberry Pi + 人感センサーでLEDライトを自動的にオン・オフ 勿論、HomeKit対応!“)で書いたスクリプトと同じです。
書き直したスクリプトのポイントは、
・先程作成した2つのPythonスクリプトをシェルスクリプトから実行する。
スイッチボットでスイッチをオンにする
command_on="python /home/pi/switchbot_turnon.py"
eval $command_on
スイッチボットでスイッチをオフにする。
command_on="python /home/pi/switchbot_turnoff.py"
eval $command_on
・スイッチボットの状態を返すコマンドがないので、状態を示すフラグファイルの有無を判定する。
フラグファイルがない場合はフラグファイルを作成する。
if [[ ! -e /home/pi/switchbot.flag ]]; then
echo "SwitchBot TurnON" > /home/pi/switchbot.flag
echo 'FILE CREATE'
fi
フラグファイルがある場合はフラグファイルを削除する。
if [[ -e /home/pi/switchbot.flag ]]; then
rm -f /home/pi/switchbot.flag
echo 'FILE REMOVE'
fi
・ポーリング間隔を単純に3秒とする。
玄関の照明なので、あまり長い時間、照明をオンにする必要がないので。
< スイッチボット + 人感センサー用スクリプトを自動実行 >
ラズパイを起動したり、リスタートする都度、スクリプトを実行し直すのは面倒なので、以下の手順で自動実行するよう設定をしておきます。
・サービスファイルを作成します。
sudo nano /etc/systemd/system/pir_sensor_switchbot.service
・サービスを有効にします。
sudo systemctl daemon-reload
sudo systemctl enable pir_sensor_switchbot.service
sudo systemctl start pir_sensor_switchbot.service
・サービスが動いていることを確認します。
sudo systemctl status pir_sensor_switchbot.service
念の為、ラズパイを再起動後、ちゃんと実行されているか確認しておきます。
これで、人感センサーによるLEDライトの自動オン・オフ制御機能が完成しました。
journalctl -u pir_sensor_switchbot.service
< アップルのホームアプリ HomeKit で電源オン! >
続いて、アップルの”ホーム”アプリでスイッチボットを制御する仕組みを作ってみましょう。
生憎、現時点では”SwitchBot”製品は、”HomeKit“対応していません。そんな時には、”Raspberry Pi“と”homebridge“の組み合わせで問題を解決します。
“homebridge“のセットアップ手順については、先日のTALK (“”Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (2) “homebridgeでHomeKit対応”“”)をご覧下さい。
以降、”homebridge“がインストール済みであることを前提に話を進めていきます。
今回利用する”homebridge“のプラグインは、”homebridge-switchbot“です。
このプラグインは”SwitchBot”が公開している “SwitchBot – Home Assistant“というAPIを利用しています。ただ、APIが現在サポートしている機能は、オン・オフするアクションしかサポートしていないので、当然、プラグインで実行できる機能も”SwitchBot”製品に対するオン・オフに限られます。
プラグイン (APIも同様)では、ラズパイのBluetooth通信を介して”SwitchBot”製品にオン・オフ、押すを伝える方式なので、ラズパイに”gatttool”というユーティリティが必要です。”Raspbian“には標準でインストールされているとは思いますが、念の為に確認しておきましょう。
gatttool
sudo npm install -g homebridge-switchbot
プラグインのインストールが終わったら、”homebridge“の設定ファイルを編集します。
nano /home/pi/.homebridge/config.json
“SwitchBot – Home Assistant“用の設定ファイルの記述方法は次の通りです。
accessory “SwitchBot”固定。
name “ホーム”アプリに表示するアクセサリ名。
macAddress スイッチボットのBLE MACアドレス。※ BLEはBluetoothの規格の一部でBluetooth Low Energyの略。
スイッチボットのBLE MACアドレスは、”SwitchBot” iOSアプリでスイッチボットの設定画面 (Bot セット)の右上にある”…”をタップすると表示される画面で確認できます。
※
後でよくよく考えてみたら、”SwitchBot – Home Assistant“だとスイッチボットの状態を把握することができないので不便。なので、先日のTALK “Raspberry Pi + 人感センサーでLEDライトを自動的にオン・オフ 勿論、HomeKit対応!“で使った”homebridge-script2“の方が正解だと思います。時間がある時に変更しようと思います。
< iPhoneの”ホーム”アプリに登録する >
今回は、何もしなくても写真のように”Homebridge-xxx”が表示されました。もし、表示されなければ、” 手動でコードを入力”で、
コード(config.jsonで設定したpin)入力でアクセサリを追加、”Homebridge-xxx”をタップしてアクセサリを追加。
< ラズパイとSwitchbotを設置した玄関の様子 >
こちらが、玄関に向けて人感センサーを取り付けたラズパイ本体。人感センサーの感度と人感センサーを向ける方向の調整に関しては、何度か試行錯誤を繰り返しました。
こちらが、玄関の照明スイッチにSwitchbotを取り付けた様子です。Switchbotの粘着テープの威力が結構強力なので、取付位置の調整に少し手間取りました。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。