CCTV на коленке с уведомлением в Telegram

Цель

Однажды захотелось написать telegram бота. В результате родился этот проект, цель которого уведомлять о том что кто-то зашел в квартиру за недорого.

Описание

Идея простая. Ставится камера которая умеет мониторит изменение картинки (по моему это умею делать все wifi камеры), и заливать картинки на ftp сервер. На машине с ftp сервером живет бот писанный на python который делает две простые вещи. Первая — отслеживает появление новых картинок в директории ftp и вторая — если файл появился и не найден lock файл, то этот файл посылается в Telegram.

Железо, софт и бюджет

  1. Камера, пойдет любая, которая умеет выкладывать изменении картинки на ftp, в моем случае это OCam M3+ — 3300 рублей на на Оzon или толпа вариантов на Али
  2. Ftp сервер на котором живет и бот, в моем случае это Raspberry Pi 3 — 3450 рублей в технопоинте или 2200 рублей на Aliexpress
  3. UPS — любой на самом деле, сильно много мощности система не жрет, на него надо сажать роутер, ftp сервер и камеру, дабы хитрые негодяи, отрубив электричество в щитке подъезда ничего не добились
  4. Wifi роутер — любой так-то, главное не глючный
  5. «Свисток» с симкой от вашего любимого сотового оператора. Вставляется в ftp сервер, который настраивается на коннект через мобильную сеть, если негодяи обрежут вам интернет перед проникновением. Например этот за 2600 от Мегафона. Его можно воткнуть или в роутер (если он это поддерживает) или настроить его использование как резервного канала связи на ftp сервере.
  6.  Софт на  телефон для автоматизации. Должен уметь коннектиться по ssh и выполнять команды. Лучше если он это делает автоматом, когда телефон, например, теряет связь с домашним wifi. Я пользую Automagic, это 113 рублей.

собственно мне это все покупать не пришлось, все это было

Камера

Настройка камеры OCam M3+ выглядит так. Ищите что-то подобное в вашей, наверняка оно есть. Не видел не одной камеры в которой такого бы не было (исключая Xiaomi YI Home Camera и ей подобных, которая заточена на использование с облаком производителя)

webcam-settings-1

Настройка камеры OCam M3

Тут надо учесть что детектор движения не идеален и, например, срабатывает от того что освещение меняется (было солнце, набежала тучка, на тебе фото измененной картинки). Есть идея обойти это дополнительной обработкой фоток через motion detection на opencv или даже вообще детектирование движения полностью перенести на него, но все никак не доберусь в этом разобраться.

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

За камерой замечен косяк, она поработав, от 3х до 5 дней, подвисает. Поэтому через backdoor в виде инженерного пароля и телнетам был запилен такой скрипт который раз в сутки, ночью, запускается по крону на ftp сервере и ребутявит камеру.

Бот

Исходники бота и юнит файла для systemd доступны в репе на гитхабе. Бот надо зарегать как описано в официальном руководстве, получить токен, и добавить его в константу TOKEN в watchdog-ftp.py, так же нужно создать чат с ботом и получить ID чата, например как описано тут, и добавить его в константу CHAT_ID в том же файле.

Деплоймент всего этого дела

Как и положено порядочному DevOPs инженеру с легкой параноей деплоймент всего этого был написан в виде Ansible playbook, зашифрован в encfs и залит в приватный гит репозитарий. Но специально для этой статьи была создана открытая репа в которую были залиты скрипты и плейбуки без паролей и явок. Поэтому перед запуском

ansible-playbook -i hosts deploy-to-ftp-server.yaml

необходимо проделать некоторые мануальные шаги, а именно:

  1. Сгенерить ssh ключи в папке keys командой `ssh-keygen -f cctv_key`
  2. Создать запись с IP  в /etc/hosts дли имени ftp-server
  3. Выполнить шаги из раздела БОТ

Деплоймент поставит нужный софт, создаст пользователя cctv, создаст необходимые директории, подложит скрипты и ключи, сконфигурит vsftpd, запустит нужные сервисы, создаст крон джобу для удаления фоток старше 14 дней. Если раскомментировать строчки в самом низу плейбука то он так же  подложит и сконфигурит скрипт рестарта камеры по крону.

Сделано это так же и для того что бы в случае смерти SD карты на Raspberry PI, все вернуть назад с максимально возможной скоростью.

Все это протестировано на  Raspberry PI с установленным Arch Linux

Automagic

Примеры flow для automagic можно взять тут. Не забываем подставить свой адрес и ssh порт. Собственно создание и удаление файла через ssh штука универсальная и может использоваться в огромном количестве автоматизаций и скриптов. В том же Automagic можно написать flow которые будет запускать эти примеры при дисконнекте от домашнего wifi или при коннекте на Bluetooth машины или при покидании определенной зоны на карте. А можно выполнение привязать на widget. А можно все это связать с включением и выключением домашней сигнализации которая управляется через sms. Вариантов мульен.

FTP сервер

FTP сервер в моем случае — Raspberry PI 3 с установленным Arch Linux с питанием от USB WiFi роутера.

Как это выглядит.

В телеге это выглядит примерно так. Вот 21 января система была на стороже, и, как мы видим по двум верхним полным картинкам по коридору прошло животное на которое среагировало датчик движение на включение света. В итоге два false positive.

6 февраля 2018 г8582436334273744471..png

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

Система работает в «продакшене» с начала апреля 2017 года и никаких нареканий не вызывает.

One thought on “CCTV на коленке с уведомлением в Telegram

  1. Pingback: Беспроводная ip-камера OCam M3+ | Уютненько-инженерное

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *