или отправляем в Телеграм фото и видео событий с видеорегистратора NetSurveillance
Введение
Ещё в 2021 году для пассивной охраны загородного дома, я приобрёл и установил китайский IP видеорегистратор (NVR - Network Video Recorder). Устройство хорошо справляется с возложенной на него задачей. Из функций отправки оповещений о событиях на его борту присутствуют EMAIL/SMTP, FTP протоколы. Выполнение произвольных сценариев и механизмов, типа curl, в регистраторе не заложено, соответственно прикрутить оповещения в Telegram без костылей не представляется возможным.
Конфигурация NVR и пример сообщения на Email
Функция Тревога->Обнаружение лиц оповещает только через электронную почту. Довольно много приходит писем и они превращаются в SPAM. Скриншоты лиц очень низкого качества, польза данных оповещений равна нулю.
Дополнительное неудобство создает настройка регистратора. Если у вас нет отдельного монитора с VGA входом, как это было у меня, то настройка возможна только через браузер на компьютере и только через старый добрый Internet Explorer (не Edge). IE умеет запускать ActivX приложения, для этого нужна OS Windows. Для меня стало очевидно, что вся обертка для данной задумки будет работать в этой среде. Используем в качестве сервера старый компьютер. Заодно решим проблему с удаленным доступом - провайдер в деревне не выделяет внешние адреса.
Итак, мы открываем управление нашего видеорегистратора в браузере:
далее...
Собираем необходимые компоненты:
Очевидно, что устанавливаем Telegram на компьютер или телефон.
Устанавливаем FileZilla FTP server для получения файлов по протоколу FTP https://filezilla.ru/documentation/FileZilla_FTP_Server
Для отправки сообщений в Telegram потребуется PHP и CRON (запуск скрипта по интервалу времени), установим готовое решение Open Server Panel https://ospanel.io/download/
В качестве внешнего хранилища файлов изображений и видео используем Yandex.Disk https://yandex.ru/support/disk-desktop-windows/installation.html
Скачиваем скрипты с GitHub https://github.com/webxed/nvr-to-tg (Code>Download ZIP)
Думаю, процесс установки первых компонентов описывать смысла нет, на Youtube достаточно видео по теме.
Yandex.Disk выступает в качестве внешнего хранилища файлов, т.к. провайдер не выделяет внешние IP адреса.
Настройка FTP соединения на сервере и видеорегистраторе
Для получения от нашего видеорегистратора фотографий и видеофрагментов тревожных событий по протоколу FTP в установленном FileZilla FTP server`е создадим нового пользователя и укажем каталог для хранения файлов. В средней колонке установим флажки прав доступа на запись файлов (Files/Read, Write, Append) и каталогов (Directories/Create, List, +Subdirs).
Второй шаг - возвращаемся в браузер к настройкам видеорегистратора в меню Система -> Сетевые службы, указываем параметры соединения с нашим FTP сервером.
Для проверки корректности настроек нажимаем тест. По завершению проверки соединения появится надпись - Успех теста FTP, а в окне FileZilla увидим обращения от видеорегистратора в виде текстовых строк, которые нам необходимо сохранять в лог файлы:
Перейдём в раздел Logging в конфигурации сервера (иконка с шестерёнкой) FileZilla и установим флажок Enable logging file.
далее...
Настраиваем тревожное событие
Возвращаемся к настройкам регистратора, переходим в раздел Тревога и кликаем Умный движение, выбираем канал, устанавливаем флажки: Вкл, Обнаружение, FTP. Напротив Запись канала и Снимок устанавливаем номер, соответствующий нашему текущему каналу из выпадающего списка. Это необходимо для того, чтобы во время срабатывания события на данной камере на FTP сервер не закачивались файлы с других каналов, в противном случае получим много лишних файлов.
далее...
Тест детектора движения
Сохраняем настройки и бежим проверять: гуляем под камерами, машем руками, корчим рожи, разминаемся перед финальной настройкой.
Если настроили правильно, регистратор начнет лить на FTP сервер фото и видео. Видео загружается с расширением .h264, что не мешает его открывать на компе в любимом плеере, а вот в браузере через Yandex.Disk - увы, не показывает.
Размер каталога загрузки будет расти по мере срабатывания детектора движения, поэтому нужно предусмотреть достаточный объем хранилища на ПК под ваши условия.
Яндекс Диск для чего?
По сути Яндекс Диск в данной связке используется только для оперативного доступа к видеофрагментам и в роли внешнего архива. Изображения отправляются в Telegram как есть и не требуют привязки к Диску. Если же видеофайлы вам необходимы, то настраиваем диск по инструкции https://yandex.ru/support/disk-desktop-windows/reserve-copy.html
Настройка Telegram-бота
Первым делом установим Open Server Panel, инструкция на сайте https://ospanel.io/docs/#ustanovka
По умолчанию он устанавливается C:\OSPanel. После установки кликаем ярлык OSPanel на рабочем столе, в трее рядом с часами, появится иконка приложения. Клик правой кнопки мыши по красному флажку открывает меню:
Отрываем Папку с проектами и переходим в папку localhost
Распаковываем в нее файлы из скаченного архива с GitHub https://github.com/webxed/nvr-to-tg
Для настройки Telegram-бота в текстовом редакторе открываем файл filezilla_log_parser.settings (в комплекте с OSPanel доступен текстовый редактор Sublime в разделе Программы)
Создаем бота в Telegram через @BotFather (https://t.me/BotFather), данный шаг расписан в куче гайдов на Хабре и Youtube
Настраиваем переменные в filezilla_log_parser.settings:
$chatID - ID нашего чата с ботом
// Use https://t.me/myidbot > /getgroupid@myidbot for Telegram groups
// https://api.telegram.org/bot[токен_бота]/getUpdates
$chatID = '';
$botToken - приватный ключ нашего бота, полученный от @BotFather
// Take BotToken from https://t.me/BotFather
$botToken = 'xxxxxxx:xxxxxxxxxxxxxxxxxx-xxxxxxx';
$http_url - ссылка на внешний сервис хранения наших файлов
// Exteranl web-server for files (Yandex Disk, Google Drive and etc.)
// paste shared access url
$http_url = 'https://disk.yandex.ru/';
$ftp_root - путь к корневой папке FTP сервера, который мы прописали в разделе Настройки FTP-соединений
// Set full FTP path for files
$ftp_root = "C:\\Users\\user\\YandexDisk-user\\Folder";
$ftp_root_sub - подкаталог в корневой папке, он создаётся видеорегистратором
// Set unique subfolder, which set up yours video recorder
$ftp_root_sub = '/192.168.0.36_001241aa67dd/';
$ftp_user_name - имя пользователя, которое мы казали в Настройках FTP-соединения
// Set FTP user name
$ftp_user_name = 'video';
$fz_logs_folder - путь к папке с логами FileZilla server
// Set path to FileZilla logs (setup FileZila Options / Logging - Use a different logfile each day, without size limit)
$fz_logs_folder = "C:\\Program Files (x86)\\FileZilla Server\\Logs";
$fz_log_id_file - имя файла для хранения настроек не изменяем, если нет необходимости
// script data file
$fz_log_id_file = 'filezilla_log_id.save';
Скрипт сконфигурирован!
Запуск скрипта
Правой кнопкой мыши кликаем по иконке OSPanel и нажимаем Запустить
После того, как флаг OSPanel перешел из красного состояния в зеленый, открываем браузер и переходим по ссылке: http://localhost/filezilla_log_parser.php
Если все настройки корректные, по завершению выполнения скрипта в браузере отобразятся ответы Telegram API, а в чат Telegram прилетят изображения и ссылки на видео файлы.
Пример сообщений от бота
ID FTP сессии - значение для контроля корректного парсинга лога FTP сервера. Через "-" указывается время создания файла, которое можно сопоставить со временем сообщения от бота и вычислить задержку в работе.
Настройка CRON
Для регулярной работы скрипта настраиваем CRON в OSPanel > Настройки > Планировщик заданий:
Устанавливаем периодичность запуска скрипта */5 - каждые 5 минут. Строку вызова скрипта вставляем в поле Выполнить и нажимаем кнопку Добавить.
*/5 * * * * %progdir%\modules\wget\bin\wget.exe -q --no-cache http://localhost/tg_send_tempdata.php -O %progdir%\userdata\temp\tg_tempsend.txt
При проверке работы - интервал можно сократить до одной минуты */1
Проверяем в комплексе
Бежим с телефоном к камере и ловим сообщения бота в чате!
P.S.
Надеюсь, данная инструкция будет доступной для начинающих, но уверенных пользователей. Именно так я себе представил владельца загородного дома, который решил обзавестись системой видеонаблюдения для своего участка. Буду рад ответить на вопросы и внести корректировки, если потребуется.