\section{Логическое подключение}

\subsubsection{Установки по умолчанию}

Если камера попала к Вам из магазина - у вас стоят настройки по
умолчанию. Если же Вы получили уже настроенный аппарат, к которому у Вас
нет пароля, либо забыли собственный пароль - на задней стенке корпуса
камеры существует утопленный в корпус переключатель. Если нажать на него
и подержать несколько секунд\footnote{не менее 3х, поскольку просто
нажатие reset предназначено для обычной перезагрузки. Хотя я и не видел
ситуаций когда она бы понадобилась - камера  у меня не зависала ни разу},
то настройки вернутся к заводским.

\subsubsection{Получение доступа к камере}

\paragraph{Документация\\}

Можно пойти путем чтения документации, где, наверняка, написано, какой
адрес получает камера после сброса к заводским установкам, а можно
получить немного больше информации, параллельно выяснив адрес камеры. Я
воспользовался вторым способом.

\paragraph{Своими руками\\}

Открываем в X окошко с терминалом (konsole, xterm, rxvt and so on),
делаем 'su -', после получения приглашения пользователя с правами root
запускаем ethereal (или tcpdump - на любителя).\\ Переменная DISPLAY у
меня выставляется правильно по умолчанию. Если у Вас возникли проблемы с
запуском ethereal из под root, возможно, дело в переменной DISPLAY. 

Она должна быть такой же, как и в терминале до запуска 'su -'. Возможно 
потребуется также сказать от имени пользователя 'xhost + 127.0.0.1'. Вот
пример: 

\begin{verbatim}
----------------- [ 03:53:28, olli@skylab, ~  ]
$ xhost + 127.0.0.1
127.0.0.1 being added to access control list
----------------- [ 03:53:47, olli@skylab, ~  ]
$ echo $DISPLAY
:0.2
----------------- [ 03:53:51, olli@skylab, ~  ]
$ su -
Password:
----------------- [ 03:53:57, root@skylab, ~  ]
# echo $DISPLAY
:0.2
----------------- [ 03:54:01, root@skylab, ~  ]
# export DISPLAY=":0.2"
----------------- [ 03:54:04, root@skylab, ~  ]
# echo $DISPLAY
:0.2
----------------- [ 03:54:06, root@skylab, ~  ]
# ethereal &
[1] 29630
----------------- [ 03:54:08, root@skylab, ~  ]
#
\end{verbatim}

В ethereal идем в первую кнопку слева (при наведении на нее показывается
надпись 'List the avaliable capture interfaces'\footnote{в английском
интерфейсе}), выбираем сетевой интерфейс который смотрит в тот же сегмент
ethernet, что и камера, нажимаем 'prepare'. Жмем кнопу 'Capture Filter',
в 'Filter String' пишем:

\begin{verbatim}
ether host 00:30:4F:49:B1:7C 
\end{verbatim}

Нажимаем 'OK'\footnote{Можно сохранить фильтр под каким либо названием
написав что нить в  'Filter Name' и нажав 'Save', тогда, если Вы еще раз
захотите посмотреть трафик с камеры, вам не придется вспоминать как
делается фильтр - в него можно будет ткнуть мышой.}.

Теперь, если Вы уже включили камеру в ethernet\footnote{я для чистоты
эксперимента просто делал hardware reset со сбросом }, можно нажать
'Start' и пойти заварить чайку\footnote{После сброса камера выдает
несколько пакетов практически сразу же}. Пока я ходил покурить камера
набросала 26 UDP пакетов. Теперь можно нажать 'Stop'.

\subparagraph{Использование полученных результатов\\}

Самое главное что мы получили - в колонке Source Address. В моем случае
это 192.168.0.20 .\\ 

Дополнительная информация - камера отправляет SSDP advertizement на
мультикастовые адреса. Очевидно, что обученная протоколу SSDP система
увидит ее автоматически. Воспользовавшись глаголом современности
<<2google>> получаем при поиске 'SSDP protocol' описание на первом же
линке:

\begin{verbatim}
    
Abstract 
    
   The Simple Service Discovery Protocol (SSDP) provides a mechanism 
   where by network clients, with little or no static configuration, 
   can discover network services. SSDP accomplishes this by providing 
   for multicast discovery support as well as server based notification 
   and discovery routing. 
    

\end{verbatim}

