5 заметок с тегом

motion

Небольшой апгрейд

Очередная зарплата ведет к очередным обновлениям

На днях попробовал перенести Transmission и сервер DLNA с роутера на домашний сервер, чтобы немного разгрузить первый. Итогом неожиданно стала сильно возросшая нагрузка на сервер, причем в первых строчках «потребителей» стабильно висели motion и Transmission. Нагрузка была такой, что другие программы периодически не отвечали на запросы, что, в свою очередь, вызвало шквал предупреждений в мой почтовый ящик. Конечно, это меня не устроило, поэтому торрент-клиент был на время отключен. Вызвал небольшое недоумение тот момент, что на роутере Transmission работал, не вызывая такой большой нагрузки на и без того слабый процессор. Лучше был оптимизирован что ли под OpenWrt? Аналогично, судя по отзывам, motion при статичном кадре (то есть когда нет движения) «сжирает» 5-10% процессорного времени. У меня же он поглощал в среднем около 40% на сервере.
Тут должен сделать небольшое отступление. Парой месяцев ранее собирал компьютер для профилактория «Сибиряк», чтобы они могли просматривать камеры видеонаблюдения на ресепшене. Компьютер получился достаточно слабенький, но, если воткнуть в него видеокарту, вполне тянул 8 внутренних камер. Так как видеокарт на складе у меня тогда не было, пришлось воткнуть свою личную. Она у меня все равно просто так лежала. Поставил, настроил, все хорошо. Неделю назад попросили подключить второй монитор на этот компьютер и вывести на него камеры, снимающие вокруг здания. Не вопрос! Заказал второй монитор и видеокарту — свою же нужно «отбить» :-)
Возвращаемся на текущий день. После недолгих раздумий, был куплен новый процессор и кабель HDMI. Процессор был установлен в сервер, что дало достаточно большой прирост мощности, судя по выводу команды top. Также установил туда новую видеокарту, которую приобрел для «Сибиряка». Был вариант установить в профилакторий новую карту, а оттуда забрать свою, но, после сравнительных тестов, оказалось, что установленная мной ранее видюха немного мощней, чем та, которую я приобрел на днях. HDMI кабелем соединил видеорегистратор и телевизор. Были некоторые опасения, что телевизор не увидит картинку с таким нестандартным разрешением, но все обошлось — он просто изменил разрешение на что-то среднее по качеству. В итоге, я теперь могу просматривать камеры на телевизоре в хорошем качестве. Плюс несколько «разгрузил» сервер — теперь нагрузка на процессор стала менее 50%. Правда появился какой-то дребезг от вентилятора, но непонятно от какого — пока снимаешь боковую стенку, он прекращается.

31 января   dlna   hdmi   motion   openwrt   transmission   апгрейд   нагрузка   перенос   сервер

Эксперименты с охраной

Опишу предыдущее состояние системы.

  1. Есть не один десяток охранно-пожарных систем (ОПС) типа «Гранит», которые при открытии дверей на объекте шлют смс оператору на центральном пульте. Тот, в свою очередь, либо вызывает ГБР (группа быстрого реагирования), либо «пропускает» событие. В целях резервирования сообщения с «Гранитов» рассылаются не на один номер телефона, а на несколько: охрана и руководство. По моим прикидкам это, минимум, три номера. Скорее всего, их больше. По расходам это выходит более 8 тысяч в месяц. Сумма небольшая, но, если есть возможность, то почему бы ее не уменьшить? «Плюсом» будет то, что получатели смогут отключить оповещения, что в случае с смс почти невозможно. Из текущих «минусов» — постоянные глюки то с телефоном, то с программой синхронизации смс на компьютере. Раз в несколько дней приходится или перезапускать программу, или перезагружать телефон.
  2. Также существует сервер видеонаблюдения, который в постоянном режиме пишет порядка полусотни камер, расположенных на территории завода и не только. Старый сервер, несмотря на свою мощность, потихоньку выходит из строя. БОльшая часть дисков уже была заменена на более специализированные под данную функцию, но периодические выходы из строя начинают утомлять. Особенно это стало заметно, когда человек, занимающийся видеонаблюдением на заводе, уехал на несколько месяцев в отпуск — накопил за несколько лет работы. Он, конечно, оставил вместо себя человека, но он, во-первых, не всегда находится на территории, а во-вторых, делает всё «на отьебись». Что лично меня, например, не устраивает.

