ラズベリーパイで猫ちゃん監視システム
空き家となっている隣家の軒先に野良猫親子が住み着くようになりその生まれたての子猫を観察したくなり、観察システムを作ってみた。
LibreOfficeのdrawというツールを使いこんな設計イメージも作ってみた。
主な使用ハードウエア
+ Raspberry Pi Model B
+ BUFFALO エアーステーション 無線LAN子機 モデル WLI-UC-GNM
+ Transcend SDHCカード 16GB Class10 TS16GSDHC10E
+ iBUFFALO マイク内蔵120万画素Webカメラ モデル BSWHD06MB
使用したOS、ツール
+ Raspbian wheezy
+ motion ver.3.2.12
+ ngrok https://ngrok.com
+ Apache2 ver.2.2.22-13+de armhf
■ Raspbianの導入
SDカードにddコマンドでダウンロードしたRaspbianを展開するわけだが、ターゲットのdiskを最初は dfコマンドにて表示される /deb/sdb1としたためなかなか導入にてこずった。結果的に/dev/sdbとしないとRaspbianが起動しないという事がネットを当たって判明した。またwhezzyを導入する前にnoobsを使用して導入したらjessieベースのRaspbianが導入され後にUSBカメラとの相性が悪くてOSはwheezyを使用することとなった。
■ USBカメラ
当初使用したハンファ・ジャパン 300万画素赤外線WEBカメラ DC-NCR300Uは上記のとおり私がやった限りjessieとの相性が悪く認識してくれなかった。amazonの通販サイトでの口コミにUVC仕様ではないとの報告があがっており、これが当てはまると判断し一旦これは返品した。代わりに購入したのはメーカーサイトでUVC準拠と謳っていたiBUFFALO マイク内蔵Webカメラ HD720p対応モデル BSWHD06MBK。このモデルは廉価なせいで赤外線ライト非装備、また非防水仕様とハンファのモデルと比べるとかなりな下位仕様。下のように夜間は映らず。
カメラは防水仕様ではないので透明のビニールをラップして簡易防水仕様へ(-_-;
日中の撮影はこんな感じ。
■外部への公開
幾つか外部サイトへの公開の方法はあるようだが一番設定が楽そうなngrokという会社の無償ツールを使い公開に成功した。”http://ngrok.com”にアクセスすると、各OS別の導入ツールが用意されているのでラズパイ用のLinux/ArmというところのDownlodというリンクをオープンする。3.5MBほどのZipファイルがダウンロードされるのでこれをラズパイ上でunzipする。参考とした日本語によるサイトはこちら。
公開サイトへの認証プロセスの設定はまだ行っていないので今後設定する必要がある。(現在は設定済み。認証サイトとするにはngrok起動時のパラメータを以下のような設定にしてアクセスする。)
$ngrok http -auth="username:password" 8081
■ 今後の改善予定
SDカードのデータ容量制限
動画だとキャプチャサイズ640×480、一秒間に20フレームの精細度で保存する場合、2秒で2メガバイトほどのファイルサイズになる。このためSDカードのファイルの定期的な消去は必須。理想的に言えば外部サーバなどに吐き出した後SDカードの画像・映像格納フォールダを空っぽにすることだと思う。例えばミラーリングツールrsyncを一日3回くらい起動しその直後にSDカードの画像フォールダを空にする、など。動体が頻繁に検知されるようだと保存される動画ファイルの容量も増えるので一日一回くらいの書き込み、消去ではSDカードの容量がいっぱいになり、最悪ラズパイが停止することもあり得る。rsyncは会社で使用しているグループウエアのバックアップとして実績がある。
https://www.run-the-earth.com/?p=4458
動体検知のメール通知
常に自分の目でスマホなどで観察する必要がなく、被写体がカメラの前に現れて動いている様子がみたいだけだ。ということで動く物体を検知するたびに検知したよ!映像はここだよ!!みたいな通知システムを作りたい。ネットで設定方法が上がっていたようなので時間を見つけて設定していきたい。
■ まとめ
一年以上も前に買ってあったRaspberry Pi model B。当初から監視カメラシステムの作成意欲はあったが、結局やらずmulti-media playerのXBMCのみ導入していた。これは導入しただけで殆ど使わずボードが宝の持ち腐れ状態。その後もRaspberry Piからみの開発の意欲もさがっていた。
ところが子猫を身近にみられる環境になった10月初めから、カメラによる監視(観察)に興味がまた湧いてきて、色々情報を集めて観察システムの構築にトライ。今日そのほぼ8割がたが完成。とてもハッピー。
ssh接続もngrok起動時パラメータを $engrok tcp 22とすることで可能なようだが、無料アカウントではhttpアクセスにプラスしてのアクセスはできないようだ。ただ何かの不具合でhttpアクセスできなくなった場合で、LAN外からssh(TCP22)アクセスしてコンフィグファイルやログファイルを調査するなんてことはできると思われる。
ngrokとの通信がかなりの頻度、確率で断絶するためログファイルを残す設定でngrokを開始することとした。そのため設定は以下の通りyamlファイルに追記することなる。
ファイルの場所: ~/.ngrok2/ngrok.yml
—- ここから —-
authtoken: 4nq9771bPxe8ctg7LKr_2ClH7Y15Zqe4bWLWF9p #これは架空のtoken
log_level: info
log_format: logfmt
log: /var/log/ngrok/ngrok.log
—- ここまで —-
ngrokのプロセスが落ちた。しかしログにはこれはなにも痕跡無し。
Connections ttl opn rt1 rt5 p50 p90
4 2 0.00 0.00 355.07 511.05
HTTP Requests
————-
GET /
GET / 200 OK
GET / 200 OK
GET / 200 OK
GET /
GET / 200 OKKilled
エラー発生。ログは以下の通り。
t=2015-11-02T11:40:45+0900 lvl=eror msg=”heartbeat timeout, terminating session” obj=csess id=1fe0371c8d7d clientid=14eed4ee104dc3dcab611cd97133fc32
内容はhearteat timeout(-_-;
ngrokツールはraspberrypi model Bに装着されたwifiネットワークアダプターでwifiルーターと通信している。
このwifiのネットワークの品質が良くない可能性が濃厚。
pingを飛ばす回数を減らすような設定にすれば接続が改善するかもしれないとのこと。
wifiではなく有線で様子をみてみるのもエラーの切り分けには良いかも。
以下はgithub上でのユーザーとngrok技術者とのやり取りの抜粋。
ngrok heartbeats its connection to the server and if it doesn’t receive a response soon enough, it kills the connection because it’s probably dead. There are two possibilities:
Your network (or VM software) or something, is not stable enough to run ngrok.
ngrok’s ping time of 20 seconds is too high for your network and if we lowered the ping time it might force your NAT/software/etc to keep the connection alive instead of killing it. This is extremely unlikely but possible and it’s worth trying to see if we can fix it. If you can figure out how to compile ngrok and change the ping time, go for it. Otherwise, email me (alan at ngrok dot com) and I’ll send you a build to try with a lower ping time.
動体を検知してからメールを飛ばす部分のプログラミングはこちらを参考にしてトライしてみたい。pythonでスクリプトを組んだ例。
http://mrt-k.hateblo.jp/entry/2014/07/01/233818
ngrokのプロセスダウンのエラーが解消した。
motion.confの設定ファイルでキャプチャーサイズを640×480にしてストリーミングしていたが、これをデフォールトの352×288に落として試してみると落ちない。もうかれこれ5時間くらい連続で撮り続けている。
室内専用のカメラなので非防水、それと夜間撮影不可。やはりもっと高機能のカメラがほしくなった。一旦は返品したハンファのカメラが最有力候補。