\subsubsection{Конфигурирование Linux}
\paragraph{Alias в той же сети\\}

Сеть на моем домашнем ethernet интерфейсе не совпадает с сетью по
умолчанию.  Не беда - поднимаю alias:

\begin{verbatim}
----------------- [ 15:23:15, root@skylab, /usr/src/2Install/CURRENT/ZoneMinder-1.22.0  ]
# ifconfig eth0:1 192.168.0.3
----------------- [ 15:23:34, root@skylab, /usr/src/2Install/CURRENT/ZoneMinder-1.22.0  ]
# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:10:22:2F:11:AF
          inet addr:192.168.3.2  Bcast:192.168.3.255  Mask:255.255.255.0
          inet6 addr: fe80::290:27ff:fe2f:eaac/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1887948 errors:1 dropped:1 overruns:0 frame:1
          TX packets:1873975 errors:0 dropped:0 overruns:0 carrier:0
          collisions:4004 txqueuelen:1000
          RX bytes:1280916868 (1221.5 Mb)  TX bytes:648585723 (618.5 Mb)

----------------- [ 15:23:55, root@skylab, /usr/src/2Install/CURRENT/ZoneMinder-1.22.0  ]
# ifconfig eth0:1
eth0:1    Link encap:Ethernet  HWaddr 00:10:22:2F:11:AF
          inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

----------------- [ 15:23:58, root@skylab, /usr/src/2Install/CURRENT/ZoneMinder-1.22.0  ]
# ping 192.168.0.20
PING 192.168.0.20 (192.168.0.20) 56(84) bytes of data.
64 bytes from 192.168.0.20: icmp_seq=1 ttl=255 time=7.87 ms
64 bytes from 192.168.0.20: icmp_seq=2 ttl=255 time=2.43 ms
64 bytes from 192.168.0.20: icmp_seq=3 ttl=255 time=0.360 ms

--- 192.168.0.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2014ms
rtt min/avg/max/mdev = 0.360/3.559/7.878/3.169 ms
----------------- [ 15:25:01, root@skylab, /usr/src/2Install/CURRENT/ZoneMinder-1.22.0  ]
#  

\end{verbatim}

Теперь можно открыть мозиллу или оперу или другой браузер, которым вы
любите пользоваться и сходить посмотреть на то, что предоставляет нам
это <<чудо техники>>.  Я использовал mozilla и opera.

В качестве url вбиваем:

\begin{verbatim}
http://192.168.0.20/
\end{verbatim}

Получаем перенаправление на index.asp. Сразу видна картинка и есть линки
на:

\begin{verbatim}
    * View Image - ActiveX mode
    * View Image - Java mode
    * System Administration 
\end{verbatim}

Для того чтобы получить изображение с камеры потребовалось около 15
минут, из них 10 я курил и заваривал себе чай.\\ 

\paragraph{ActiveX}, 

разумеется, не работает\footnote{поделие микрософта такое, насколько я
знаю, отнюдь не открытый стандарт, так что - не работает и тем лучше. =)
}. Ну и фик с ним - не очень то и хотелось. :) Хотя знающие люди говорят,
что приложив некий минимум усилий activex заводится и под линухом. =)
\

Для того чтобы посмотреть картинку по второму линку в мозилле делаем так:

\begin{verbatim}
 меню->Edit->Preferences->Enable Java->OK.
\end{verbatim}


По клику на <<View Image - Java mode>> грузится ява машина от Sun
Microsystems, запрашивается подтверждение на загрузку
апплета\footnote{по крайней мере в моем случае.} - отвечаем 'Yes'.
Получаем изображение с камеры в default разрешении. В общем то, вполне
пристойно, даже с учетом того, что в status bar всего от 12 до 20 fps.
Если поставить галочку на получение audio звук транслируется, свое эхо я
из соседней комнаты услышал  (задержка на секунд). Слышно отчетливо, но
явно фонит, иногда на доли секунды затыкается. Вполне вероятно, что это
уже проблемы явы и ее работы с потоком данных и локальным audio
устройством. Разумеется ява машина подгружает мой комп (p3-800) под
самое небалуйся (до 100 процентов), так что, на мой взгляд, режим
просмотра вполне рабочий, но годится лишь <<на поиграться>>.\\

Кстати, если отказать от загрузки плагина в ява моде работает получении
изображения по кнопе 'Reload' в браузере.\\ 


