Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8

в 8:52, , рубрики: diy или сделай сам, linux, zoneminder debian видеонаблюдение, потоковое видео, метки:

Введение

Доброго времени суток.

Имея в наличии домашний NAS, который работает под управлением Debian 8 (ранее я использовал Ubuntu Server 12.04 и 14.04), возникла идея возложить на него, помимо прочего, роль сервера видеонаблюдения. В качестве серверной части был выбран Zoneminder. Алгоритм работы видеонаблюдения должен быть такой: круглосуточная запись не нужна, но требуется в случае необходимости возможность включения записи по наступлению события — срабатывание на движение, с последующей отправкой уведомления на электронную почту со скриншотами с места события. Это нужно чтобы обеспечить контроль за квартирой в момент отсутствия кого-либо дома. Ну и, конечно, нужна возможность удалённо подключиться и проверить — всё ли в порядке.

На сайте разработчика я нашёл подробнейшую Wiki, посвященную именно установке на Debian 8 64-bit. Соответственно, инструкцию по установке я возьму оттуда, пояснив некоторые моменты своими комментариями.

Установка Zoneminder

Итак, у нас есть сервер с установленным в минимальной конфигурации Debian 8 64-bit (я использовал netinstall). Сначала нужно отредактировать sources.list, добавив в него Jessie backports:

sudo nano /etc/apt/sources.list

В конец файла добавим:

deb http://http.debian.net/debian jessie-backports main

Либо раскомментируем эту строку, если она там уже есть, то есть удалим # в начале строки. Обновляем индекс пакетов:

sudo apt-get update

Теперь всё готово для установки Zoneminder, что мы и сделаем:

sudo apt-get install zoneminder

В процессе установки будут также автоматически установлены Apache, MySQL, PHP.
После завершения установки, создаём базу MySQL:

sudo mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql

В процессе создания базы, будет предложено выбрать пароль root базы. Далее выполняем последовательно следующие команды (через sudo), вводя пароль в случае запроса:

mysql -uroot -p -e "grant all on zm.* to 'zmuser'@localhost identified by 'zmpass';"

mysqladmin -uroot -p reload

chmod 740 /etc/zm/zm.conf

chown root:www-data /etc/zm/zm.conf

Включаем автозапуск Zoneminder:

systemctl enable zoneminder.service

Добавляем пользователя www-data в группу sudo, это нужно для доступа к локальным видеокамерам:

adduser www-data sudo

Запускаем Zoneminder:

systemctl start zoneminder.service

Проверяем, что Zoneminder запущен:

systemctl status zoneminder.service

Если всё в порядке, вывод команды должен быть, примерно, такой:

● zoneminder.service - ZoneMinder CCTV recording and surveillance system
   Loaded: loaded (/lib/systemd/system/zoneminder.service; enabled)
   Active: active (running) since Вс 2016-07-10 18:48:30 IRKT; 5h 31min ago
  Process: 6413 ExecStop=/usr/bin/zmpkg.pl stop (code=exited, status=0/SUCCESS)
  Process: 6455 ExecStart=/usr/bin/zmpkg.pl start (code=exited, status=0/SUCCESS)
 Main PID: 6474 (zmdc.pl)
   CGroup: /system.slice/zoneminder.service
           ├─6474 /usr/bin/perl -wT /usr/bin/zmdc.pl startup
           ├─6507 /usr/bin/perl -wT /usr/bin/zmfilter.pl
           ├─6514 /usr/bin/perl -wT /usr/bin/zmaudit.pl -c
           └─6521 /usr/bin/perl -wT /usr/bin/zmwatch.pl

Настраиваем Apache:

a2enmod cgi

a2enmod rewrite

a2enconf zoneminder

Добавляем свой часовой пояс в PHP:

sudo nano /etc/php5/apache2/php.ini

Ищем секцию [Date] и меняем date.timezone на нужный:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Irkutsk

Сохраняем — Ctrl+O, выходим — Ctrl+X.
Перезапускаем Apache:

