Raspberry Pi + 人感センサーでLEDライトを自動的にオン・オフ 勿論、HomeKit対応!

Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (1) “Raspberry Pi 4 セットアップ”
Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (2) “homebridgeでHomeKit対応”
Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (4) “人感センサーで照明を自動制御””の続きです。

 

先日、現在稼働中のラズパイ環境の整理整頓を目的に、これまで稼働していた全てのサービスを”Raspberry Pi 4“に移行するというTALKを計6回に渡りお話してきました。その際、移行の成果のひとつとして、”Raspberry Pi 3 B“が2台余ったこともお伝えしました。うち1台は開発用として再構築し、

残り1台は、女房のデスクに取り付けようと、昨年、アマゾンのタイムセールで1個800円ぐらいで買った

LED バーライト キッチンライト 棚下ライト 高輝度 直管形LEDランプ スリムライト Miyasora 壁掛け式 キッチン照明 USBライト 30cm 3Mテープ マゲネット 貼り付け スイッチ付き” (以下、LEDライト。)

をベースに、アップルの”HomeKit“対応を前提に、人感センサーでLEDライトを自動的にオン・オフする仕組みを作ってみることにしました。

 

< Raspberry PiのUSB電源を制御する >

購入したLEDライトは、USBで電源供給するタイプです。このLEDライトのグッドポイントは、ケーブルの中間にある物理的なスイッチでオン・オフするレガシィな仕様なので、スイッチでオンの状態でUSBケーブルを抜けば照明は消え、USBケーブルを挿せば照明が点灯する点です。つまり、USBの電源供給を入り切りすることでLEDライトを制御できるわけです。これが電子的なスイッチですと、USBケーブルを抜くと照明は消えますが、再びUSBケーブルを挿しても照明は点灯しません。

 

つまり、Raspberry PiのUSBポートの電源供給をコントロールできれば、USBポートに挿したLEDライトをオン・オフできるわけです。

実は、過去に同じような仕組みで卓上のミニ扇風機をRaspberry Piでコントロールした経験 (“Raspberry Piで航空機のADS-Bを受信してみました “USBポートの制御 hub-ctrl ミニ扇風機” (10)“)があるので、今回もその経験を活かして対応することにしました。

今回の仕組みのために、写真のような開発環境を作りました。本体は余っていた”Raspberry Pi 3 B“、アマゾンで3個800円で買ったHiLetgo® 3個セット HC-SR501人体赤外線感応モジュール 人体の赤外線の感応器 [並行輸入品]をRaspberry PiのGPIOに接続、USBポートにお手製のLEDを繋げました。

人感センサーの接続方法については、“Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (4) “人感センサーで照明を自動制御””をご覧下さい。

 

Raspberry PiのUSBポートの電源制御には、”hub-ctrl”を利用します。古いソフトですが、なかなか重宝します。

sudo apt-get install libusb-dev

wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c

gcc -O2 hub-ctrl.c -o hub-ctrl-armhf-static -lusb -static

sudo cp hub-ctrl-armhf-static /usr/local/bin/hub-ctrl

 

Raspberry PiのUSBポートは、写真の左上から反時計回りに、Port 2, 3, 5, 4という配置になっています。ちなみに、Port 1はLAN用だそうです。

コマンドで各USBポートの電源供給に関する情報をチェックしてみます。

sudo hub-ctrl -v”

 

“hub-ctrl”で、USBポート電源のオンとオフを試してみます。”b”が”Bus”、”d”が”Device”、”P”が”Port”の設定パラメータです。最後の”p”をゼロにすれば電源オフ、”1″にすれば電源オンといった制御ができる仕様になっています。ただ残念なことに、”hub-ctrl”では個別のポート毎に電源の制御はできません。つまり、”p”の値に係わらず、4個のUSBポートを一括でしかオン・オフできません。

sudo hub-ctrl -b 1 -d 2 -P 2 -p 0

sudo hub-ctrl -b 1 -d 2 -P 2 -p 1

 

< 人感センサーでUSB電源を制御する >

それでは、人感センサーでUSBポートに接続したLEDライトのオン・オフする仕組みを作っていきましょう。人感センサーをRaspberry Piに接続する詳しい手順は、“Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (4) “人感センサーで照明を自動制御””をご覧下さい。

 

