新しいラズパイ4で動体検知カメラ motion + LINE Notify + Node-RED を試してみる (2)
“新しいラズパイ4で動体検知カメラ motion + LINE Notify + Node-RED を試してみる (1)”の続きです。
新しく買った”Raspberry Pi 4″と手元にあった”LABISTS Raspberry Piカメラモジュール 1080P 5M OV5647センサー ケース付き“を使って動体検知カメラ、そして”LINE Notify“と”Node-RED“を絡めた電子工作に挑戦しています。
前回のTALKでは、ラズパイで動体検知カメラの定番ソフトウェア”Motion“のセットアップについてお話しましたので、今回はその続きです。
< LINE Notifyのアクセストークンを取得する >
“LINE Notify“とは、Webサービスからの通知を公式アカウント”LINE Notify”を通じて”LINE“で受信するサービスです。”Webサービス”という箇所を”ラズパイ”と置き換えれば、今回やろうとしていることをイメージできるかと思います。
“LINE Notify”を利用するためには、以下の手順で、アクセストークンを取得する必要があります。
“LINE Notify“にアクセスして、ご自身の”LINE“アカウントでログインして下さい。ログイン後、”マイページ”に移動します。
“マイページ”の”アクセストークンの発行(開発者向け)”欄にある”トークンを発行する”ボタンをクリックして下さい。
“LINE Notify”のAPI仕様は、”LINE Notify API Document”で閲覧できます。
トークン名は”LINE”のトーク画面に表示される通知の発信者名です。自分自身のアカウントに対して通知する場合は、”1:1でLINE Notifyから通知を受け取る”を選択して下さい。
“発行する”ボタンをクリックすると、アクセストークンが発行されます。アクセストークンは、以降、画面には表示されませんので、このタイミングに必ずメモって下さい。
発行済みのトークンを削除する場合は、”マイページ”で”解除”ボタンをクリックします。
発行済みのアクセストークンが使えることを確認しておきましょう。
ラズパイのターミナル画面で以下のコマンドを入力すると、”LINE”のトーク画面に”メッセージ”という通知が届くはずです。
curl -X POST -H 'Authorization: Bearer アクセストークン' -F 'message=メッセージ' https://notify-api.line.me/api/notify
※ ネット検索すると、コマンドではダブルコーテーションを使ったサンプルを多く見かけます。具体的な理由は分かりませんが、POOHの環境ではうまく実行できず、上記のようにシングルコーテーションであれば正常に動作したので、以降、シングルコーテーションを使ったサンプルを掲載します。
< LINE NotifyのAPIで画像付きメッセージを通知する >
“LINE”のトーク画面にメッセージを送れるようになったので、今後は画像付きのメッセージを送ってみましょう。
先程のコマンドに、画像ファイルの保存先を示す”imageFile=”を追記するだけです。
curl -X POST -H 'Authorization: Bearer アクセストークン' -F 'message=メッセージ' -F 'imageFile=@画像ファイルの保存先' https://notify-api.line.me/api/notify
サンプルのシェルスクリプトでは、ラズパイで撮影した静止画を、”メッセージ”という文言と合わせて送信するコードです。
< Motionで動体検知した画像データをLINEで通知する >
それでは、今回のメインテーマである動体検知した画像をLINEに通知する仕組みを作ります。仕組みと言っても、実は”Motion”の設定ファイルにコマンドを追記するだけです。
sudo nano /etc/motion/motion.conf
“Motion”で動体検知したタイミング (イベント発生時)に実行するコマンドを、”on_picture_save”の”value”部分に記述すると、”Motion”自身がそのコマンドを実行してくれます。これは便利ですよね。ちなみに、動画を送る場合は、”on_motion_detected”というイベントを利用します。
画像の保存先に”@%f”を指定しておくと、”Motion”の設定ファイルの”target_dir”項目で設定したパスが自動的に挿入されます。これも便利!
on_picture_save curl -X POST -H 'Authorization: Bearer
アクセストークン
' -F 'message=画像を送ります' -F 'imageFile=@%f' https://notify-api.line.me/api/notify
設定が完了した後、ラズパイを再起動すれば、早速、動体検知した画像がLINEに届くようになります。
ただ、”Motion”の設定ファイルの”event_gap”、”threshold”、”output_pictures”に各項目を適切な値にチューニングしていないと、とんでもない量の通知が一度に届いてしまいます。”LINE Notify”のしきい値で一定量以上の通知があると制限が掛かるので、無限ループ状態になることはありませんが、同じような画像が大量に送られるとなると、スパムと同じことになってしまいます。ですので、本番稼働前に、必ず設定値のチューニングは済ませておいて下さい。
こちらのサンプルは、”output_pictures”項目を”best”に設定した際の画像です。動体検知イベントのうち最もピクセル数に変化が見られた場面を、しっかり捉えていますよね。
< Node-REDのノードでLINE Notifyを体験してみる >
以上で、今回のテーマはクリアできたわけですが、折角なので、”Node-RED”を使った”LINE Notify”を体験してみることにします。
今回利用するのは、”node-red-contrib-line-notify“というノードです。
今回はノードの使い勝手を確認するだけなので、”inject” – “line notify” (“node-red-contrib-line-notify”) – “debug”ノードを単純に接続したフローを作りました。
“line notify”ノードのプロパティ画面で、”トークン”欄の右側にある鉛筆アイコンをクリックします。
こちらの画面で、”LINE Notify”でアクセストークンを発行した際に設定したトークン名と、発行されたアクセストークンを入力します。これで準備完了です。
設定はとても簡単で、画像付きのメッセージを通知する場合は、”フルサイズ”欄に送信する画像ファイルのURLを入力します。
ステッカー付きのメッセージを通知する場合は、”ステッカー”欄に送信するステッカーの”PackageID”と”ID”入力します。
ステッカーの定義情報は、”こちら” (PDF)を参照して下さい。
メッセージは勿論のこと、画像ファイルのURL、ステッカーの種類のいずれも、前方のノードからのmsg変数で設定することもできるので、いろいろと応用が効きそうですね。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。