При нажатии reload по <<base url>> (по умолчанию - http://192.168.0.20/)
картинка также обновляется.


\subsubsection{Конфигурирование камеры}

Идем в <<System Administration>>, там довольно много. В каждой закладке
после изменений жмем 'Save'. Из того что там есть 
мне показались актуальными следующие настройки:

\paragraph{Users\\}

Вот тут небольшая засада с управляющим пользователем. Пользователь
обозван слева как Administrator, чуть правее - как Admin, на самом деле
пароль задается для пользователя <<admin>>. Причем при первом же 'apply'
на url уже выползает окошко авторизации с двумя пустыми полями -
Username и Password. Вероятнее всего эта тонкость есть в документации.\\ 

Однако камера имеет \underline{существенный} недостаток - после того как
введены и admin и пользователь первая страница доступа по пользователю
не спрашивает. То есть линк 'http://192.168.0.20/index.asp' доступен со
свежим изображением всем и  всегда. :/ Проверено на разных браузерах -
все, включая mozilla, konquer, opera.\footnote{По поводу авторизации. 
Естественно, после открытия сессии в течение некоторого времени сервер
камеры помнит пользователя, поэтому заход с этого же адреса не требует
повторной авторизации. Но если пауза была значительная - придется
авторизоваться заново. насколько камера понимает смену вашего ip-ка ка
компе - не знаю - нужна внутренняя диагностика. По крайней мере, у нас в
офисе никогда такого не было - с разных компов при заходе всегда
спрашивался пароль. - by Владимир Собчиков}

 Так что выкладывая такую камеру в сеть общего доступа, имейте ввиду,
что любой желающий сможет получить screen-short в любой момент времени
(а при желании и получить ряд фото которые, при достаточной частоте
обращений вполне способны заменить motion-jpeg. См. раздел по
автоматизации).

\subparagraph{Еще о нюансах с пользователями:} показалось, что после входа
администратором камера пускает всех какой то промежуток.

Для проверки - завел на камере администратору пароль при следующих
настройках:

\begin{verbatim}
----------------- [ 02:32:15, root@skylab, ~  ]
# ifconfig eth0:1
eth0:1    Link encap:Ethernet  HWaddr 00:90:27:2F:EA:AC
          inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

----------------- [ 02:36:34, root@skylab, ~  ]
#
\end{verbatim}

Затем сменил IP-шник:

\begin{verbatim}
----------------- [ 02:36:34, root@skylab, ~  ]
# ifconfig eth0:1 192.168.0.2
----------------- [ 02:36:42, root@skylab, ~  ]
# ifconfig eth0:1
eth0:1    Link encap:Ethernet  HWaddr 00:90:27:2F:EA:AC
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

----------------- [ 02:36:44, root@skylab, ~  ]
#
\end{verbatim}

И снова зашел. На удивление результат оказался разным: некоторые
браузеры запоминали remote end (камеру) и автоматически подставляли
нужные данные при доступе. Однако если смена IP сопровождалась
перезапуском браузера - пароль таки запрашивался. Тем не менее механизм
аутентификации реализован криво, так, если с данного IP уже заходили в
административный режим или просмотр - камера это помнит и пускает еще долго,
даже из другого браузера, что некорректно, ведь данный адрес может NAT'ить еще
целую толпу машин.

Так же эта часть настроек завязана напрямую на 'Trigger', а именно:
пользователей заведенных в user list можно затем вводить в списке тех,
кому доступна кнопка 'Trigger' при просмотре изображения в ява-режиме.

После ввода пользователей и trigger email отключается или начинает
глючить ява режим, а именно при  попытке выбора capture отказывает с
ошибкой <<no video streaming>>. Сброс пользователей и ввод trigger email
дают  примерно тот же эффект - поток с нескольких fps опускается до
нуля. В общем взаимодействие ява режима и конфигурации по пользователям
явно недоработанное, поскольку если зайти в  просмотр в ява режиме (<<View
Image - Java mode>>) после того как устройство было перезагружено в
factory defaults, то никаких проблем в виде остановки потока не
наблюдается, хотя он и падает, иногда, до 1.5 fps, судя по командной
строке мозиллы.

\paragraph{Date/Time\\}

\begin{itemize}

\item{поставить дату и время, однако при каждом сбросе камеры они  не
сохраняются (в том числе если сброс софтовый (без сброса в defaults)).}

\item{выставить синхронизацию даты с NNTP сервера, что приятно, но не
тестировал -  надо открывать под это дырочку в firewall'е - лень. С
налету с ntpd у соседа по локалке  не заработало, однако проблема ли это
доступа или камеры смотреть не стал.}

\item{Установить время вручную.}

\item{Установить TimeZone}

\item{Взять дату с компьютера. (Synhronize with this PC). У меня работает (по
крайней мере в мозилле при включенной яве} 

\end{itemize}

\paragraph{Video/Audio\\}

\begin{itemize}

\item{выставить среду работы камеры (Environment). Для Indoor появляется
возможность выставить частоту света, чем я пользовался - в квартире
освещение ближе к 50 Гц}

\item{выставить разрешение в котором работает камера, разумеется ставим
максимум. Потому как хоть картинка и приемлемого качества, когда она
меньше, но мала.} 

\item{Выставить компрессию. Тут однозначно выбираем <<Lowerst>>, в противном
случае качество изображения хуже. На <<Highest>> это очень заметно.}

\item{Frame Rate. Тут мне нужен максимум - 30 fps.}

\item{Флипы (повороты) по горизонтали и вертикали. Хорошо что умеет, но мне
пока не пригодилось, хотя и поигрался.\footnote{Повороты (развороты) - можно 
подсматривать камерой через зеркало, обычно выпуклое, для обеспечения 
большего обзора. Вот тут эта возможность рулит. - by Владимир Собчиков}}

\item{Аудио - формат и громкость. Поскольку заработало по умолчанию менять что
либо не видел смысла.}

\item{Юстировка изображения. Оченно полезная вещь. Можно поиграться с яркостью
и контрастностью, хоть и в небольших пределах, но качество изображения
поднять чуть чуть можно.}

\end{itemize}

Забавно, что если поймать устройство на выдаче картинки непосредственно
после reboot'а она оказывается чуть подкрашеной, но сочнее и ярче.\\

При просмотре в потоковом режиме в ява моде заметно обновление картинки
(мерцание, волны по изображению), однако это не мешает распознаванию
картинки.

\paragraph{Network\\}

\begin{itemize}

\item{выставить IP статически}

\item{получить IP по DHCP}

\item{получить IP по PPPoE}

\item{использовать DynDNS. Весьма полезно, если диапазон адресов выдаваемых по
dhcp/pppoe <<реальный>> и,  соответственно, хочется обращаться к железке
по имени. Мне в локалке с <<внутренним>> диапазоном адресов это,
разумеется, было не нужно.}

\item{Выставить DNS'ы.}

\item{ Выставить порт. Очень нужная настройка\footnote{А нужна она из за того,
любой желающий может получить доступ к изображению, хотя
администрирование и просмотр 'real time' запаролены, но в режиме
просмотра <<с кнопой 'reload' в руках>> получить изображение с камеры
вполне реально. Впрочем сканеры портов никто не отменял, так что
настройка эта может спрятать камеру только от чайника.}. }

\end{itemize}


\subparagraph{DHCP: }
Для того чтобы проверить работу по dhcp я поднял dhcpd сервер на своем
домашнем шлюзе (мог и на той же машинке, на которой смотрел на камеру)
со следующей конфигурацией:

\begin{verbatim}
----------------- [ 16:18:56, root@sungate, /etc/init.d  ]
# cat /etc/init.d/dhcpd

#!/bin/bash
# Startup script for dhcpd
#

# Source function library.
. /etc/rc.d/init.d/functions

. /etc/sysconfig/network        # Source networking configuration.

# Check that networking is up and the service exists.
[ "$NETWORKING" = "yes" -a -x /usr/sbin/dhcpd -a -s /etc/dhcpd.conf ] || exit


DHCPD_DEVICES="eth2"

case "$1" in
  start)
                echo -n  "Starting dhcpd: "
                #daemon dhcpd -q eth0 eth1
                #daemon dhcpd -q eth0 eth1.102
                daemon dhcpd -q $DHCPD_DEVICES
                echo
                ;;

  stop)
                echo -n "Shutting down dhcpd "
                killproc dhcpd
                echo
                ;;

        status)
                status dhcpd
                ;;

        restart)
                $0 stop
                $0 start
                ;;

        reload)
                $0 restart
                ;;
  *)
                echo "Usage: dhcpd {start|stop|reload|restart|status}"
                exit 1

