RaspberryPiで動体検知してLINEに画像を送信

RaspberryPiで動体検知してLINEに画像を送信

ラズパイ+カメラ+motionを使った動体検知の結果をLINEに通知する手順メモ。

以前、自宅玄関付近の動体検知結果をslackに送信していたものの、家族でslackを使っているのは自分だけでいまいち実用性に欠けてたやつのLINE通知版。

材料

手順

ラズパイの初期設定

$ sudo apt-get upgrade
$ sudo apt-get update

cameraとsshを使用可に設定

$ sudo raspi-config

カメラの動作確認

$ raspistill -o test.jpg

motionのインストール

$ sudo apt-get install motion

motionの設定

$ sudo nano /etc/motion/motion.conf

  • daemon on *motionをバックグラウンドで動作させるためにon。
  • threshold 3000 *検知の際のしきい値(ピクセル数)。
  • locate_motion_mode on *変化のあった部分に枠を表示。
  • ffmpeg_output_movies off *動画は作成しないのでoff。
  • target_dir /tmp/motion *画像保存先フォルダ。
  • output_pictures best *検知中に変化量が最大の画像を保存する。
  • event_gap 60 *次の動体検知までの間隔(秒)。
  • stream_localhost off *映像画面の外部アクセスを許可する。

motionの自動起動設定(RUN LEVEL2,3,4,5をONにする)

$ sudo apt-get install sysv-rc-conf
$ sudo sysv-rc-conf

motionをデーモンで起動するように設定

$ sudo nano /etc/default/motion

  • start_motion_daemon=yes

再起動して確認

$ sudo reboot
$ ps aux | grep motion

ブラウザで確認

http://{ホスト名}.local:8081

motionの起動、再起動、停止

$ sudo motion -c /etc/motion/motion.conf
$ sudo service motion start
$ sudo service motion restart
$ sudo service motion stop

LINE Notifyのトークンを取得

LINE Notifyで、LINEに通知を送るためのアクセストークンを設定して取得。

https://notify-bot.line.me/my/

「トークンを発行する」を選択。

トークン名(通知時のタイトル)を指定し、送信先のグループを指定。

これでLINE Notifyは設定完了。

LINEのグループにはメンバーとして「LINE Notify」を追加する。

画像ファイルをLINEにポストする

post2line.sh

#!/bin/bash
# -*- coding: utf-8 -*-
token="{LINE Notify アクセストークン}"
DIR=/tmp/motion
for path2file in $DIR/*; do
  curl -X POST -H "Authorization: Bearer ${token}" -F "message = detect!" -F "imageFile=@${path2file}" https://notify-api.line.me/api/notify
  rm -f $pathfile
done

motionの検知後動作にpost2line.shを設定。

$ sudo nano /etc/motion/motion.conf

  • on_picture_save sh /home/pi/post2line.sh

/tmp/motion のオンメモリ化

SDカードの寿命を考慮して画像保存パスはオンメモリ化しておく。

ポストされた様子

以上!