2016年2月28日日曜日

FON2303D とウェブカメラで無線 LAN 監視カメラへ

FON2303D の使い道を求めてウェブカメラを取り付けて、監視カメラへ仕立ててみました。

FON2303D には USB ポートが設置されています。今までは、ここへ USB メモリなどのストレージ類を装着してネットディスクとして活用を図ってきました。今回は新しいチャレンジとしてウェブカメラを装着してみました。

FON2303D へウェブカメラを取り付けて監視カメラとしたところです。

ウェブカメラの認識

FON2303D へインストールしている OpenWrt Chaos Calmer 15.05にウェブカメラを認識させました。必要なカーネル・モジュール類をインストールしました。なおインストールにあたって FON2303D の OpenWrt を初期化しておきました。ここでは、UVC タイプのウェブカメラの使用を想定しています。
# opkg update
# opkg install kmod-video-uvc

今回使用したウェブカメラはバッファロー BSW13K06H です。デバイス ID が 058f:3831 となっており Alcor Micro Corp の製品のようです。メーカや外観は異なっていても、内部のカメラユニットを他社のものからそのまま利用している製品が多いようです。

このウェブカメラを USB ポートへ接続すると /dev のところへ video0 が発生して、ビデオ画像を入力できるようになりました。
# ls /dev | grep video0
video0

なお他のウェブカメラとしてバッファロー BSW3K04H (093a:2620)も使用してみましたが、認識させることができませんでした。このウェブカメラのデバイス ID (093a:2620)でネット上を検索してみると、数多くの情報を発見することができましたが、カーネル・モジュールの kmod-bideo-gspca-pac7311 (pac7302) のインストールでは解決できませんでした。

監視カメラ・ソフトウェア motion のインストール

監視カメラとして動体検知機能のある motion をインストールしました。以前にも少し motion を使って遊んだことがあったため、迷わずこの motion を使用しました。
# opkg install motion

なお動体検知を行ったときに連続した静止画を動画にする ffmpeg をインストールしていません。FON2303D には 8MB のフラッシュメモリが搭載されていますが、4MB 超の ffmpeg (Full) をインストールすることが出来なかったためです。このことから動画作成は行わないこととしました。

motion の設定

インストールの終わった motion の設定を行いました。
設定ファイルが /etc/motion.conf としてインストールされています。この場所は標準的な motion の設定ファイルの場所(/etc/motion/motion.conf)ではないため、移動させておきました。
# mkdir /etc/motion
# mv /etc/motion.conf /etc/motion/

設定ファイルにはいくつもの設定項目が存在しますが、次の二つの項目だけは "on" から "off" へ変更しておきます。これで他のパソコンから現在の画像を閲覧したり、ブラウザ上から各種の設定が行えるようになります。その他の設定項目についてはネット上を「motion.conf」などをキーワードにして検索してください。
vi /etc/motion/motion.conf

stram_localhost off
webcontrol_localhost off

動作確認

motion を起動させます。
# motion

パソコンのブラウザから FON2303D の IP アドレスの 8081 ポートへアクセスして、現在の画像が閲覧できるか確認してみました。ポート番号を指定する場合には、IP アドレスの後ろにコロン " : " を挟んでポート番号を記述します。
http://IP-address:8081/

motion の設定をブラウザ上から行うときには FON2303D の IP アドレスの 8080 ポートへアクセスします。
http://IP-address:8080/

無線 LAN で接続

有線 LAN からのアクセスではなく、無線 LAN を経由して画像を送信できるようにします。方法は、以前行った中継器(リピータ)の設定をそのまま行っただけです。この記事では中継器(リピータ)の設定方法は割愛します。
FON2100E をリピータ(中継器)にしました
http://near-unix.blogspot.jp/2016/02/fon2100e.html

画像をネットディスクへ保存

動体検知した画像を保存するには FON2303D の RAM やフラッシュメモリは小さすぎます。そこで我が家の LAN 内にあるネットディスク(SAMBA)へ画像を保存させることとしました。

ネットディスクへ画像を保存するために必要なカーネル・モジュール類をインストールしました。
# opkg install kmod-fs-cifs
# opkg install kmod-nls-utf8 kmod-nls-base kmod-crypto-hmac kmod-crypto-md5 kmod-crypto-misc cifsmount

起動時に自動的にネットディスクへ接続できるように設定しました。一般的な Linux システムでは fstab で設定するところですが、私は上手く fstab で設定することができなかったため hotplug のシステムで接続するようにしました。以下の OpenWrt の掲示板を参考にしました。
Fstab not mounting cifs at boot or through CLI (Page 1)
https://forum.openwrt.org/viewtopic.php?id=32812

hotplug のスクリプトを "21-cifs-mount" として、以下のようにスクリプトを作成しました。ネットディスクのマウントポイントは /cifs としてあります。
# vi /etc/hotplug.d/iface/21-cifs-mount
#!/bin/sh
# This script is executed as part of the hotplug event with
# HOTPLUG_TYPE=iface, triggered by various scripts when an interface
# is configured (ACTION=ifup) or deconfigured (ACTION=ifdown).  The
# interface is available as INTERFACE, the real device as DEVICE.

[ "$DEVICE" == "lo" ] && exit 0

[ -f /etc/functions.sh ] && . /etc/functions.sh

#/usr/bin/logger hotplug.d iface : ACTION=$ACTION INTERFACE=$INTERFACE DEVICE=$DEVICE

case "$ACTION" in
  ifup)
    if [ "$DEVICE" == "wlan0" ]; then
      /bin/mount -t cifs //ネットディスク IP アドレス/共有名(/ディレクトリ名) /cifs -o user='ユーザ名',password='パスワード'
    fi
    ;;
  ifdown)
    if [ "$DEVICE" == "wlan0" ]; then
      /bin/umount  /cifs
    fi
    ;;
esac
(注意)このスクリプトでは中継器の設定がしてあることを前提にしています。有線 LAN で接続するときには、スクリプト中の wlan0br-lan へ変更してください。

ネットディスクのマウントポイントの /cifs を作成しました。
# mkdir /cifs

設定が終わったところで FON2303D の電源を遮断した後、再度投入して、/cifs へネットディスクの所定のディレクトリがマウントされているか確認しました。
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                    4672      1008      3664  22% /
/dev/root                 2304      2304         0 100% /rom
tmpfs                    30856        60     30796   0% /tmp
/dev/mtdblock6            4672      1008      3664  22% /overlay
overlayfs:/overlay        4672      1008      3664  22% /
tmpfs                      512         0       512   0% /dev
//netdisk/share/motion
                     1888130732 1542057080 195023196  89% /cifs

動体検知で確認

再度 motion を起動させます。
# motion

ウェブカメラの前で手を振るなどして動体検知に検出されるようにします。これでネットディスクの所定の場所へ保存されることを確認しました。

動作確認が出来たところで、motion をバックグラウンドで動作するように設定しました。これで次回以降 motion を起動させるとバックグランドでデーモンとして動作します。
# vi /etc/motion/motion.conf

daemon on

この記事では motion の起動を手動で明示的に起動させることとしています。自動起動させる場合には、起動スクリプトを作成してください。


0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。