esac

exit 0
----------------- [ 16:19:45, root@sungate, /etc/init.d  ]
# cd /etc/rc.d/rc3.d/
----------------- [ 16:21:04, root@sungate, /etc/rc.d/rc3.d  ]
# ls -l *dhcp*
lrwxrwxrwx    1 root     root           15 Фев  3 22:45 S65dhcpd -> ../init.d/dhcpd
----------------- [ 16:21:13, root@sungate, /etc/rc.d/rc3.d  ]
# 
----------------- [ 16:23:11, root@sungate, /etc/rc.d/rc3.d  ]
# cat /etc/dhcpd.conf
# DHCP server options.
# See dhcpd.conf(5) and dhcpd(8) for more information.
#

ddns-update-style none;


shared-network sunnet {
        option domain-name "digger.org.ru";
        option domain-name-servers 192.168.3.1,192.168.254.2;

        option routers  192.168.3.1;

        subnet 192.168.3.0 netmask 255.255.255.0 {
        range 192.168.3.4 192.168.3.5;

        host planet {hardware ethernet 00:30:4F:49:B1:7C; fixed-address 192.168.3.3; option host-name "planet";}
        }
}

----------------- [ 16:23:31, root@sungate, /etc/rc.d/rc3.d  ]
#
\end{verbatim}

