[Из песочницы] Непрофессиональное видеонаблюдение квартиры занятно и недорого

afklma2ivyuyigiy4x2qvej-tjc.jpeg С момента как у меня в квартире на страже появилась GSM сигнализация, появилась мысль о том, что неплохо бы иметь в мое отсутствие в квартире и «глаза» в случае срабатывания датчиков сигнализации (а может срабатывание ложное?). Поскольку я инженер в области информационных технологий, ни о каком профессиональном решении в виде регистратора и кучи камер речь не шла — только все сам, своими руками. Бюджет тоже сразу было решено обнулить ограничить, а в случае успешности проекта уже думать о его дальнейшем улучшении и модернизации.

Железо


Первым делом подбираем железо. «Глаза» подразумевают камеру, тут уж никуда не денешься. Потом встает вопрос что делать с полученным изображением — хранить его, передавать куда-то и т.д. Так я подумал про подключенный через UPS роутер с модемом 4G для стабильного канала с интернет который тяжело «положить» потенциальному грабителю.

На работе мы с успехом уже несколько лет пользуемся роутерами с USB портами ZyXel Keenetic (конкретно моя уже устаревшая модель Giga2). После того как разработчики прошивок «прикрутили» такую штуку как OPKG (менеджер пакетов) — появилась возможность превратить свой роутер в персональный компьютер с linux c широчайшими возможностями, чем я и решил воспользоваться для своей цели. Итого, уже имея дома компьютер-роутер с подключенным модемом 4G мне не хватало только «глаза» — камеры USB. Вспомнив, что года три-четыре назад покупал для родителей web камеру logitech С270 для их общения с родственниками через skype на компьютере и то что сейчас они общаются уже через планшет — камеру у них реквизировал. Кстати на камере на лицевой панели есть светодиод, который показывает работает ли камера или нет — в дальнейшем это оказалось очень удобно для визуального определения работы системы видеонаблюдения.

jcmn7hy7culoiu4yxzchbbrhpzo.jpeg


Сопряжение и настройка железа


Итак, железо есть. И что не может не радовать — пока находимся в рамках бюджета.
На моем роутере два USB порта, один из которых уже был занят USB модемом 4G. Будем использовать и второй, воткнув туда камеру logitech С270. Для того, чтобы роутер мог работать с камерой нужно предварительно установить на роутере компонент OPKG (в этом компоненте ставим все галочки кроме «Модули ядра для поддержки USB DVB-тюнеров»). Но тут есть подвох — для работы OPKG в роутере нужно дисковое пространство (гигабайта хватит за глаза), но где его взять, ведь оба порта USB на роутере уже заняты? Вариантов решения оказалось два — либо USB hub c флешкой (первое что сразу приходит в голову), либо то, что в мой USB модем 4G можно поставить карту microSD. И найденная дома старая медленная карта microSD 8 гигабайт сразу отправилась в модем. Файловую систему оставил на карте NTFS (хотя настоятельно рекомендуется EXT2 или EXT3). Создаем папку Install и закачиваем нужный образ Entware в нее.

Затем идем в админку роутера, вкладка OPKG, выбираем нашу карту памяти, в строке «Сценарий initrc» пишем

/opt/etc/init.d/rc.unslung


и нажимаем Применить.
После установки OPKG, SSH клиентом (я использую программу Putty на своем ноутбуке c windows) цепляемся к роутеру и выполняем следующие команды для обновления OPKG:

opkg update
opkg upgrade


По умолчанию на SSH логин root пароль keenetic (или zyxel в зависимости от версии прошивки). Пароль настоятельно рекомендуется поменять командой passwd.

Софт


Далее устанавливаем программу motion.

opkg install motion


Именно она будет работать с нашей камерой, анализировать изменение картинки и давать указание роутеру куда посылать полученное изображение. Файл настроек программы motion это \etc\motion\motion.conf, редактируя его меняем нужные нам настройки. Первым делом я установил поддерживаемое камерой максимальное разрешение 1280×720, повернул на изображение на 180 градусов (мне удобнее было установить камеру «вверх ногами»), запись 2 кадра в секунду.

rotate 180
width 1280
height 720
framerate 2


