Есть понимание, что видеокамера, доступная по цене и функционально несложная поможет решить некоторые вопросы как автолюбителей, так и дачников.

В статье не будет затрагиваться этическая сторона вопроса продукта формата DIY (сделай сам) и кому он больше пригодится — нарушителям или законопослушным гражданам. Вместо этого, предлагается сконцентрироваться на технической стороне решения, которое наверняка будет интересно в ситуациях, вынесенных в заголовок статьи.

Итак, что будет делать камера, которую предлагается собрать бюджетно и не сильно погружаясь в технические аспекты вопроса.

Алгоритм работы следующий. Камера после включения «поднимает соединение» через usb 3G модем, соединяется с VPN, мониторит картинку и, при появлении движения на ней, делает фото и, заодно, отправляет фото в телеграм-канал владельца. Из опций — возможность записывать timelapse, видео и… возможность «покрутить головой» удаленно, то есть поуправлять камерой и посмотреть «что к чему». Нейросетей здесь нет, все достаточно просто.

Будет ли это работать?


Пожалуй будет, так как 1-3 минуты должно хватить, чтобы добежать до авто и с удовлетворением заплатить только штраф; посмотреть, кто же ворует клубнику с грядки и даже повернуть удаленно камеру в его сторону. Даже, если неизвестные снесут камеру или замажут ее, в телеграмме останется фото на память.

Для взыскательных ценителей всего движущегося motion detection можно «загрубить», чтобы не фиксировались вздохи деревьев и полет мотылька.


оригинальная ссылка изображения

В качестве софта используется RPi-web-interface.

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

Отличия, дополнения следующие:

  • связь с telegram-каналом (отправка фото на канал),
  • 3g связь одновременно с наличием wi-fi,
  • обратная связь с камерой через vpn,
  • иные изменения в настройках.

Немного скучной предыстории


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

  • как создавать обратную связь с камерой, которая имеет «серый» динамический ip-адрес,
  • как питать, какие нужны батареи, чтобы хватало хотя бы на несколько часов,
  • как управлять камерой, так как постоянно подбирать ракурс установки без возможности его поправить в дальнейшем, занятие не слишком интересное.

Первая реализация камеры в части софта имела изобилие «костылей».

Изначально все было собрано на raspberry pi 3b с «неродной» камерой (usb, не csi). В качестве «обратной связи» использовался skype. Для связи с камерой на нее надо было… позвонить.
Через skype. В skype была функция автоответа, «после снятия трубки» устанавливался канал видеосвязи и можно было посмотреть то, что видела камера. Все просто.

И все просто жутко работало в плане скорости, звук был отвратительным и так далее. Потом skype перестала обновлять пакеты под raspberry. Была попытка продлить жизнь данного изделия с помощью exagear desktop, который эмулировал win и позволял установить такие приложения как icq, viber, teamspeak. Но все это работало крайне медленно и неэффективно. Потом exagear desktop, который был к тому же с платной лицензией (слава богу, единоразовый платеж) свернули и поддержку прекратили.



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

Перейдем к текущей реализации, которая также не без греха, но вполне сносно выполняет свои функции.

Основа видеокамеры




В качестве базы, от который оттолкнемся при создании камеры будет та же raspberry pi, только модель zero w (c поддержкой wifi).

Наши комплектующие следующие:

  • raspberry pi zero w — 1,8 к руб.;
  • камера со шлейфом — 500 руб.
  • сервоприводы sg-90 — 2шт. — 200 руб.
  • пластиковый подвес — 100 руб.
  • блок питания — 1000 руб.;
  • sd карта на 8, а лучше на 16Гб — 1000 руб.;
  • 3g modem Huawei E171 — 2k руб.
  • sim карта с пакетом услуг интернет, например от мтс — 500 руб.
  • переходник с mini-usb на usb для подключения usb 3g модема — 200 руб.
  • коробка, в которой прислали raspberry pi-бесплатно.

Итого: 7300 руб.
Cхема соединения с сервами подвеса камеры та же, что использовалась ранее

Переходим к настройкам


Не будем далеко отходить от образа (image) с предустановленным Rpi-web-interface, servoblaster, приведенном в ранее опубликованной статье — ссылка на образ. Его необходимо будет немного дополнить.

Первое, что настроим — это 3g модем



Его настройка после подключения к raspberry во многом повторяет шаги из статьи, опубликованной здесь.