service apache2 restart

Чтобы была возможность управлять Zoneminder через Internet Explorer, нужно установить Cambozola:

cd /usr/src && wget http://www.andywilcock.com/code/cambozola/cambozola-latest.tar.gz

tar -xzvf cambozola-latest.tar.gz

replace 936 with cambozola version downloaded

cp cambozola-0.936/dist/cambozola.jar /usr/share/zoneminder

На этом установка Zoneminder завершена. Теперь нужно настроить почтовый транспорт для того, чтобы Zoneminder мог уведомлять о событиях по электронной почте.

Настройка почтового транспорта

Для отправки уведомлений, Zoneminder умеет использовать ssmtp, его и установим:

sudo apt-get update

sudo apt-get install ssmtp

Заодно установим mailutils, если этот пакет ещё не установлен:

sudo apt-get install mailutils

Теперь настроим параметры почты, от имени которой будут идти уведомления. Предположим, что ящик находится на gmail.com. Открываем ssmtp.conf:

sudo nano /etc/ssmtp/ssmtp.conf

и приводим к такому виду, указав, соответственно, ваши данные:

root=mymail@gmail.com
mailhub=smtp.gmail.com:587
hostname=localhost
RewriteDomain=gmail.com
UseSTARTTLS=YES
UseTLS=YES
AuthUser=mymail@gmail.com
AuthPass=myverystrongpassword

Правим revaliases:

sudo nano /etc/ssmtp/revaliases

приводим к такому виду:

root:pp@gmail.com:smtp.gmail.com:587
www-data:pp@gmail.com:smtp.gmail.com:587

И проверяем корректность настроек, отправив тестовое письмо:

echo "Hello, World" | mail -s "My email check" mne@napochtu.ru

Если тест прошёл успешно, переходим к следующему шагу — установка MIME::Lite и Net::SMTP. Проверим, установлены ли эти компоненты:

perl -MMIME::Lite -e "print "Module installed.\n";"

perl -MNet::SMTP -e "print "Module installed.\n";"

Устанавливаем, зайдя в оболочку perl:

sudo perl -MCPAN -e shell

install MIME::Lite
install Net::SMTP

Сейчас нужно внести очень важные изменения, без которых почтовый транспорт от Zoneminder работать не будет. Обратите внимание, что эти изменения нужно вносить только в том случае, если версия установленного Zoneminder — 1.29 или ниже. Начиная с версии 1.30, эти действия производить не нужно.

Откроем в редакторе файл zmfilter.pl:

sudo nano /usr/bin/zmfilter.pl

Перейдя на строку 1179, мы видим следующее:

### Send the Message
MIME::Lite->send( "smtp", $Config{ZM_EMAIL_HOST}, Timeout=>60 );
$mail->send();

Закомментируем строки

MIME::Lite->send( "sendmail", $Config{ZM_EMAIL_HOST}, Timeout=>60 );

и

$mail->send();

и добавим под ними строку

$mail->send('sendmail','/usr/sbin/ssmtp',$Config{ZM_EMAIL_ADDRESS});

В итоге, начиная со строки 1179 (в моём случае, но не обязательно именно этот номер строки), код должен выглядеть так:

### Send the Message
#MIME::Lite->send( "sendmail", $Config{ZM_EMAIL_HOST}, Timeout=>60 );
#$mail->send();
$mail->send('sendmail','/usr/sbin/ssmtp',$Config{ZM_EMAIL_ADDRESS});

Сохраняем, выходим. На этом работа с терминалом завершена.

Веб-интерфейс Zoneminder

Управление доступно по адресу ip.adress.servera/zm, заходим. Первое, что нужно сделать, это зайти в Options -> Users, и задать пароль пользователю admin:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 1

Затем зайти в Options -> System, и поставить галочку напротив OPT_USE_AUTH:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 2

