[Из песочницы] Непрофессиональное видеонаблюдение квартиры занятно и недорого
С момента как у меня в квартире на страже появилась GSM сигнализация, появилась мысль о том, что неплохо бы иметь в мое отсутствие в квартире и «глаза» в случае срабатывания датчиков сигнализации (а может срабатывание ложное?). Поскольку я инженер в области информационных технологий, ни о каком профессиональном решении в виде регистратора и кучи камер речь не шла — только все сам, своими руками. Бюджет тоже сразу было решено обнулить ограничить, а в случае успешности проекта уже думать о его дальнейшем улучшении и модернизации.
Железо
Первым делом подбираем железо. «Глаза» подразумевают камеру, тут уж никуда не денешься. Потом встает вопрос что делать с полученным изображением — хранить его, передавать куда-то и т.д. Так я подумал про подключенный через UPS роутер с модемом 4G для стабильного канала с интернет который тяжело «положить» потенциальному грабителю.
На работе мы с успехом уже несколько лет пользуемся роутерами с USB портами ZyXel Keenetic (конкретно моя уже устаревшая модель Giga2). После того как разработчики прошивок «прикрутили» такую штуку как OPKG (менеджер пакетов) — появилась возможность превратить свой роутер в персональный компьютер с linux c широчайшими возможностями, чем я и решил воспользоваться для своей цели. Итого, уже имея дома компьютер-роутер с подключенным модемом 4G мне не хватало только «глаза» — камеры USB. Вспомнив, что года три-четыре назад покупал для родителей web камеру logitech С270 для их общения с родственниками через skype на компьютере и то что сейчас они общаются уже через планшет — камеру у них реквизировал. Кстати на камере на лицевой панели есть светодиод, который показывает работает ли камера или нет — в дальнейшем это оказалось очень удобно для визуального определения работы системы видеонаблюдения.
Сопряжение и настройка железа
Итак, железо есть. И что не может не радовать — пока находимся в рамках бюджета.
На моем роутере два 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
Внимание! Если никакого изображения в браузере вы не увидели, следует обратить внимание на вашу версию прошивки 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.
Запуск 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 сигнализации уже принимать решение что делать дальше. В процессе реализаций решил кучу проблем, но их решение вызывало определенный кайф от приобретенных знаний и реализации задуманного.