Raspberry Pi で監視カメラ
Raspberry PiにUSBのWebCameraをつけて室内の監視カメラにしてみました。
WebCameraはこれ
LOGICOOL ウェブカム HD画質 120万画素 C270
- 出版社/メーカー: ロジクール
- 発売日: 2010/08/20
- メディア: Personal Computers
- 購入: 21人 クリック: 267回
- この商品を含むブログ (20件) を見る
アプリは motion.
sudo apt-get install motion
使い方はここを参考に設定しました。
Linux + motion + webcamでライブ監視カメラを設置する
設定ファイルは /etc/motion/motion.conf。
変更した設定はこのあたり。
#この記事を書くために見直していたらtimelapse撮影/動画生成もあるみたい
# 静止画(JPEG)はbest shotのみ保存。 output_normal best # 別PCからWebCamera映像を見れるように webcam_localhost off # 制御は別PCからできるけどuser/passwordで制限をつける control_localhost off control_authentication user_name:password
これで
http://192.168.0.2:8081/ とかでWebCameraの映像が見れるようになります。
ただ、監視カメラの目的が自分が不在時の部屋の監視なので、自分が家にいるときは撮影しなくていい。
また、そのうちドメインを取って外部から見れるようにしたいので、なおさら自分が部屋にいるときは撮る必要がない。
# セキュリティ的な見直しは必要だけれども
そこで、「自分が部屋にいるか判定」にスマホのBlueTooth接続の有無で判断するにした。
部屋にいるときは、motion を stop、いないときは motion を start させる。
まず、BlueToothアダプタはこれを購入。
PLANEX Bluetooth USBアダプター Ver.4.0+EDR/LE(省エネ設計)対応 BT-Micro4
- 出版社/メーカー: プラネックス
- 発売日: 2012/02/10
- メディア: Personal Computers
- 購入: 3人 クリック: 9回
- この商品を含むブログを見る
インストールとスマホとのペアリングは、ここを参照して実施。特に問題なく完了。
Raspberry PiでBluetoothを扱う - Programming Log
自分で仕組みを作る前にぐぐってみると、デスクトップをオフ(スクリンセーバーモードに移行?)できるアプリはあった。ただ、今回の目的には使えなさそう。
第267回 Bluetoothデバイスで離席管理する:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
「自分が部屋にいるか判定」にスマホのBlueTooth接続の有無で判断する
のにどうすれば一番いいかよくわからないけど、
力技で l2ping でスマホのBlueToothから応答があれば、部屋にいると判定して motion のプロセスを止めることにした。こんな感じ。これをrootのcronで適当な間隔で回す。
#!/bin/bash # 実際はスマホのbluetoothアドレスを設定 bt_addr='XX:XX:XX:XX:XX:XX' resp_bt=`l2ping ${bt_addr} -c 1|grep ' 0% loss'` if [ ${#resp_bt} != 0 ]; then echo "bt remote device exist." service motion stop else echo "bt remote device doesn't exist." resp_motion=`ps auxww|grep '^motion.*/usr/bin/motion'` # echo ${#resp_motion} if [ ${#resp_motion} = 0 ]; then echo "motion isn't running." service motion start else echo "motion is aleady running." fi fi
# もっとスマートに書けると思うのだが...
2014/02/01 追記
- if-else文の中身が逆になってた(orz)のを直しました。すいません。
- /var/run/motion/motion.pid ファイルが存在している場合は、motion が起動していると判断する方がセオリーぽい。
2014/04/29 追記
- l2pingだとなぜか反応がないことがあるのでhcitool nameに変更。自分の環境ではこっちの方が安定動作しています。
- motionの起動チェックは、/var/run/motion/motion.pidの存在チェックに変更
#!/bin/bash # 実際はスマホのbluetoothアドレスを設定 bt_addr='XX:XX:XX:XX:XX:XX' #resp_bt=`l2ping ${bt_addr} -c 1|grep ' 0% loss'` resp_bt=`hcitool name ${bt_addr}` #echo ${#resp_bt} if [ ${#resp_bt} != 0 ]; then echo "bt remote device exist." service motion stop else echo "bt remote device doesn't exist." # resp_motion=`ps auxww|grep '^motion.*/usr/bin/motion'` # echo ${#resp_motion} if [ -e /var/run/motion/motion.pid ]; then echo "motion is aleady running." else echo "motion isn't running now." service motion start fi fi