Пару месяцев назад был куплен новый сервер под видеонаблюдение. По тестам он несколько превосходит текущий, но последний построен на базе i7-3770, новый же — на базе Xeon (не помню сейчас какой именно). Новый установил параллельно существующему, был установлен Linux с графической оболочкой и тестовая версия сервера видеонаблюдения. Не обошлось, конечно, без бубна и небольших танцев, но, в итоге, все заработало как нужно. В таком состоянии он и был оставлен до конца недели на тестирование. Лично мне Linux больше импонирует, как более устойчивая и быстрая система, по сравнению с Windows. Конечно, у меня свои требования — по ним он полностью выигрывает.
Я не зря упомянул в начале «Граниты». Перед новым годом у меня, в порядке не совсем трезвых размышлений возникла мысль несколько сократить расходы на смс, путем установки какого-то компьютера, на который они и будут приходить. То есть, на данном шаге мы сокращаем количество сообщений, которые рассылают «Граниты» до одного за раз. Затем компьютер уже посредством интернета дублирует эти сообщения на другие телефоны в любой мессенджер: Telegram, Whatsapp и т. п. Благо, что практически каждый человек нынче пользуется хотя бы одним из них.
Но, увы, так как я был не совсем трезв, то поутру вся выстроенная мной схема «убежала» из головы, остался только принцип построения. Благо, что я в порыве воодушевления позвонил товарищу, который занимается установкой и обслуживанием этих «Гранитов» и примерно рассказал, что я хочу получить. Через день он мне напомнил об этом, заодно и прояснили некоторые моменты.
Суть заключается в том, что на какой-то компьютер устанавливается Asterisk, который и занимается приемом и пересылкой сообщений в мессенджеры. Тем более, что знакомый попросил меня разобраться с этой системой, чтобы в дальнейшем внедрить ее на своем предприятии.
Если сервер видеонаблюдения на Linux покажет свою «состоятельность», то почему бы на него не возложить и функции обработки сообщений от ОПС?
В то же время у себя дома вернулся к старой схеме, только немного ее изменив. Как писал ранее, перед новым годом был куплен регистратор, к которому была подключена камера более высокого качества. Регистратор может рассылать оповещения только на почту и, к тому же, только в текстовом виде, что меня не устраивало. Сообщений на одно событие могло быть несколько, по какой причине он разделял одно событие на несколько — неизвестно. Пришлось снова запустить motion, установленный на сервере, брать поток с регистратора и тогда я смог получить и картинку события и текст. Считаю огромным «плюсом» motion то, что он позволяет при возникновении какого-либо события (обнаружено движение, завершена запись видеофайла, завершено сохранение скриншота и т. п.) запустить на выполнение любой внешний скрипт, в котором уже можно делать все, что угодно. Как бонус, можно будет провести кабель от регистратора на телевизор и в прямом эфире просматривать что творится в коридоре.

Создание бота Telegram

Для чего мне это понадобилось? Как писал ранее, телефон не всегда почему-то проверяет почту, несмотря на заданный минимальный интервал проверки. Более удобным показалось использовать telegram для срочных оповещений. Задавшись этой целью, установил на сервер telegram-cli, который, как оказалось позднее, не понадобился. Снесу, однако :-)
Для начала создаем бота при помощи @BotFather. Задаем ему имя и описание. Я также задал и юзерпик для красоты. Открываем чат с этим ботом, набрав в браузере ссылку https://t.me/<имя_вашего_бота>. Затем нужно узнать ваш идентификатор. Для этого я воспользовался ботом @userinfobot, вы можете использовать другие методы. В принципе, вся нужная информация у нас есть.
Следующей задачей стала отправка сообщений из скрипта linux. Здесь нам поможет стандартный curl. После серии опытов обрисовалось примерно вот такое тело скрипта:

ChatID=*****
BotToken=******
Text="Hello, world!"

curl -s -X POST "https://api.telegram.org/bot$BotToken/sendMessage" -F chat_id="$ChatID" -F text="$Text"

Здесь ChatID, BotToken и Text — ваш идентификатор в telegram, токен бота, который вам выдали при его создании, и текст сообщения, соответственно. Хочу обратить внимание на то, что переменные в строке curl взяты в двойные кавычки. Это сделано для того, чтобы избежать утери части текста, если в нем присутствуют пробелы.
С текстом разобрались, остается отправка фотографии. Здесь все чуть-чуть сложней:

curl -s -X POST "https://api.telegram.org/bot$BotToken/sendPhoto" -F chat_id="$ChatID" -F photo="@$1" -F caption="$Text"

Добавился еще один параметр photo, в который передается имя файла. Полный путь к файлу у меня передается самому скрипту, поэтому просто используем его. Также параметр text из предыдущего примера я заменил на необязательный caption — название фото.
На текущий момент motion оповещает меня об обнаружении движения, чуть позже присылает фото и ссылку на файл с записью. В планах еще добавить обнаружение лиц на фото, чтобы было видно кто пришел или ушел. Следующим шагом может стать, например, автоматическое включение моего компьютера когда прихожу домой.

Настройка motion

