Как я выводил информер в камеру Hikvision

Длиннопост-кулстори о марафоне разработчика длиной почти в сутки.

ВОРНИНГ! Пост не претендует на звание точной инструкции, хотя и содержит некоторые полезные указания ближе к концу. Ну и как всегда - автор не несет ответственности за Ваши действия и возможный ущерб.

Как я выводил информер в камеру Hikvision Cctv, Видеонаблюдение, Камера, Linux, Разработка, Программирование, Raspberry Pi, Длиннопост

Поступило техническое задание: придумать, как бы вывести текст на изображение с камеры. В идеале - вывести информер для отображения температуры, получаемой с погодной станции Народного мониторинга Dozor Meteo. При необходимости изменять прошивку станции можно, но лучше нельзя. Для экспериментов была выдана камера Hikvision DS-2CD2012, но, думаю, у всех творений этой фирмы одинаковый API, поэтому описанный способ применим ко всем камерам этого бренда.
Да, кстати говоря, у большинства камер видеонаблюдения (у Hikvision тоже, разумеется) по умолчанию доступен функционал OSD - наложения текстовых плашек на изображение. Например, на снимке ниже видно, что накладывается дата и текст. И на этой же камере необходимо вывести значение термометра.

Как я выводил информер в камеру Hikvision Cctv, Видеонаблюдение, Камера, Linux, Разработка, Программирование, Raspberry Pi, Длиннопост

Именно таким путём пошел участник одного форума. В теме опубликован скрипт, интегрируемый в систему управления умным домом MajorDoMo, который через штатный API изменял значения полей OSD камеры. На этом же форуме я нашел официальную документацию Hikvision, но о ней позже.

Буквально сразу после постановки задачи в голову пришла простая мысль - написать php-скрипт, который будет формировать пакет, включая в него значение температуры, допустим, из GET-запроса, и отправлять его в камеру, к которой уже проброшены нужные порты. Скрипт этот можно разместить на хостинге, где у меня крутится сайт dubos.tech. В тот момент у меня был только доступ к FTP сервера, поэтому я не видел иных вариантов и сразу взялся это реализовывать. Сразу скажу, что путь этот - тупиковый.

В официальной доке написано, что в камеру нужно передать HTTP PUT запрос, в теле которого должен быть XML-файл с информацией. В итоге я весь вечер изучал вопрос отправки PUT запросов через PHP curl. Все варианты заканчивались ответом камеры "3 - Device Error". Да, именно к PHP у меня претензий нет, ибо составленный вручную PUT запрос тоже не прошел.

Практически отчаявшись я, руководствуясь наработками разработчика joonhshin, написал скрипт, который по расписанию (статья про cron для начинающих, которая мне очень помогла) запускался на Raspberry Pi. Этот скрипт я планировал перенести на один из роутеров, которые, как принято, работают круглосуточно и могут без особого труда взять на себя эту обязанность.

Как я выводил информер в камеру Hikvision Cctv, Видеонаблюдение, Камера, Linux, Разработка, Программирование, Raspberry Pi, Длиннопост

Честно говоря, идея с роутерами тоже не оправдала себя. В наличии были два Mikrotik'а, ZyXEL Keenetic и пара дешёвых TP-Link с прошивкой OpenWRT. Язык скриптования RouterOS от Mikrotik был мне чужд, поэтому этот вариант отпал почти сразу. Роутеры на OpenWRT тоже "пролетели", поскольку на них банально не хватило места для установки линуксовой утилиты curl. А мой любимый Keenetic тоже остался не у дел, поскольку в штатной прошивке нет полноценного доступа к SSH-консоли.

К счастью, примерно в это время я получил доступ к SSH-консоли сервера хостинга. Линуксоиды знают, что если у человека есть доступ к консоли linux, у человека есть доступ ко всему. Теперь можно модифицировать скрипт, чтобы он забирал данные с сервера Народного мониторинга и выводил их на камеру.

Как я выводил информер в камеру Hikvision Cctv, Видеонаблюдение, Камера, Linux, Разработка, Программирование, Raspberry Pi, Длиннопост

Обратите внимание, что значения posX и posY обязательно должны быть кратны 16 (например, 0, 16, 32, 48 и т.д.)

Для работы скрипта нужно зарегистрировать на сайте Народного мониторинга приложение (Профиль - Мои Приложения - Новый ключ) и ввести ключ в строку key=... (без скобок и кавычек). В uuid=... ввести любой md5-хэш - это необходимо для работы API.

Далее нужно получить ID датчика. Первым делом нужно открыть окошко устройства на сайте Народного мониторинга. В строке с интересующим нас датчиком есть строка "S*****". Число после буквы S - и есть искомый ID. (Занимательно, что такой просто способ я обнаружил только при написании статьи, раньше же пользовался более сложным вариантом).

В последней строке скрипта, понятно, указываются данные для доступа к камере.

Чтобы скрипт запускался автоматически через равные промежутки времени, нужно сконфигурировать планировщик cron, но об этом написано множество статей, учитывающих специфику для разных систем. Обратите внимание, что API Народного мониторинга не позволяет осуществлять запросы чаще, чем 1 раз в минуту. Советую ставить интервал от 5 минут, поскольку большинство датчиков (в том числе и Dozor Meteo) отправляют показания с такой периодичностью или реже.

Таким образом, задание практически выполнено. Сегодня на объекте, где нужно измерять температуру, установили новую погодную станцию, поэтому примерно через сутки (когда сервис мониторинга одобрит новое устройство) я установлю информер на рабочую камеру. Посмотреть результат работы можно будет на сайте koktebel.top.

Как я выводил информер в камеру Hikvision Cctv, Видеонаблюдение, Камера, Linux, Разработка, Программирование, Raspberry Pi, Длиннопост

Arduino & Pi

1.4K постов20.6K подписчиков

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

Странное решение, у всех камер можно дописать - название камеры. Что то вроде кам1, что мешает вам вместо названия камеры вписать имя сайта

раскрыть ветку (3)
Автор поста оценил этот комментарий

Имя сайта так и написано, суть не в этом. А написать вместо названия камеры температуру не получится, поскольку информация эта должна автоматически обновляться

раскрыть ветку (2)
Автор поста оценил этот комментарий
Если видео на сайте то можно наложить на него все что хочешь с помощью html+css
раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну так видео транслируется не только на сайт, но и на webcam.travel, narodmon, и используется ещё для пары задач

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку