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]“が手元にあったことを思い出し、ここは電子工作した方が面白そうということで、

SwitchBot スイッチボット スイッチ ボタンに適用 指ロボット スマートホ ーム ワイヤレス タイマー スマホで遠隔操作 アレクサ、Google home、 HomePod、IFTTTに対応(ハブ必要)

を購入することにしました。

 

< ラズパイと人感センサー、スイッチボットのセットアップ >

・人感センサーを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“でベストショットな写真素材を販売中です。是非ご覧下さい。

tomohiko

長年に渡りMacintosh向けの自作アプリを作り続けているPOOHです。最近はiPhone,iPad向けアプリ開発にも挑戦中。グルメ、旅行、露天風呂、写真、サイクリング、映画、STAR TREKが大好き。レトロでSFなおもちゃを大量にコレクション。プレーリードッグと同居中。

おすすめ

コメントを残す