Orange pi видеонаблюдение с выгрузкой на яндекс диск

Публикация 02.07.2017

Появилась потребность сделать простую time lapse систему видео наблюдения с выгрузкой файлов через интернет на яндекс диск. Такая система предотвращает возможность получения доступа к файлам даже при проникновении в помещение посторонних.

Orange Pi Zero с usb веб камерой

Для задачи идеально подошла старая веб-камера, micro-sd флешь память на 1 Гб (или больше) и микрокомпьютер Orange Pi Zero. На его борту уже есть wi-fi для связи с роутером и 3 usb порта (в моем комплекте есть плата расширения). Питание осуществляется от обычной зарядки для телефона.

Работает система следующим образом:
Раз в 15 секунд с камеры считывается новое изображение. Файл сохраняется в папку "cam". Делается попытка отправить фотографию на яндекс диск. Если попытка была успешной - файл удаляется. Если неудачной из-за отсутствия соединения с интернетом или прочих проблем - файл остается в папке "cam" до следующей отправки. При наступлении следующей итерации по считывании изображения - делается проверка нет ли неотправленных файлов в папке, если есть - они в цикле отправляются на наш яндекс файлообменник.

Теперь приступим к сборке. Наша система будет работать под управлением Armbian (linux). С официального сайта скачиваем ОС для нашей платформы https://www.armbian.com/orange-pi-zero/
Теперь пришло время подключить Micro-SD флешь память к компьютеру. Если ваш компьютер под ОС Windows, то вам понадобится программа RUSFUS. С ее помощью форматируем и загружаем скаченную ОС на нашу флешку.

RUSFUS форматирование флешь памяти

Форматирование займет некоторое время. Нужно дождаться завершения.>br /> Теперь втыкаем нашу флешку с ОС в Pi Zero, включаем ethernet разъем, подаем питание. Первый запуск системы занимает несколько минут.
Сейчас нам нужно зайти в наш роутер и узнать какой IP адрес был присвоен нашей Orange Pi (открыть в браузере http://192.168.0.1). Этот адрес нам нужен для подключении и настройки системы по SSH. К слову сказать, можно подключить провод питания в компьютер и с помощью Arduino IDE открыть консоль, но с ней бывают проблемы, когда в терминал отдается помимо текста графика. Разобрать что к чему становится невозможно. По тому лучше использовать сразу SSH.

И так, мы узнали, что плата определилась как 192.168.0.18.

Orange Pi Zero в списке клиентов роутера

Для подключения по SSH для windows можно использовать приложение PuTTY, на других ОС есть нормальная Unix консоль. Запускаем ееи подключаемся к Orange Pi.

$ ssh root@192.168.0.18

При запросе пароля указываем стандартный "1234".

Armbian при первом входе в систему

При входе в систему под root всегда предлагается сменить пароль, а затем создать нового пользователя (в примере ниже будет использован пользователь с именем "pi"). Создаем его. Теперь желательно заново подключиться по ssh под новым пользователем. Использовать каждый раз root неудобно и небезопасно.

Следующий наш шаг - обновить систему.

$ sudo apt-get update

Обновление всех пакетов займет некоторое время. нужно подождать.

Что бы не тыкать каждый раз ethernet разъем настроим встроенный wi-fi. Настроку будем выполнять стандартным приложением nmtui. В ней есть визуальный интерфейс и особо объяснять что к чему не нужно.

$ nmtui
Настройка сети через nmtui

При смене способа подключения к сети будет разрыв ssh соединения и придется снова подключиться. Если все прошло успешно - Orange Pi подключится к роутеру без провода ethernet. Если для вс важно качество подключения, то лучше остаться на проводном ethernet. Wi-fi не так стабилен - боится помех и микроволновок.

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

$ lsusb

Для сохранения фотографий из камеры будем использовать программу "fswebcam". Если в вашем пакете ее нет, то нужно установить:

$ sudo apt-get install fswebcam

Теперь проверим, что она работает. Для этого перейдем в домашнюю директорию.

$ cd ~

Выполним получение изображение с камеры:

$ fswebcam -r 1920x1080 - > cam.jpg

Если все прошло успешно, то в директории появится файл cam.jpg. Получить список файлов можно коммандой "ls"

$ ls

При работе с камерой есть нюансы. Не все камеры поддерживают MPEG сжатие, а это значит, что потребуются дополнительные танцы с бубном. Так же, у камер есть ограниченный набор поддерживаемых разрешений. Большинство лояльны к 800х600. Если другие разрешения не работают, то используйте его. При возникновении проблем могут валиться ошибки или изображение быть полностью черным.

Следующим шагом настроим виртуальный диск yandex disc. Установим пакет поддержки виртуального диска davfs2:

$ sudo apt-get install davfs2

Дадим права пользователю "pi":

$ sudo usermod -a -G davfs2 pi

В домашней дирректории создадим папку для монтирования:

$ mkdir /home/pi/yandex.disk

Допишим в конец файла конфигурации данные для подключения к яндекс диску:

$ sudo nano /etc/davfs2/secrets

Доступы прописываются в формате:

https://webdav.yandex.ru robots password

В завершении пропишем новый диск:

$ sudo nano /etc/fstab

В конец файла дописываем (обращаю внимание, что тут указано имя пользователя в Orange Pi):

https://webdav.yandex.ru /home/pi/yandex.disk  davfs  rw,noexec,auto,user,async,_netdev,uid=pi,gid=pi  0  0

Уф. Почти все. Не так то и страшно? Теперь мы имеем работающую камеру и доступ к файлобменнику. Как же нам все это запустить? Очень просто, через исполняемый Shell Script! Вся логика работы будет описана в нем.

Создаем файл и задаем ему права:

$ nano cam.sh
$ chmod +x cam.sh

В файл пропишем исполняемый скрипт:

#!/bin/bash

cd ~/cam/

while [ true ]
do
  for i in *.jpg; do
    if cp ~/cam/$i ~/yandex.disk/cam/$i; then
      echo "Again copy file $i"
      rm ~/cam/$i;
    else
      echo "Failed again copy"
      break;
    fi
  done;

  filename="$(date +"%Y-%m-%d_%H-%M-%S").jpg"
  fswebcam --no-banner -r 640x480 -S 2 - > ~/cam/$filename
  sync
  if cp ~/cam/$filename ~/yandex.disk/cam/$filename; then
    rm ~/cam/$filename
    echo "Copy success"
  else
   echo "Copy error"
  fi
  sleep 15
  echo "Send photo: $filename"
done

Все, при запуске этого скрипта:

$ ./cam.sh

Будет запущен цикл отправки фотографий раз в 15 секунд. Для автозапуска этого скрипта можно его прописать в profile:

$ sudo nano /etc/profile

Код запуска:

/home/pi/cam.sh

Теперь наша система делает фотографии и отправляет их на файлобменник. Из улучшений стоит добавить проверку на удаление старых фотографий для предотвращения переполнения диска.

* комментарии публикуются после модерации
07.07.2017 17:43
Можно по тому же принципу организовать более продвинутую таймлапс съемку через консольную утилиту "motion".
Использовал ее под Убунтой. В ней есть замечательная функция - распознавание движений и куча настроек чувствительности. Можно добиться, что бы система не срабатывала на качающиеся деревья.
Но под Армбиан не запускал. По идее должна взлететь.