Соответственно указал в конфигурации брать адрес с dhcp. Еще сделал
'ifconfig eth0:1 192.168.0.2' на той машинке, которой смотрел, чтоб
адреса не пересекались. Заработало. Правда dns'ы с dhcp оно не факт что
умеет брать. Проверять было лень, но то, что dns задается отдельно - уже
говорит об этом, плюс к тому поле DNS по получении адреса с dhcp
заполнено не было. 

Еще прописал alias на interface чтобы поднимался автоматически при
'/etc/init.d/network restart': 

\begin{verbatim}
----------------- [ 03:59:18, root@sungate, ~  ]
# cat /etc/sysconfig/network-scripts/ifcfg-eth2-range0
# flat LAN alias for ethernet camera
IPADDR_START=192.168.0.1
IPADDR_END=192.168.0.1
CLONENUM_START=0
ONBOOT=yes
NETMASK=255.255.255.0
BROADCAST=192.168.0.255

----------------- [ 03:59:35, root@sungate, ~  ]
#
\end{verbatim}

\subparagraph{Выставить порт\\}

После выбора установки порта камера просит ребут. Однако, если выбрать
порты больше 1024, то доступ по прежнему порту остается, хотя никаких
предупреждений не выдается. То есть выбор 'http port' работает только
для диапазона нижних портов. Хотя reboot запрашивается в любом случае.

\paragraph{Trigger\\}
Output trigger - это когда камера посылает электрический сигнал на 
внешнее устройство - всключение сигнализации, света, ревун, GSM-модуль и
прочее. Проверить его работу можно тестером - на DO появится импульс
12VAC определен ной - в зависимости от настройки - продолжительности.\\

\subparagraph{Во первых}, если настраивать trigger от имени
 администратора\footnote{ а только его и пускает, даже если заведены
другие пользователи и выставлен доступ к Trigger для одного из
пользователей - изменения в закладке 'Trigger' может делать только
пользователь admin (или любой, если admin password is not set)} можно
отправить тестовый email.

Например, произвожу следующие настройки:

\begin{enumerate}
\item{SMTP Server address: 192.168.0.1}
\item{Sender email address: olli@digger.org.ru}
\item{Receiver email address: olli@sungate.digger.org.ru}
\end{enumerate}

Если при этом я ставлю галочку 'Send a test email' я получаю 
тестовый email, в логах это выглядит так:

\begin{verbatim}
Feb 13 00:18:06 sungate postfix/smtpd[7401]: connect from unknown[192.168.0.20]
Feb 13 00:18:06 sungate postfix/smtpd[7401]: 207AE6CE: client=unknown[192.168.0.20]
Feb 13 00:18:06 sungate postfix/cleanup[30140]: 207AE6CE: message-id=<20060212211806.207AE6CE@sungate.digger.org.ru>
Feb 13 00:18:06 sungate postfix/qmgr[23070]: 207AE6CE: from=<olli@digger.org.ru>, size=710, nrcpt=1 (queue active)
Feb 13 00:18:06 sungate postfix/smtpd[7401]: disconnect from unknown[192.168.0.20]
Feb 13 00:18:06 sungate postfix/local[14845]: 207AE6CE: to=<olli@sungate.digger.org.ru>, relay=local, delay=0, status=sent (mailbox)
\end{verbatim}

