К сожалению, даже живя в небольшой деревушке, приходится сталкиваться с массой маргинальных личностей, которое так и наровят что-нибудь украсть и где-нибудь нагадить. Особо одаренных не пугает даже расположенная по соседству пасека на сотню ульев.
По этой причине возникла острая необходимость в видеонаблюдении. Задача минимум - снимки с камеры через определенный интервал времени, задача максимум - возможность просмотра видео в реальном времени, датчик движения и архив периодических снимков. Желательно, чтобы решение было масштабируемым, поскольку в дальнейшем планируется охватить подобной системой порядка 100 гектар. Ну и конечно же первостепенный фактор - стоимость.
Долго я думал над этим вопросом и самым подходящим решением оказалось использование в качестве камеры обычного смартфона на андроиде. Плюсов у этого решения несколько:
1) Подойдет практически любое б/у устройство, даже не совсем исправное.
2) Цена - в пределах 1,5 тысяч рублей за б/у аппарат, что дешевле любой китайской камеры с поддержкой wifi или 3g
3) Наличие готового софта, что здорово экономит время, хотя и накладывает определенные ограничения.
4) Самодостаточность системы - не нужно роутера, модема и.т.д.
Из минусов могу отметить только один - энергосбережение, но и эта проблема решаема.
Итак, прикинув все за и против, я раздобыл андроид смартфон Мегафон Логин2 за 1500 руб (новый, в упаковке и на гарантии), розетку за 30 руб, аккумуляторные зажимы за 50 руб., чуток кабеля, стабилизатор на 5в, немного старых досок и стеблей какой-то травы. После этого приступил к реализации.
Первым делом был собран вот такой скворечник
Далее на смартфон было установлено бесплатное приложение Ip webcam К слову, это одна из лучших программ для видеонаблюдения под андроид.
В месте монтажа камеры, нормальный 3g обеспечивал только билайн, что наложило определенные ограничения на схему работы. Дело в том, что билайн не предоставляет белых ip физическим лицам, поэтому доступ к камере было решено организовать через сервис Ivideon (ip webcam прекрасно его поддерживает).
Конечно были варианты с пробросом портов через ssh и openvpn туннель, но во первых не обеспечивалась должная скорость работы, во вторых, оба варианта регулярно теряли соединение. Кроме того андроидовский openvpn клиент при каждом запуске спрашивал разрешения. С ssh возникла проблема другого рода - таймаут соединения. Решением стала правка кода ssh (стоило лишь закомментировать пару строк), но, к сожалению, я использовал самый дешевый тариф vps, на котором проброс портов через ssh не работал, как и openvpn, а поскольку система работала в пилотном режиме, я решил не тратить деньги и оставить все как есть, то есть через ivideon, по крайней мере до тех пор пока система не пройдет обкатку.
Ivideon всем хорош, за исключением нескольких моментов. Мне были крайне необходимы 2 вещи - уведомление о движении со снимком на несколько адресов эл. почты и возможность хранения снимков. Ни бесплатный, ни платный тарифы ivideona не предоставляют нужных мне вещей. У них имеются уведомления о движении, но работает это только на платном тарифе и немного не так как мне нужно. Так что пришлось городить очередной костыль.
Костылем стал phantomjs. Суть костыля - убрать ivideon'овские значки и сохранить картинку. Для этого потребовалось сделать камеру общедоступной и обращаться с помощью phantomjs к страничке с iframe'ом камеры, сохраняя только нужную часть. Примерно так (надеюсь товарищи из ивидеона не обидятся на подобную эквилибристику):
var page = require('webpage').create(), testindex = 0, loadInProgress = false; page.viewportSize = { width: 800, height: 600 }; page.onConsoleMessage = function(msg) { console.log(msg); }; page.onLoadStarted = function() { loadInProgress = true; }; page.onLoadFinished = function() { loadInProgress = false; }; page.onResourceRequested = function(requestData, request) { if ((/embed\-logo\.png/).test(requestData['url']) || (/embed\-btn\-reload\.png/).test(requestData['url']) || (/embedded\_video\.css/).test(requestData['url']) ) { request.abort(); } }; var steps = [ function() { page.open("http://localhost/cam.html"); }, function() { page.evaluate(function() { console.log(document.querySelectorAll('html')[0].outerHTML); }); page.clipRect = { top: 790, left: 0, width: 800, height: 600 }; page.render('new.jpg', {format: 'jpeg', quality: '90'}); } ]; interval = setInterval(function() { if (!loadInProgress && typeof steps[testindex] === "function") { steps[testindex](); testindex++; } if (typeof steps[testindex] !== "function") { phantom.exit(); } }, 50);
Что касается обнаружения движений, то для этого я использовал программу motiontrack, точнее одну утилиту из этого набора программ - mdiffer (предварительно модифицированный, для выдачи нужного результата). С её помощью сравниваются старый и новый снимок. Если разница превышает заданное число, то новый снимок посредством heirloom-mailx отправляется адресатам. Для экономии трафика, снимки делаются раз в 3 минуты. Архивы за каждый день хранятся столько, сколько нужно.
После того как программная часть была готова, камера была водружена на свое рабочее место. С электричеством подфартило, поэтому для питания была задействована соседская электросеть. Это избавило меня от мороки с заменой и зарядкой аккумуляторов. Так, на 1 плохеньком автомобильном аккумуляторе 40 ампер/часов, смартфон проработал двое суток, при этом напряжение батареи упало с 12 до 8 вольт. Мог бы работать еще не меньше суток, но я не стал дальше мучать аккумулятор.
Результат пары месяца работы оцениваю как удовлетворительный. Практически все работает должным образом за исключением нескольких НО. Во-первых, после 2х суток непрерывной работы отваливается интернет соединение. Решается исключительно перезагрузкой аппарата. Пришлось настроить регулярное (ночью) автоматическое включение/выключение смартфона. Во-вторых - снова интернет соединение. Камера периодически отваливается при этом никакие манипуляции не помогают. Может полдня работать, а может и не работать. Это плохо, поэтому изыскания продолжаются
P.S. Небольшое обновление от 2016 года. Товарищи из ивидеона лавочку немного прикрыли, но тот кто ищет, тот найдет. Подробно расписывать не стану, а то снова прикроют, но если кому-нибудь будет очень нужно, подскажу.
P.P.S. Небольшое обновление от 2017 года. Спустя 2 года эксплуатации с камерой случился небольшой конфуз - в корпус попала вода, а в результате весеннего заморозка вода превратилась в лед (как это ни странно) и немного раздавила матрицу телефона. Впрочем, основной функционал телефона не пострадал, поэтому камера продолжает успешно работать в прежнем режиме.