Записывать весь видеопоток и транслировать его в интернет я необходимости не видел, поэтому настроил motion записывать видео и передавать его только в случае изменения изображения. В процессе настройки motion стало понятно, что она не поддерживает с моей камерой режим MJPEG, а поддерживает только режим YUYV — в результате чего результатом работы motion будет не видеоряд, а только последовательность фотографий JPEG.

v4l2_palette 15


Также я настроил motion так, что копия фотографий копируется на внешний FTP сервер.

on_picture_save wput ftp://login:pass@XX.29.136.XX %f


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

Настоятельно рекомендуется поменять логин пароль на подключение к вашей камере.

stream_authentication login:pass


После всех настроек смотрим в браузере результат по адресу:

IPроутера:8081


b4xdwknikb-elwngaufq3z8setg.jpeg


Внимание! Если никакого изображения в браузере вы не увидели, следует обратить внимание на вашу версию прошивки Keenetic. Предположительно начиная с версии прошивки 2.11.A.4.0–1 модули видео по умолчанию не подгружаются, поэтому в SSH надо их загрузить «ручками» или добавить в скрипт запуска:

/opt/sbin/insmod /lib/modules/3.4.113/i2c-core.ko
/opt/sbin/insmod /lib/modules/3.4.113/i2c-dev.ko
/opt/sbin/insmod /lib/modules/3.4.113/videodev.ko
/opt/sbin/insmod /lib/modules/3.4.113/videobuf2-core.ko
/opt/sbin/insmod /lib/modules/3.4.113/videobuf2-memops.ko
/opt/sbin/insmod /lib/modules/3.4.113/videobuf2-vmalloc.ko
/opt/sbin/insmod /lib/modules/3.4.113/v4l2-common.ko
/opt/sbin/insmod /lib/modules/3.4.113/uvcvideo.ko 


Если и после этого изображение не появилось, первым делом смотрим логи Keenetic, что происходит при подключении камеры. Определяется ли камера как видеоустройство и т.д.

Управление


Проделав всю эту работу, пришла мысль о том, что надо как-то этим управлять, т.е. включать и выключать в нужные моменты времени (причем главным образом удаленно). Вопрос решил установкой клиента SSH на свой android смартфон. После выбора SSH клиентов остановился на ScriptKitty. Нажатием двух-трех клавиш на смартфоне можно быстро выполнить включение или отключение motion.

0rdjtofm6gsjlzfjxq_dkrk6zgo.jpeg


Запуск motion через SSH:

/opt/etc/init.d/K99motion restart


Завершение motion через SSH:

/opt/etc/init.d/K99motion stop


Но тут ждал еще один подвох — «серый» ip адрес на моем модеме 4G. Подключаясь к роутеру через Wi-fi без проблем можно выключить или включить motion. Но что делать, если ты за пределами Wi-fi своего роутера, а у твоего роутера «серый» ip? Я нашел спасение в виде VPN. Схема следующая — своим домашним роутером я цепляюсь к роутеру на работе со статичным IP посредством PPTP клиента (на работе на роутере установлен PPTP сервер). Теперь сделав проброс порта SSH с рабочего роутера на домашний я наконец-то могу управлять своей камерой удаленно обращаясь со своего смартфона по статичному адресу роутера на работе.

Также пробовал автоматизировать управление с помощью автоматизатора Tasker (у него есть свой отдельный SSH клиент) — отслеживать подключение смартфона к Wi-Fi роутера и в зависимости от этого включать или выключать motion. Логика тут такая: смартфон подключен к Wi-Fi роутера — значит я дома — камеру отключить. Смартфон не подключен к Wi-Fi роутера — значит я не дома — камеру включить. Но поэкспериментировав, от этого варианта отказался — слишком много ложных срабатываний. Например я дома, смартфон заснул, роутер потерял смартфон, включилась камера — ну и т.д. В настоящее время пользуюсь только ручным способом.

Заключение


В принципе, что хотел я от проекта, то и получил. Могу «видеть» квартиру когда захочу и в случае каких-то срабатываний GSM сигнализации уже принимать решение что делать дальше. В процессе реализаций решил кучу проблем, но их решение вызывало определенный кайф от приобретенных знаний и реализации задуманного.

avfauxqtn-lu_v2vmvijmrrd1em.jpeg

© Habrahabr.ru