В почтовой программе этот тестовый email выглядит так:

\begin{verbatim}
New mail has arrived.
----------------- [ 00:43:20, olli@sungate, ~  ]
$ mail
Mail version 8.1.2 01/15/2001.  Type ? for help.
"/var/mail/olli": 1 message 1 new
>N  1 olli@digger.org.r  Mon Feb 13 00:18   24/816   email notification test
& h
>N  1 olli@digger.org.r  Mon Feb 13 00:18   24/816   email notification test
& 1
Message 1:
From olli@digger.org.ru  Mon Feb 13 00:18:06 2006
Return-Path: <olli@digger.org.ru>
Delivered-To: olli@sungate.digger.org.ru
From: CamMailer <olli@digger.org.ru>
To: <olli@sungate.digger.org.ru>
Subject:email notification test
MIME-Version:1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_000_0007_01C35744.2F41F430"
X-Mailer:Jack Lou

This is a multi-part message in MIME format.

------=_NextPart_000_0007_01C35744.2F41F430
Content-Type:text/plain;charset="big5"
Content-Transfer-Encodeing:7bit

This is a Test mail.


&
\end{verbatim}

Почему то без картинки в аттаче. Видимо решили, что самого факта
отправки достаточно..

Кстати, если у вас не получается отправить тестовый email - возможно Вы
не прописали релеинг для вашей web-камеры. Для postfix вполне достаточно
сделать так: 

\begin{verbatim}
----------------- [ 04:14:26, root@sungate, ~  ]
# cat /etc/postfix/mynetworks
127.0.0.1/32
192.168.3.0/24
192.168.0.20/32

----------------- [ 04:14:32, root@sungate, ~  ]
# /etc/init.d/postfix restart
Shutting down postfix: [  OK  ]
Adjusting environment for postfix: [  OK  ]
Starting postfix: [  OK  ]
----------------- [ 04:14:49, root@sungate, ~  ]
#
\end{verbatim}

Тут последняя строка разрешает принимать любую почту от хоста
192.168.0.20, т.е. с IP камеры по умолчанию. 

\subparagraph{Во вторых,} производители понимают trigger по своему,
например, желание получить по кнопке из web-interface'а набор картинок
на email так и останется неудовлетворенным:

Если поставить галочку 'Trigger Output' с указанием 'Time Interval', то
несмотря на это -  в логах и почтовом ящике тишина. Для того чтобы
проверить, не завязано ли это на motion detection выключаю свет, потом
включаю его. Реакции нет. Прохожу в области изображения, машу руками -
отсылки изображения нет. Опробовано с разными 'Time Interval': не
работает. Можно попробовать работает ли это при нажатой кнопке 'Trigger'
в просмотре в ява-режиме..  так вот не работает. =) Ни у админа, ни у
пользователя, которому кнопень 'Trigger' разрешена. 

После того как не заработало - таки полез в документацию и выяснилось,
что триггер на самом деле это переключатель который замыкает некоторую
цепь на порту (подробнее, включая схемы подключения - в документации).
Так что trigger нажатый в web-interface'е просто не предназначен к
получению картинки по smtp.

Насколько я понял, работать это должно только по срабатыванию события от
внешнего устройства, а именно датчика на порту. За подробностями
реализации и подключения датчика можно обратиться в документацию. Со
слов Владимира В. Собчикова, у них при тестировании trigger работал, а
поскольку тестовая отправка по smtp у меня заработала - сомневаться в
этом не приходится.

\paragraph{Upload\\}

Полезная фича. И работает. При входе вручную на специально поднятый по такому случаю
vsftpd под пользователем вбитым в web-interface я имею строку вида:

\begin{verbatim}

Feb 13 01:30:43 sungate pam_tcb[26429]: vsftpd: Authentication passed for webcam from (uid=0)

\end{verbatim}

Конфигурация vsftpd выглядит у меня следующим образом:

