Как я выводил информер в камеру 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
Автор поста оценил этот комментарий

Не судьба мне посмотреть образец. Менять телефон не охота

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

что за телефон?

1
Автор поста оценил этот комментарий

Странно - раньше таких проблем с сервисом IPeye не возникало. Если интересно - скрин

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

@4fatal, причина в том что ios не поддерживает mse mp4 - поэтому на айфоны передается hls, а так как поток на бесплатном тарифе - то прежде чем отдать hls надо приконектится к камере получить оттуда 30 секунд видео а потом сформировать плейлист, а мобильные браузеры не дают так долго ждать видео

Короче проблем цепочка

1) айфон не может в стримнговый протокол, ему нужен кеш

2) по дефолту кеш на бесплатном тарифе не создается

3) айфон не хочет ждать пока создастся кеш

4) вылезает данная ошибка, потому что низы не могут а верхи не хотят xD

5) что делать - хз, об этой проблеме мы теперь в курсе, но как и когда будем ее решать - неизвестно

6) об проблемах в целом и об этой в частности можно меня попинывать, но результат не гарантирован

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