Так как незадолго до этого мой сервер «приказал жить» (оказалось, что проблема в кабеле питания камеры, но сейчас не об этом), то заодно заново установил систему и, соответственно, перенастраивал половину программ. В том числе и motion.
После настройки оказалось, что в кадре присутствуют помехи, на счет которых у меня была мысль. Но проверить ее удалось только вчера. И действительно, оказалось, что я подключил питание камеры к кабелю, на котором было расположено питание жесткого диска, который и создавал наводки в питании камеры. Переключение на другой кабель устранило эту проблему.
Затем вспомнил, что давно хотел ускорить получение сообщений о появлении движения в поле зрения камеры. Самым подходящим для этого показался Telegram. Поиск соответствующих пакетов в репозитории выдал результат в виде пакета telegram-cli. После его установки никак не получалось его активизировать. По идее, после запуска программы она должна выдать запрос на авторизацию, но ничего не происходило. Процесс висел достаточно продолжительное время, после чего просто выдавал сообщение о крахе. «Игры» с ключами ни к чему не привели, результат был таким же. Вопрос в чат разработчиков остался без ответа. Остается только оставить такой же вопрос на форуме и надеяться на то, что хоть кто-то ответит на него. И, конечно, гуглить, яндексить и так далее...

2017   motion   telegram   неудача   ошибка

Установка видеонаблюдения

Первоначальные испытания

Все подготовительные работы завершены, камера установлена, программное обеспечение тоже. Все работает, все снимает, можно просматривать в «онлайн» режиме. А теперь как все это было.
Установка кронштейна для камеры никаких проблем не вызвала — пробурил три отверстия, два их них пришлось делать неглубокими, бур во что-то уперся и ни в какую не хотел идти дальше. Ладно, мне и половинной глубины хватит, камера легкая. После закрепления камеры проверил как она держится и остался вполне доволен результатом. Кабель для подключения со стоны камеры был распаян еще раньше, поэтому мне оставалось только осуществить подключение. Затем проложил его до сервера, обрезал лишнее, распаял второй конец и подключил к серверу. Во избежание лишних проблем сервер перед подключением выключил.
Затем настала очередь программного обеспечения. Поначалу был установлен ZoneMinder. Настроил его на использование сигнала с ТВ-тюнера, указал с какого входа его брать и... в принципе, на этом основная настройка была завершена. Но потом я несколько дней бился с проблемой отображения «живой» картинки с камеры — ее просто не было. И так подходил к проблеме, и этак — ни в какую. Общение на форуме с одним из разработчиков показало, что мне не хватает... видеокарты в сервере. Этот момент я слегка не понял, но, в любом случае, покупка и установка дополнительных плат в сервер меня не устраивала. К тому же в ZoneMinder обнаружился еще несколько моментов, которые меня тоже не устраивали:

  1. создание нескольких событий (и, соответственно, видеофайлов) в журнале, если в движении была пауза;
  2. всё событие сохранялось в куче jpeg-файлов (момент спорный, но все же);
  3. не было также нормального отображения события в формате видео;
  4. для выгрузки/создания видеофайла нужно было лезть достаточно далеко, чтобы нажать соответствующую кнопку;
  5. нет возможности создать свою реакцию на событие.

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

  1. Есть возможность задать длительность паузы между двумя событиями. В этом случае два события считаются одним и записываются в один видеофайл;
  2. событие сохраняется в куче jpeg-файлов, которые, впрочем, затем можно удалить автоматически;
  3. есть «живой» просмотр камеры, наличие/отсутствие видеокарты не сказывается никак;
  4. видеофайл создается автоматически сразу по завершении события;
  5. на каждый «чих» можно задать свою реакцию.

С motion поначалу тоже пришлось поразбираться. Например, не мог понять почему jpeg-файлы создаются в максимальном качестве, а в видеофайле картинка в виде «квадратов». Решилось увеличением скорости потока видео. Размер видео оказался снова привязан к числу 16, но в файле конфигурации можно указать число кратное 8-ми. В этом случае программа изменит разрешение на ближайшее 16-тикратное. Были еще несколько моментов, но это были лично мои предпочтения, поэтому не буду их описывать.
Так как видео создается автоматически, оставалось только создать реакцию на конец создания видеофайла. В моем случае ей стало выполнение нескольких действий:

а) удаление «старых» файлов jpeg, из которых было создано видео;
б) отправка сообщения на электронную почту о событии с именем созданного файла.

Изначально сообщение «повесил» на одноименное событие, но оказалось, что оно происходит каждый кадр, поэтому писем было более сотни за раз.
Следующее, что мне захотелось, это просматривать камеру с телефона на android и с компьютера. Для телефона нашлась программа SimpleMjpegView. Единственным ее недостатком можно считать то, что показывать она может только одну камеру, для всех других придется переписывать путь подключения. Для Windows также нашлась «легкая» и простая в использовании программа SecurityCamViewer. Ее настройка, так же как и многих других подобных программ, производится в единственном конфигурационном файле, открыть который можно в обычном блокноте.
Еще одна «хотелка», которую я пока что не реализовал, остается выгрузка avi-файлов куда-нибудь в облако. Для пущей сохранности и увеличения доступности.