\begin{verbatim}

# grep -v ^\# /etc/vsftpd/conf | grep -v ^\$
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=nobody
idle_session_timeout=90
data_connection_timeout=90
nopriv_user=novsftpd
async_abor_enable=NO
ftpd_banner=Welcome to the sungate ftp service.
deny_email_enable=YES
banned_email_file=/etc/vsftpd/banned_emails
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
hide_ids=NO
check_shell=YES
listen=NO
no_anon_password=YES
setproctitle_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
anon_root=/home/anonftp
ftp_username=ftp
secure_chroot_dir=/var/empty
----------------- [ 02:06:13, root@sungate, ~  ]
# cat /etc/vsftpd/chroot_list
olli
----------------- [ 02:08:44, root@sungate, ~  ]
#

\end{verbatim}

То есть все пользователи кроме olli у меня chroot'ятся, таким образом
чтобы webcam писала в свой домашний каталог я указываю <<Directory
Path>> в <</>>\footnote{'/' без кавычек, разумеется}. 

Сервис ftp в xinetd описан так:

\begin{verbatim}

----------------- [ 02:12:32, root@sungate, ~  ]
# cat /etc/xinetd.d/vsftpd
# default: off
# description: The vsftpd FTP server.
service ftp
{
        disable         = no
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        per_source  = 5
        instances   = 50
        nice            = 10
        rlimit_as       = 16M
        log_on_success += PID HOST DURATION
        log_on_failure += HOST
        server          = /usr/sbin/vsftpd
#       server_args     =
}
----------------- [ 02:15:27, root@sungate, ~  ]
#

\end{verbatim}

От камеры входа на ftp я добился только после того как внимательно
посмотрел в логи. =)  По умолчанию у меня был запрет на соединения в
xinetd со всех хостов, кроме заранее прописанных. Так что не забудьте к
вышеуказанному конфигу что нибудь подобное  в конфигурации xinetd:

\begin{verbatim}
----------------- [ 02:08:44, root@sungate, ~  ]
# cat /etc/xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/

defaults
{
        log_type = SYSLOG authpriv info
        log_on_success = PID HOST DURATION
        log_on_failure = HOST
        instances = 100
        per_source = 5
        only_from = 127.0.0.1
        only_from = 192.168.3.0/24
        only_from = 192.168.254.1
        only_from = 192.168.0.0/24
}

includedir /etc/xinetd.d

----------------- [ 02:12:32, root@sungate, ~  ]
#

\end{verbatim}

Для того чтобы все заработало мне достаточно было добавить строчку
\begin{verbatim}
        only_from = 192.168.0.0/24
\end{verbatim}
для сети <<192.168.0.0>> в которой, собственно, и 
находится камера в режиме по умолчанию. \\ 



В моем случае пробовалось в следующих режимах:

Radio-button ставился в положение <<Always>>, radio-button <<Image
frequency>> ставится Seconds/Frame, значение выбирается в 1, в Base File
Name прописано 'BaseFileName, radio-button File поставлен в положение
Date/Time Suffix.

Перед тем как поставить галочку Upload image to FTP server просматриваем
что есть в ~ каталоге webcam:

