http://akizukidenshi.com/catalog/g/gM-08767/
これとRaspberry Piで簡易見守りシステムを作ろうと思います。Rasbperry Piの近くで人が活動したかどうかを検出して、一日に一度だけLINEに通知するシステムです。
- 毎朝6:00に見守りを開始
- 人の活動を検出したらLINEに通知して終わり
- 夜22:00まで一度も人の活動を検出しなかったらLINEに警告を通知して終わり
ポート開放やダイナミックDNSは不要です。半田付けも必要ありませんので、比較的お手軽です。
用意するもの
- 焦電型赤外線センサーモジュールSB612A
- ジャンパーケーブル(メスーメス)3本
- Raspberry Pi
- SDカードにraspbianインストール済み
- (2017-04-10-raspbian-jessie-liteを使いました)
- 有線LANまたは無線LAN
- ネットワーク環境
- インターネットに常時接続
- LINEアカウント
- メールアドレスが登録されていること
作業1 Raspberry Piにwiringpiをインストール
下記のコマンドでwiringpiをインストールします。
- sudo apt-get -y install wiringpi
作業2 人感センサーをRasbperry Piに接続
Raspberry Piをシャットダウンして電源オフにします。センサーとRasbperry Piを接続します。
- 人感センサーの+とRaspberry Piの5V
- 人感センサーの-とRasbperry PiのGND
- 人感センサーのOUTとRaspberryPiのGPIO17
Rasbperry Piを起動、ログインして、下記コマンドを実行します。
- while true; do sleep 1; gpio -g read 17; done
部屋に人が居る間は1が、部屋から人が居なくなってしばらくすると0が表示されることを確認します。うまく0に戻らないときは、DELAYダイアルを動かして調整します。部屋に居ても、動かずにじっとしていると0に戻るようです。トイレの自動点灯する照明もそうですね。DELAYは最も短い設定(2秒)でも問題ありません。
余談ですが、実験中に、部屋から出ても延々1が出続ける状況に陥りました。DELAYが長すぎるのかと思ってDELAYダイヤルをあれこれいじってみても変わりません。なぜだろうと首をひねっていたら、いつのまにか猫が部屋に居たというオチでした。人感センサーですが、当然猫にも反応しますよね。
余談ですが、実験中に、部屋から出ても延々1が出続ける状況に陥りました。DELAYが長すぎるのかと思ってDELAYダイヤルをあれこれいじってみても変わりません。なぜだろうと首をひねっていたら、いつのまにか猫が部屋に居たというオチでした。人感センサーですが、当然猫にも反応しますよね。
作業3 シナリオ作成
ブラウザからCodyl Connectにログインして簡易見守り用のシナリオを作成します。Connectのアカウント登録がまだでしたら、「新規アカウント登録はこちら」のボタンからアカウントを登録してから以下に進んでください。
- (1)シナリオタブから「新規シナリオ作成」をクリック
- (2)わかりやすいシナリオ名(例:人感センサー見守り)に変更
- (3)説明を書く
- (4)スケジュール設定を「指定時刻に一度実行」にする
- (5)実行開始時刻を6:00にする
- (6)イベントウォーク新規作成をクリック
- (7)mainの箱の下のプラス記号をクリックしてステートを追加
- (8)追加されたステート(state2)をクリック
- (9)「ステートにコネクターを追加」をクリック
- (13)メソッドに「TRIGGER: when received」を選択
- (14)message_TTLを0にする。
- (15)__output__に「人感センサーが反応しました」と入力。これが人感センサーが反応したときにLINEに通知されるメッセージになります。
- (16)「ステートにコネクターを追加」をクリック
- (17)「メソッドバスケット」を選択。リストに無ければ新規作成から「メソッドバスケット」を選択。
- (18)メソッドに「TRIGGER: at timeout」を選択
- (19)timeoutを960にする。(16時間×60=960分)
- (20)__output__に「警告:人感センサーが反応しませんでした」と入力。これが人感センサーが16時間反応しなかったときにLINEに通知されるメッセージになります。
- (21)「閉じる」をクリック
- (22)state2の下のプラス記号をクリックしてステートを追加、追加されたステート(state6)をクリック。
- (23)「ステートにコネクターを追加」をクリック
- (24)新しいコネクターを作成を選んで、「LINE通知」を選択
- (25)「アカウントに接続」をクリック
- (26)LINEの認証画面が出るので、メールアドレスとパスワードで認証した後、「1:1でLINE Notifyからの通知を受け取る」を選択。
- (27)「同意して連携する」をクリック
- (28)メソッドに「ACTION: notify」を選択
- (29)textに「{{state2.__output__}}」を入力。
- (30)「閉じる」をクリック
- (31)上部のリストからシナリオ名をクリックしてシナリオプロパティ画面に戻る
- (23)スケジュール設定を有効にする
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
## parameters to be modified | |
POST_URL=https://connect.codyltech.com/connectors/webhook/push/XXXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXX | |
GPIO_PIN=17 | |
post_webhook() | |
{ | |
# echo post | |
echo '{"pir":"1"}' | \ | |
curl -X POST -H "Content-type:application/json" -d @- ${POST_URL} | |
} | |
# | |
while true | |
do | |
GPIO_VAL=$(gpio -g read ${GPIO_PIN}) | |
# echo "${GPIO_VAL}" | |
if [ "${GPIO_VAL}" = "1" ]; then | |
# echo someone here | |
post_webhook | |
sleep 600 | |
else | |
# echo nobody here | |
sleep 1 | |
fi | |
done |
スクリプト中のPOST_URLは、WebHookコネクターの「ConnectのWebHook URL」に書き換えます。コネクター一覧から「WebHook(人感センサー)」を選択すると表示されます。
テスト実行してみます。「人感センサー簡易見守り」シナリオ の「今すぐ実行」ボタンをクリックします。
続いて、Rasbperry Piで先ほどのwebhook_pir.shを起動します。LINEに以下のような通知が届きます。webhook_pir.shはずっと動き続けますので、確認が終わったらCTRL+cで終了させましょう。
うまく動かない場合は、webhook_pir.shで何箇所かコメントアウトしてあるデバッグ用のechoコマンドを有効にして、どこまで処理が進んでいるか確認してみましょう。
自動起動
- crontab -e
- @reboot /home/pi/webhook_pir/webhook_pir.sh > /dev/null 2>&1 &
同じようなものを作って試験していますが、1日24時間、数年間以上使用する場合の発火の可能性について心配しています。何かご存じありませんか?
返信削除コメントありがとうございます。確かに心配ですね。この手の電子工作の発火のリスクについては誰も保証してくれないので、あくまで自己責任になります。申し訳ありませんが、定量的な判断ができるだけの情報は持ち合わせておりません。可能性の有無で論ずるなら、「有る」と考えるべきだと思います。その上で、燃えやすいものの近くに置かないとか、電源や配線を定期的にチェックするなど、リスクを下げる努力は必要と思います。
削除お答えになっていなくてすみません。
最近になりこの記事をもとに見守りシステムの構成を始めました。自動起動だけうまくいきません。なにか気をつけるべき点などありましたら情報をいただけませんでしょうか?
返信削除コメントありがとうございます。
削除自動起動以外はうまくいくということですので、cronの設定に問題があるのだと思います。
(1)
crontab -l
で、cronの設定が正しく反映されているかを確認してください。
(2)
スクリプトファイルのフルパスが、cronに設定したフルパスと同一であるか確認してください。crontab -l の結果からコピペして、ls -l コマンドで確認してみてください。
ls -l $HOME/webhook_pir/webhook_pir.sh
(3) crontab -e で設定するスクリプトファイルのフルパスを$HOMEを使わず、そのままフルパスを記述してみてください。
@reboot /home/pi/webhook_pir/webhook_pir.sh > /dev/null 2>&1 &
上記のいずれでも解決しない場合は、cronのトラブルシュートが必要です。下記の記事を参考にして、/var/log/cron.logに出力される内容を確認してみてください。
http://min117.hatenablog.com/entry/2017/08/26/110104
cron.logが採取できたら、またコメントにて情報いただけると何が悪いか助言できるかもしれません。うまく自動起動できるようになると良いですね。
早速のご返信ありがとうございます。
削除(3)の表記で改善しました。
本当に助かりました。
改善して良かったです。コメントありがとうございます。他に同じように動作しなくて困って居る人の助けになるかもしれませんので、このようなコメントは歓迎します。
削除cronで$HOMEが正しくセットされた状態になるかどうかは、もしかしたらraspbianのバージョンなどによって違うかもしれませんので、本文の方にも注釈をいれておこうかと思います。