まず始めに、人感センサーの検出結果に応じたUSB電源ポートの制御を行うスクリプトを用意します。スクリプトの骨格は、人感センサーで”Philips Hue“を制御する際に書いたスクリプトと同じです。

sudo nano /home/pi/pir_sensor_usb.sh

今回のスクリプトのポイントは、

 

人感センサーが人を検出しなかった時にUSB電源ポートをオフするために、

command_off="sudo hub-ctrl -b 1 -d 2 -P 2 -p 0"

eval $command_off

 

人感センサーが人を検出した時にUSB電源ポートをオンするために、

command_on="sudo hub-ctrl -b 1 -d 2 -P 2 -p 1"

eval $command_on

 

というコードに変更した点です。

 

< 人感センサー用スクリプトを自動実行 >

ラズパイを起動したり、リスタートする都度、スクリプトを実行し直すのは面倒なので、以下の手順で自動実行するよう設定をしておきます。

・サービスファイルを作成します。

sudo nano /etc/systemd/system/pir_sensor_usb.service

 

・サービスを有効にします。

sudo systemctl daemon-reload

sudo systemctl enable pir_sensor_usb.service

sudo systemctl start pir_sensor_usb.service

 

・サービスが動いていることを確認します。

sudo systemctl status pir_sensor_usb.service

 

念の為、ラズパイを再起動後、ちゃんと実行されているか確認しておきます。

これで、人感センサーによるLEDライトの自動オン・オフ制御機能が完成しました。

journalctl -u pir_sensor_usb.service

 

< LEDライトのオン・オフをアップルのホームアプリ HomeKitに追加する >

折角なので、LEDライトのオン・オフと照明の状態を、アップルの”ホーム”アプリで行えるようにしておきます。

homebridge“をインストールしますが、今回のTALKではインストール手順を割愛しますので、詳しくは“Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (2) “homebridgeでHomeKit対応””をご覧下さい。”homebridge“の自動起動についても同様です。

 

今回利用する”homebridge“のプラグインは、”Homebridge-Raspberry-Pi-USB-Power-Control“で紹介されている”homebridge-script2“です。

sudo npm install -g homebridge-script2

プラグインのインストールが終わったら、”homebridge“の設定ファイルを編集します。

nano /home/pi/.homebridge/config.json

homebridge-script2“用の設定ファイルの記述方法は次の通りです。

accessory   “Script2″固定。

name            “ホーム”アプリに表示するアクセサリ名。

on                   アクセサリをオンにするスクリプトの保存場所。

off                   アクセサリをオフにするスクリプトの保存場所。

fileState        アクセサリの状態を示すフラグファイルの保存場所。

on_value      “fileState”と組み合わせて使用。この値が”true” (デフォルト)の場合は、”fileState”にセットしたフラグファイルが存在すればアクセサリがオンの状態であると判定する。

 

“on”項目に設定したスクリプトファイルには、以下のように記述します。”ホーム”アプリでアクセサリをオンにすると、フラグファイルを置き、USBポートの電源を入れる”hub-ctrl”コマンドを発行します。

 

“off”項目に設定したスクリプトファイルには、以下のように記述します。”ホーム”アプリでアクセサリをオンにすると、フラグファイルを削除し、USBポートの電源を入切る”hub-ctrl”コマンドを発行します。

 

続いて、先程作成した人感センサー用のスクリプトに、人感センサーが検知した結果に示すフラグファイル周りの記述を追記します。人感センサーが人を感知しなくなったらフラグファイルを削除し、人感センサーが人を感知したらフラグファイルを置くといった処理を追加しました。

 

ここまでの作業が完了したら、一旦、ラズパイを再起動した後、”homebridge“の状態を確認してみましょう。ログ上で、プラグインが正常に読み込まれたいることを確認できれば問題ないはずです。

journalctl -u homebridge

 

< iPhoneの”ホーム”アプリに登録する >

今回は、何もしなくても写真のように”Homebridge-xxx”が表示されました。もし、表示されなければ、” 手動でコードを入力”で、

コード(config.jsonで設定したpin)入力でアクセサリを追加、”Homebridge-xxx”をタップしてアクセサリを追加。

今回は、序にラズパイのCPU温度も表示するようにしておきました。ラズパイのCPU温度の表示方法は、“Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (2) “homebridgeでHomeKit対応””をご覧下さい。

 

 

 

 

ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。

tomohiko

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

おすすめ

コメントを残す