\begin{verbatim}
----------------- [ 01:22:03, root@sungate, ~  ]
# ls ~webcam/*.jpg -1| wc -l
ls: /home/webcam/*.jpg: No such file or directory
      0
----------------- [ 01:22:51, root@sungate, ~  ]
#
\end{verbatim}

После чего нажимаем на Save и в терминале делаем:

\begin{verbatim}
----------------- [ 01:22:51, root@sungate, ~  ]
# while true ; do sleep 1; ls ~webcam/*.jpg -1 | wc -l; done
      1
      2
      2
      3
      4
      4
      5
      6
      6
      7
      8
      8
      9
      9
     10
     11
     11
     12
     13
\end{verbatim}

Из чего можно сделать вывод, что либо аналог крона на камере не особо
аккуратный, либо машинка загружена и просто не успевает обработать все
что нужно \footnote{первый вариант мне кажется более вероятным, но  это
субъективное мнение, а поднимать ftpd на машинке побыстрее было влом}.

В это же время в системных логах:

\begin{verbatim}
Feb 22 01:31:32 sungate xinetd[17486]: START: ftp pid=18063 from=192.168.0.20
Feb 22 01:31:32 sungate pam_tcb[18063]: vsftpd: Authentication passed for webcam from (uid=0)
Feb 22 01:37:04 sungate xinetd[17486]: EXIT: ftp pid=18063 duration=332(sec)
\end{verbatim}

Последняя строчка появляется после того как снимается галочка <<Upload
to FTP server>> и нажимается <<Save>>. Соответственно то, что за 332
секунды с момента входа сумела написать камера выглядит так:

\begin{verbatim}
----------------- [ 01:48:15, root@sungate, ~  ]
# ls ~webcam/*.jpg -1 | head -5; \
echo -e "\n      ----========----\n"; \
 ls ~webcam/*.jpg -1 | tail  -5
/home/webcam/BaseFileName20060222_01362859.jpg
/home/webcam/BaseFileName20060222_01363028.jpg
/home/webcam/BaseFileName20060222_01363196.jpg
/home/webcam/BaseFileName20060222_01363364.jpg
/home/webcam/BaseFileName20060222_01363534.jpg

      ----========----

/home/webcam/BaseFileName20060222_01415118.jpg
/home/webcam/BaseFileName20060222_01415290.jpg
/home/webcam/BaseFileName20060222_01415459.jpg
/home/webcam/BaseFileName20060222_01415634.jpg
/home/webcam/BaseFileName20060222_01415843.jpg
----------------- [ 01:49:21, root@sungate, ~  ]
#
\end{verbatim}

Строчка времени на Web interface выглядит так:

\begin{verbatim}
2006-02-22 01:56:42
\end{verbatim}


Работает, на мой взгляд - вполне приемлемо. Еще бы камера время не
теряла после перезагрузки - вообще б было хорошо. =))\\


Теперь посмотрим что можно получить на бОльших скоростях - ставим 'Image
Frequency' в 5 Frames/Second, нажимаем кнопку 'Save', а на соседнем
терминале смотрим:

\begin{verbatim}
# rm ~webcam/*.jpg >/dev/null 2>/dev/null
----------------- [ 01:56:17, root@sungate, ~  ]
# while true ; do sleep 1; ls ~webcam/*.jpg -1 | wc -l; done                                ls: /home/webcam/*.jpg: No such file or directory
      0
ls: /home/webcam/*.jpg: No such file or directory
      0
      1
      2
      3
      4
      6
      7
      8
      9
     10
     12
     13
     14
     16
     17
\end{verbatim}

То есть 5 фреймов в секунду оно все таки не пишет. Таки один, очень
редко - два. Неприятно, но терпимо.


\paragraph{RS485\\}
Вещь очень правильная - можно повесить на порт получение и выдачу
события.\\

То есть, во первых, можно по необходимости (вручную!) заставить камеру
замкнуть некую цепь (не любую - ограничения по силе тока  можно
посмотреть в документации, но имея слаботочный замыкатель, добиться  от
него замыкания цепи с большими токами не составит проблемы для любого
радиолюбителя). Во вторых, по сигналу с внешнего датчика можно получить
ряд изображений на smtp.\footnote{На момент написания статьи я видимо не
разобрался в этом вопросе досконально, по крайней мере комментарий
Владимира Собчикова был такой: "Теоретически - можно, но нуже н будет
паяльник ;-) а главное - это делается через DO, но не через 485!!!". Так
что данный параграф остается на уровне моих сомнительных утверждений,
поскольку прошло довольно много времени между написанием статьи и
внесением правок от Владимира Собчикова и сейчас я уже просто не помню
что там к чему.}

\paragraph{Tools\\}

Возможность reboot с web-интерфейса весьма пользительна. Также полезна
возможность отключить огоньки <<на морде>> устройства, а то уж больно
бросается в глаза. =) Можно сделать и factory reset.

\paragraph{Information\\}

Единственное интересное тут - версия прошивки. Остальное и так известно
- ip, mac, model. В моем случае это:

\begin{verbatim}
 Firmware Version
  1.02  build:666
\end{verbatim}

Создатели прошивки были большие шутники видать - отличный номер билда
для прошивки в которой паршиво работает часть  
функционала\footnote{популярная страшилка про число 666 обыгрывалась
всем кому не лень. У некоторых даже получались неплохие фильмы. :))}.
:D  С другой стороны <<баги>> в этой прошивке не особо критичные.