Если этого не сделать, то Zoneminder позволяет зайти в веб-интерфейс или подключиться через клиентское приложение без запроса логинапароля, что, естественно, небезопасно. Странно, что эта очень нужная галочка не отмечена по умолчанию.

Теперь настроим отправку электронной почты. Заходим в Optons -> Email и настраиваем по аналогии:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 3

В поле EMAIL_BODY можно настроить формат уведомлений так, как нужно именно вам. Например, если в поле добавить %EI1%, то к сообщению будет прикреплен первый скриншот с момента срабатывания датчика движения. Полный список опций для уведомлений доступен здесь.

Добавление камер

Zoneminder умеет работать как с usb, так и с IP-камерами. На данный момент, мои камеры ещё в пути, поэтому в качестве тестово-настроечно-временного варианта камеры, я использую мой старый Android-смартфон Alcatel Pop C2, на котором установлено приложение IP Webcam, превращающее смартфон в Wi-Fi IP-камеру. После установки и запуска приложения (предварительно рекомендую выставить разрешение видеопотока в настройках приложения, я выставил 800х480), на дисплее смартфона отображается IP и порт, по которому можно зайти в веб-интерфейс и посмотреть, что здесь есть интересного:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 4

Настроек, в общем, довольно много, но нас интересует адрес, по которому отдается видеопоток. И мы видим, что есть информация для настройки Zoneminder, что не может не радовать. А именно, указан Remote host path, путь, который нужно будет прописать в настройках Zoneminder — после IP камеры нужно добавить /video:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 5

Возвращаемся в веб-интерфейс Zoneminder, чтобы добавить камеру, выбираем Add New Monitor:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 6

В поле Name пишем желаемое имя, Source type -> Remote:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 7

Во вкладке Source заполняем поля: Remote Host Name -> IP смартфона, Remote Host Port -> порт, на котором работает IP Webcam, Remote Host Path -> путь, который мы подсмотрели в настройках IP Webcam, а также указываем разрешение видеопотока, которое должно совпадать с выбранным нами ранее в настройках IP Webcam:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 8

Сохраняем настройки -> Save, и в главном меню Zoneminder видим добавленную нами камеру:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 9

При нажатии на название которой, мы видим изображение:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 10

Камеры могут работать в нескольких режимах, который определяется параметром Function в главном меню:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 11

Режим, в котором запись ведется только при наличии движения в кадре, называется Modect, его и выберем. Теперь система не будет записывать видеопоток постоянно, а только при наличии веских на то причин. Но нам ведь ещё нужно уведомление о движении в кадре. Для это нужно настроить фильтр. Открываем Filters в главном меню Zoneminder, настраиваем согласно скриншоту, сохраняем под любым именем:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 12

И не забываем поставить галочку напротив Run filter in background:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 13

Таким образом, если в кадре будет обнаружено движение, система запишет видео и отправит на почту уведомление.

Клиентские приложения

Если есть постоянный IP, ничто не мешает пробросить порты в маршрутизаторе и подключаться со смартфона извне через веб-интерфейс, тем более, что в настройках Zoneminder можно выбрать мобильную версию интерфейса, но, помимо этого, я решил поискать какое-нибудь мобильное приложение для этой цели. Поискав в Google Play по ключевому слову «zoneminder», я остановился на zmNinja, т.к. рейтинг достаточно высокий и скриншоты понравились. Приложение платное, триальной версии для предварительной оценки, увы, нет. Функционал более чем достаточный — просмотр видеопотока в реальном времени, просмотр архива, записанных событий, переключение режимов камер и т.д.

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 14

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 15

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 16

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 17

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 18

Также есть десктопные версии zmNinja для Linux, Windows, Mac OS X — они распространяются бесплатно. Так выглядит версия для Linux, запущенная на моём Mint 18:

Домашнее видеонаблюдение. Реализация с помощью Zoneminder и Debian 8 - 19

В общем, для всех систем интерфейс единообразен.

На этом всё, спасибо за внимание.

Автор: sanrega

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js