Видеонаблюдение.

В сегодняшнем видео я рассказал о видеонаблюдении, и затронул скрипты которые работают совместно с моей камерой (Foscam FI8918W).
Ими я и хочу поделится с вами.
Ваши идеи и предложения пишите в комментариях.

Скрипт для патруля камеры.
(/usr/local/bin/cam_patrol)

#!/bin/bash

# Variables
#start Posirion
SP=1
#forward (0:1)
F=1
#Last camera position
END_POS=3
#Timer wait camera snap (seconds)
SNT=2
#Timer wait camera motion (seconds)
MT=10

echo "==================================================="
echo "Start camera control $(date)"
echo "Start position : $SP"
echo "Direction motion: $F"
echo "Timers: Snap_time: $SNT, Motion_time: $MT"
echo "==================================================="
while :
do
MSP=$SP
if [ "$F" = "1" ]; then
 echo "Motion: L to R --> "
 SP=$(($SP+1))
 if [ "$SP" = "$END_POS" ]; then.
  echo "End position [$END_POS], change direction <--"
  F=0
fi
else
 echo "Motion: R to L <-- "
 SP=$(($SP-1))
 if [ "$SP" = "1" ]; then
  echo "Start position [$SP], change direction -->"
  F=1
 fi
fi
echo "Snap..."
/usr/local/bin/cam snap $MSP
sleep $SNT
echo "Motion..."
/usr/local/bin/cam go $SP
sleep $MT
echo "==================================================="
done

Скрипт для управления камерой он же (/usr/local/bin/cam)

#!/bin/bash
[ -z "$1" ] && exec $0 h

#CAMERA auth data
user="admin"
pass="password"
#CAMERA ip address
ip="192.168.1.100"
####################################
####################################

addy="http://${ip}"

arg=$#
while [ "$arg" -ne "0" ]; do

case "$1" in

go)
echo "Setup position: $2"
[ $2 = 1 ] && wget -q -O - "${addy}/decoder_control.cgi?command=31&user=${user}&pwd=${pass}"
[ $2 = 2 ] && wget -q -O - "${addy}/decoder_control.cgi?command=33&user=${user}&pwd=${pass}"
[ $2 = 3 ] && wget -q -O - "${addy}/decoder_control.cgi?command=35&user=${user}&pwd=${pass}"
[ $2 = 4 ] && wget -q -O - "${addy}/decoder_control.cgi?command=37&user=${user}&pwd=${pass}"
[ $2 = 5 ] && wget -q -O - "${addy}/decoder_control.cgi?command=39&user=${user}&pwd=${pass}"
[ $2 = 6 ] && wget -q -O - "${addy}/decoder_control.cgi?command=41&user=${user}&pwd=${pass}"
[ $2 = 7 ] && wget -q -O - "${addy}/decoder_control.cgi?command=43&user=${user}&pwd=${pass}"
[ $2 = 8 ] && wget -q -O - "${addy}/decoder_control.cgi?command=45&user=${user}&pwd=${pass}"
[ $2 = 9 ] && wget -q -O - "${addy}/decoder_control.cgi?command=47&user=${user}&pwd=${pass}"
[ $2 = 10 ] && wget -q -O - "${addy}/decoder_control.cgi?command=49&user=${user}&pwd=${pass}"
[ $2 = 11 ] && wget -q -O - "${addy}/decoder_control.cgi?command=51&user=${user}&pwd=${pass}"
[ $2 = 12 ] && wget -q -O - "${addy}/decoder_control.cgi?command=53&user=${user}&pwd=${pass}"
[ $2 = 13 ] && wget -q -O - "${addy}/decoder_control.cgi?command=55&user=${user}&pwd=${pass}"
[ $2 = 14 ] && wget -q -O - "${addy}/decoder_control.cgi?command=57&user=${user}&pwd=${pass}"
[ $2 = 15 ] && wget -q -O - "${addy}/decoder_control.cgi?command=59&user=${user}&pwd=${pass}"
[ $2 = 16 ] && wget -q -O - "${addy}/decoder_control.cgi?command=61&user=${user}&pwd=${pass}"
shift; shift; arg=$(($arg - 2));;

