Как стать автором
Обновить

Наблюдаем за домом через Telegram

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров29K

или отправляем в Телеграм фото и видео событий с видеорегистратора NetSurveillance

IP видеорегистратор с Aliexpress
IP видеорегистратор с Aliexpress

Введение

Ещё в 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 пользователя

Второй шаг - возвращаемся в браузер к настройкам видеорегистратора в меню Система -> Сетевые службы, указываем параметры соединения с нашим FTP сервером.

Настройка FTP соединение с локальным сервером
Настройка FTP соединение с локальным сервером

Для проверки корректности настроек нажимаем тест. По завершению проверки соединения появится надпись - Успех теста FTP, а в окне FileZilla увидим обращения от видеорегистратора в виде текстовых строк, которые нам необходимо сохранять в лог файлы:

Включение записи логов FileZilla
Включение записи логов FileZilla

Перейдём в раздел Logging в конфигурации сервера (иконка с шестерёнкой) FileZilla и установим флажок Enable logging file.

далее...

Настраиваем тревожное событие

Возвращаемся к настройкам регистратора, переходим в раздел Тревога и кликаем Умный движение, выбираем канал, устанавливаем флажки: Вкл, Обнаружение, FTP. Напротив Запись канала и Снимок устанавливаем номер, соответствующий нашему текущему каналу из выпадающего списка. Это необходимо для того, чтобы во время срабатывания события на данной камере на FTP сервер не закачивались файлы с других каналов, в противном случае получим много лишних файлов.

Настройка тревожного события на канале видеорегистратора
Настройка тревожного события на канале видеорегистратора

далее...

Тест детектора движения

Сохраняем настройки и бежим проверять: гуляем под камерами, машем руками, корчим рожи, разминаемся перед финальной настройкой.

Если настроили правильно, регистратор начнет лить на FTP сервер фото и видео. Видео загружается с расширением .h264, что не мешает его открывать на компе в любимом плеере, а вот в браузере через Yandex.Disk - увы, не показывает.

Размер каталога загрузки будет расти по мере срабатывания детектора движения, поэтому нужно предусмотреть достаточный объем хранилища на ПК под ваши условия.

Яндекс Диск для чего?

По сути Яндекс Диск в данной связке используется только для оперативного доступа к видеофрагментам и в роли внешнего архива. Изображения отправляются в Telegram как есть и не требуют привязки к Диску. Если же видеофайлы вам необходимы, то настраиваем диск по инструкции https://yandex.ru/support/disk-desktop-windows/reserve-copy.html

Настройка Telegram-бота

  1. Первым делом установим Open Server Panel, инструкция на сайте https://ospanel.io/docs/#ustanovka

По умолчанию он устанавливается C:\OSPanel. После установки кликаем ярлык OSPanel на рабочем столе, в трее рядом с часами, появится иконка приложения. Клик правой кнопки мыши по красному флажку открывает меню:

Клик по Папке с проектами
Клик по Папке с проектами
  1. Отрываем Папку с проектами и переходим в папку localhost

  2. Распаковываем в нее файлы из скаченного архива с GitHub https://github.com/webxed/nvr-to-tg

  3. Для настройки Telegram-бота в текстовом редакторе открываем файл filezilla_log_parser.settings (в комплекте с OSPanel доступен текстовый редактор Sublime в разделе Программы)

  4. Создаем бота в 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';

Скрипт сконфигурирован!

Запуск скрипта

  1. Правой кнопкой мыши кликаем по иконке OSPanel и нажимаем Запустить

  2. После того, как флаг OSPanel перешел из красного состояния в зеленый, открываем браузер и переходим по ссылке: http://localhost/filezilla_log_parser.php

  3. Если все настройки корректные, по завершению выполнения скрипта в браузере отобразятся ответы 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.

Надеюсь, данная инструкция будет доступной для начинающих, но уверенных пользователей. Именно так я себе представил владельца загородного дома, который решил обзавестись системой видеонаблюдения для своего участка. Буду рад ответить на вопросы и внести корректировки, если потребуется.

Теги:
Хабы:
Всего голосов 14: ↑13 и ↓1+15
Комментарии31

Публикации

Истории

Работа

PHP программист
107 вакансий

Ближайшие события

22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань