Raspberry Pi 3 + Motion で作り、現在テスト稼働中の事務所内監視システム。
Perl で(Raspbian にも標準で Perl は入っているのでね)イベント発生時、発生後に起動するスクリプトを書いて、
■イベント開始時(動体感知した!)
- /tmp/motion(画像保管ディレクトリ)以下の写真を /tmp/var/motion 以下に全て移動
- 動体感知した旨と、確認用の URL を載せたメールを発信
■イベント終了時(動体感知がしばらくない)
- /tmp/motion(画像保管ディレクトリ)以下の写真を /tmp/var/motion 以下に全てコピー
という動きをさせている。
/tmp/motion から /tmp/var/motion に最初に全画像ファイルを移動させているのは、一旦 /tmp/motion を空にして、あとで調査をする時、/tmp/motion 以下には「最新の動体感知イベントで撮影された写真だけ保管されている」という状態にしたかったから。
リモート接続して調査する場合、こうしておくと「取り急ぎ /tmp/motion 以下の画像データを取ってきて確認」というのが(いちいち日付をチェックしたりすることなく)迅速に可能だなっと。
ちなみに、/tmp/var/motion の下は、バッチ処理で 5日より前に作成されたデータは消すようにしている。
/tmp ディレクトリ以下は、頻繁なデータの作成、削除が SD カードにダメージを与えないように、メモリ上の仮想ディスクに作成しており、最大サイズは 64MB ほどだが、写真1枚のサイズが 10KB 程度なので、5日分だけ保持・・・の形で容量的にはまったく問題がない。
そして、管理用の CGI から、/tmp/var/motion 以下の写真・最新10枚を取り急ぎチェック出来るように CGI を作成している。
まあ、イベント終了時に最新イベントの写真を /tmp/var/motion 以下にコピーしているので、「お、メールが来た」と慌てて管理 CGI を開いたら前のイベントの写真だった・・・という可能性もあるんだけど、イベントは10秒間(多分。ちゃんと調べてないけど)動体感知できなければ終わるんで、通常は「お、メールが来た」と CGI を開いたらイベントは終わってるものと思われる。だから問題なし・・・と判断している。
もちろん「ずっとカメラの前で人が動いていて動体感知イベントが終わらない」という可能性もあるんだけど、現在うちのカメラが撮影しているのは玄関なので、忍び込んだ人間が玄関でずっと何かしてるってことないやろう(笑)
そういうのは俺の靴の匂いを嗅ぎに忍び込んできた変態女くらいで、まあ、いいよ、そういう輩は後でゆっくり逮捕してもらえば(笑)
それより、「最新10枚の写真」を掲載・・・という CGI の仕様の方が問題かも。
イベントが終了するのは、動体感知されなくなって10秒後なのだが、最新10枚だと、この「動体感知されなくなってから」の写真になってしまい、実際のところ「ドア以外何も写っていない」という写真しか見れない。
実際には、部屋の中は電気を消すと真っ暗なので、ただただ真っ暗で何も見えない写真の羅列となる。
こんな感じで(^^;
1秒間に約 2枚の写真が撮影されるんで、「動体感知しなくなって10秒後」まで撮影が続いていると、最後の 20枚は全部動体感知されていない写真ってことになる可能性があるな(^^;
スクリプト書いた時には、「最後に何もない写真が何枚か撮影される」ってことを意識してなかったので(^^;
ということでスクリプトを修正して、最新から 20枚目の写真から 29枚目までの 10枚・・・を確認できるようにした。
こんな感じね。
ただし、20枚以上写真がなければ、今まで通り最初の 10枚を表示であります。