Но в статье много лишних этапов, чтобы, так сказать, прочувствовать модем. Поэтому можно смело начинать настраивать с шага «РЕКОННЕКТ ПРИ ДРОПЕ» и не выполнять все предыдущие:

$ mkdir ~/3g
$ cd ~/3g
$ wget http://zool33.uni-graz.at/petz/umtskeeper/src/umtskeeper.tar.gz
$ tar -xzvf umtskeeper.tar.gz
$ chmod +x umtskeeper
$ ./umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN' CUSTOM_APN='internet.mts.ru' APN_USER='mts' APN_PASS='mts'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --nat 'no'
$ sudo nano /etc/rc.local
/home/pi/3g/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN' CUSTOM_APN='internet.mts.ru' APN_USER='mts' APN_PASS='mts'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no' &

*12d1:1506 — изменить на свой, который можно узнать через lsusb.
**если модем не стартует, добавить sudo в начале команды.

После настройки модема и редактирования /etc/rc.local будет небольшой баг, так сказать. Несмотря на то, что rc.local запускает при загрузке все указанные в нем скрипты, umtskeeper запускается весьма неспешно. И на старт модема может уйти от 1 минуты до 3. Это может быть критично в некоторых ситуациях. Как с этим бороться, пока не ясно.

Теперь настроим отправку сообщений в telegram канал c raspberry pi



Нам понадобится следующая статья.

Здесь могут возникнуть сложности с настройкой botа в telegram, если нет опыта его создания через Godfather, а также получения токена и API, которые надо отразить в скрипте:

#Telegram details
tokenurl="https://api.telegram.org/bot<your API key>"
chatid="<your chat id>"

Однако, после настройки, функционал будет работать как часы:

картинка


Настройка параметров камеры



По умолчанию в Rpi-web-interface камера при включении мониторинга движения сначала делает снимок, а потом начинает писать потоковое видео. Об этом написано здесь. Вопрос — Is it possible to record still images using the RPi Cam Web interface on motion detect?

С одной стороны это удобно, сделала пару фото, оправила в telegram и дальше пишет видео. Но на практике это приводит к подвисанию, так как запись идет пока есть движение в кадре, а в телеграм попадают только первые пару снимков.

Поэтому настройки камеры надо поменять следующим образом:





То вместо ca 1 и ca 0 написать только im in.
Теперь в telegram будут прилетать практически все фото.

Настройка VPN


ссылка на оригинал картинки

Здесь были размышления по поводу нескольких вариантов.

Первый и самый простой — купить «белый» (статический) ip и выходить на камеру без лишних заморочек. Раньше это было возможно у некоторых операторов. Но теперь для мобильного интернета физическому лицу эта опция не доступна. Оформлять ИП или покупать фейковую компанию только ради этого, не выход.

Второй вариант — обратный ssh-, vpn- туннель. То есть создается туннель с raspberry pi на существующий собственный vpn сервер. При этом vpn сервер должен иметь белый ip, чтобы raspberry pi до него дотянулась. Неплохой вариант, но тут надо приобретать этот белый ip, пробрасывать порт на роутере, за которым сидит сервер, решать вопрос с падением vpn. Несложно, но хлопотно.

Третий (на нем было решено остановиться) — услуга vpn, в частности vpnki.

На сайте предлагается бесплатный 14-дневный период, далее vpn-туннели блокируются, если не приобрести платный пакет услуг:



Сами тарифы не кусаются, а подробные инструкции помогут пройти несложный путь настройки туннелей. Их понадобится минимум два — один для raspberry pi, второй для устройства, с которого будет доступ (допустим, телефон на android). В нашем случае для raspberry pi использовался этот вариант настройки.

И вот тут ждет еще один неприятный подводный камень, связанный опять же с rc.local.

Если коротко — то модем и vpn конкурируют за соединение ppp0 и в итоге его занимает тот, кто быстрее запустится. Более подробно вопрос описан здесь.

Выход — не запускать vpn пока не запустится модем (не установит соединение ppp). Далее вручную поднять vpn через команду —

sudo pon vpnki updetach

Опять же здесь не решатся вопрос с падением vpn. *Свое соединение модем (umtskeeper) при падении восстанавливает и сообщения в телеграм приходить будут в любом случае, а вот vpn не оживает. Так что опция «покрутить головой» может немного хромать при плохой связи со стороны raspberry pi.

На этом все. Есть еще мысли добавить на web-интерфейс сведения о балансе mts и vpn.

Вопросы и предложения приветствуются.