ir)
[ $2 = on ] && wget -q -O - "${addy}/decoder_control.cgi?command=95"
[ $2 = off ] && wget -q -O - "${addy}/decoder_control.cgi?command=94"
shift; shift; arg=$(($arg - 2));;

snap)
 echo "Snap position: $2"
 snapfile=`date +%s`
 mkdir -p /opt/snap/`date +%Y%m%d`/$2
 wget -q -O ${snapfile}.jpg "${addy}/snapshot.cgi?user=${user}&pwd=${pass}"
 dates=$(stat ${snapfile}.jpg | grep Modify | cut -d ' ' -f 2,3 | cut -d ':' -f1,2)
 convert ${snapfile}.jpg -gravity SouthEast  -pointsize 22 -fill white -annotate +30+30  "$dates (P:$2)" /opt/snap/`date +%Y%m%d`/$2/${snapfile}.jpg;
 rm -f ${snapfile}.jpg
 /usr/local/bin/upload_web /opt/snap/`date +%Y%m%d`/$2/${snapfile}.jpg
 echo "snap: OK"
shift; shift; arg=$(($arg - 2));;

esac
done

Пояснение:
В начале стоит заглушка от многократных запусков.
Указываются сразу логин — пароль и ip камеры, и скрипт готов к работе.
В аргументе snap используется аплоадер (/usr/local/bin/upload_web) изображений на веб сервер.
входные аргументы:
go %1-16% — движение камеры к позициям от 1 до 16
snap %POS% — снапшот с номером позиции (тут добавляется еще время и дата)
ir %on-off% — включение и отключение подсветки ИК

Аплоадер (/usr/local/bin/upload_web)
Входящая переменная есть путь до файла снапшота.

#!/bin/bash

pth=$1

curl -i \
  -F "prefix=SALT" \
  -F "filecomment=This upload current state" \
  -F "image=@$pth" \
  http://www.URL.domain/cam_uploader.php

Веб скрипт (cam_uploader.php)
Во стороны вебсервера скрипт очень простой и примитивный, служит только для загрузки файла.

$uploaddir = '/var/www/domain/cam/';
$uploadfile = $uploaddir . "camera.jpg";
if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {
    echo "OK\n";
} else {
    echo "ERR\n";
}

Ну и для видео архива используется простой скрипт (/usr/local/bin/cam_video)

#!/bin/bash

name="`date +%Y-%m-%d_%H.%M`"
BASEpath='/opt'
RECdate=`date +%Y-%m-%d`
user='admin'
pass='password'
ip='192.168.1.100'
port='80'
RECpath=$BASEpath'/video/cam01/'$RECdate

mkdir -p $RECpath > /dev/null
ffmpeg -i http://${user}:${pass}@${ip}:${port}/videostream.asf -r 30  -vcodec copy -an -t 300 $RECpath/$name.mp4 /dev/null 2>/tmp/cam01.log &

Что хочу подчеркнуть в отдельные переменные не вынесены параметры ffmpeg если, кто захочет сделает сам.
Подсказка:
«-r 30» — фреймрейт
«-an» — без звука
«-t 300» — длительность 5 минут

Вроде всё, теперь поговорим о запуске.

Стартуют скрипты в скрине

screen -d -m /usr/local/bin/cam_patrol

Видео запись стартует по крону (/etc/cron.d/cam_video
) с переодичностью в 5 минут, что позволяет закончить предыдущую запись и начать новую.

*/5 *   * * *   root   /root/cam_video

На этом всё.
Делайте свои камеры умными.
И наслаждайтесь технологиями.
Ждите следующих видео!
Не забудьте подписаться на канал!