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 で接続するときには、スクリプト中の wlan0 を br-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 の起動を手動で明示的に起動させることとしています。自動起動させる場合には、起動スクリプトを作成してください。