Drugie oko sprawiedliwości

W poprzednim wpisie obiecałem omówić kolejny element systemu monitoringu, który pomału buduję, w celu ochrony działki przed intruzami. Na chwilę obecną działki strzegą dwie kamerki- opisana poprzednio nocna oraz nowa, malinowa. Planuje dodać jeszcze kilka czujników ruchu (głównie w pomieszczeniach) oraz mikrofon, na podstawie którego uruchomię detektor tłuczonego szkła. I na tym poprzestanę.

Dalsza rozbudowa systemu pójdzie już w kierunku ogrodowej stacji pogodowej. W pierwszej kolejności zamontuje czujniki, które już posiadam, czyli czujnik wilgotności podłoża oraz czujnik wilgotności i temperatury powierza. Wszystkie czujniki zamierzam połączyć bezprzewodowo. Gdy tylko uda się to spiąć w sensowną całość, to postaram się opisać to na blogu. Gdyby się okazało, że malinka nie podoła wszystkim zadaniom, w gotowości na przejęcie jej obowiązków czeka już Cubietruck.

Druga kamera od tygodnia monitoruje teren. Do jej budowy wykorzystałem malinkę, którą otrzymałem na zeszłorocznym ColdZlocie. Dla przypominania jest to model RPI Raspberry Pi 1 model B. Natomiast cyfrowe oko to moduł kamery 5mpix FULL HD v1.3, który można nabyć już od 110 zł. Całość na dzień dzisiejszy ma wartość ok 170 zł, więc cenowo odpowiada gotowym, chińskim konstrukcjom.

Złożenie wszystkiego w jedną, sprawnie funkcjonującą całość, zabrało mi trochę czasu i nerwów. Spędziłem wiele godzin na testowaniu różnych rozwiązań. Poradniki, z których korzystałem, nie ustrzegły się niestety drobnych błędów, np. w postaci literówek. A że nie pałam wielką miłością do Linuxa, to zeszło mi nad tym trochę więcej czasu, niż pierwotnie zakładałem. Mam nadzieję, że ustrzegłem się podobnych błędów i wszyscy zainteresowani zbudują sobie podobny niskobudżetowy system monitoringu.

W tym miejscu wspomnę o programie, który oszczędził mi sporo czasu. Program HDD Raw Copy Tool służy do tworzenia obrazu kart SD, dzięki czemu w razie "popsucia" systemu w miarę szybko można przywrócić sprawną kopię.

Instalacja Systemu

W pierwszej kolejności pobrałem NOOBS w wersji 1.4.0 Proces instalacji i konfiguracji na tym etapie sprowadza się tylko do rozpakowania archiwum na kartę SD, a następnie wybraniu systemu do zainstalowania. Po ok. 15 minutach, jak prostes instalacji dobiegnie końca, w oknie konfiguracji raspi-config należy włączyć obsługę modułu kamery.

Instalacja motion i motioneye

No to idziemy po kolei i wklepujemy na klawiaturze następujące polecenia:


sudo aptitude update && sudo aptitude upgrade
sudo aptitude install python-tornado python-jinja2 python-imaging motion ffmpeg v4l-utils 

cd /home/pi
wget https://bitbucket.org/ccrisan/motioneye/get/b50d24175d74.zip

pobrany plik `b50d24175d74.zip' należy rozpakować

unzip b50d24175d74.zip

a następnie zmieniamy nazwę katalogu na bardziej przejrzystą:

mv ccrisan-motioneye-b50d24175d74 motioneye
cd motioneye
cp settings_default.py settings.py

Teraz należy dodać obsługę modułu kamery:

sudo nano /etc/modules

W edytorze dodajemy: bcm2835_v4l2

Aby motion uruchamiał się wraz z systemem należy dodać odpowiednią linię do /etc/rc.local

Wykonujemy następujące polecenie:

su nano /etc/rc.local

przed linią "exit 0" dodajemy

sudo -u pi sh -c '/home/pi/motioneye/motioneye.py > /home/pi/motioneye/run/motioneye.log 2>&1' &

Uruchamiamy ponownie malinkę.

Po ponownym uruchomieniu malinki, możemy przejść do konfiguracji motion. Całą sprawę bardzo upraszcza motioneye, dzięki któremu skonfigurujemy wszystkie parametry nagrywania przez przeglądarkę WWW.

W przeglądarce wystarczy wpisać: http://ip_malinki:8765/

Po zalogowaniu, z listy kamer wybieramy wbudowany moduł i gotowe. Konfigurację motion opiszę w kolejnym wpisie, teraz przejdziemy do kolejnego etapu. Ponieważ z kamery będę korzystał głównie zdalnie, to aby ułatwić przenoszenie i podgląd plików, dodałem serwer Samby. Dzięki czemu katalog z nagraniami będzie automatycznie dostępny w otoczeniu sieciowym.

Instalacja serwera Samba

Tak jak poprzenio, wykonujemy kolejno wszystkie polecenia. Zaczynamy od:

sudo apt-get install samba samba-common-bin

Teraz dodamy dowolnego użytkownia, w miejsce "pi" można wpisać dowolną nazwę:

sudo smbpasswd -a pi 111

Następnie przechodzimy do konfiguracji serwera:

sudo nano /etc/samba/smb.conf


na końcu dodajemy:
[public]
comment = Public Storage
path = /home/pi/motioneye/media
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
read only = no

Ostatnim poleceniem zrestartujemy sambe.

sudo /etc/init.d/samba restart

Monitoring już działa, a nagrania bez problemu można przeglądać przez otoczenie sieciowe z dowolnego komputera. Problem pojawia się w chwili, w której chcemy połączyć się z kamerą podłączoną do Internetu Mobilnego. Korzystając z modemu 3G, w większości przypadków nie mamy publicznego IP. Z tego co się dowiedziałem, takie usługi można włączyć w ofertach abonamentowych w Orange i Plus. Niestety cena odblokowania jest zbyt wysoka, więc postanowiłem obejść to za pomocą prostego VPN. Na domowym routerze skonfigurowałem serwer VPN PPTP, natomiast na malince zainstalowałem:

Klienta VPN PPTP

No to zabieramy się za instalację:


sudo apt-get install -y pptp-linux
sudo pptpsetup --create tunel --adres_serwera --username konto --password hasło--encrypt --start
 

Opis, z którego korzystałem był obszerniejszy, ale wydanie tych dwóch poleceń w zupełności załatwia całą sprawę. Zainteresowanych niuansami konfiguracji mogę tylko odesłać do lektury poradnika.

Oczywiście nie będziemy za każdym razem ręcznie nawiązywać połączenia VPN, dlatego dodajemy kilka linijek do /etc/rc.local

sudo nano -B /etc/rc.local 

i wklejamy:


vpn="on"
if [ $vpn = on ]; then
pon tunel updetach
sudo route add -net "0.0.0.0/0" dev "ppp0"
printf "Netstat output of all PPTP sockets\n"
netstat -a | grep "/var/run/pptp/"
fi
 

Od teraz malinka przy każdym uruchamianiu nawiąże połączenie z serwerem VPN. Dzięki temu zyskujemy dostęp do podglądu obrazu na żywo oraz za pomocą dwóch kliknięć uzyskamy dostęp do zgromadzonego materiału dowodowego.

W tym miejscu dzieło można uznać za prawie ukończone. No prawie..

Dodanie skryptu zestawiającego tunel VPN do /etc/rc.local ma jedną wadę. Jeżeli połączenie z internetem zadanie zerwane, tunel VPN również zostanie zerwany. Przez kilka dni korzystałem z prostego skryptu sprawdzającego stan połączenia, do czasu aż odmówił posłuszeństwa. Dopiero po tym fakcie doczytałem, że wystarczyło dodać parametr "persist" do pon tunel updetach, aby zautomatyzować nawiązywanie połączenia. Zawartość /etc/rc.local powinna wyglądać następująco:


vpn="on"
if [ $vpn = on ]; then
pon tunel updetach persist
sudo route add -net "0.0.0.0/0" dev "ppp0"
printf "Netstat output of all PPTP sockets\n"
netstat -a | grep "/var/run/pptp/"
fi
 

Czas na podsumowanie dotychczasowej pracy, na malince działa:


  • Monitoring (motion + motioneye)
  • SAMBA

  • Klient VPN z funkcją wznawiania połączenia

  • W planach:
  • dodanie powiadomień SMS o zdarzeniach
  • dodanie czujnika temperatury (w obudowie malinki)

Oczywiście nie jest to jedyna i słuszna droga, którą należy obrać przy budowie malinowego monitoringu. Np. serwer VPN można zastąpić klientem FTP i automatycznie przerzucać pliki na zdalny serwer.

Opisana przez mnie konfiguracja, w 99% odpowiada moim oczekiwaniom odnośnie monitoringu oraz automatycznej kopii zapasowej. Jeszcze kilka drobnych elementów wymaga dopracowania, a że mam dwie malinki, to jest na czym testować wprowadzone zmiany. W najbliższym czasie zamierzam pochylić się bardziej nad konfiguracją pakietu motion. Jeżeli pojawi się coś ciekawego, to podzielę się tym na moim blogu.

O ile nie zamierzam śledzić obrazu z obu kamer na żywo przez 24h, to i tak z ciekawości sprawdziłem, ile zużywają kamery podczas 60 minut streamingu video. I tak kamera p2p w tym czasie zużyła ponad 900 MB, natomiast transmisja z malinki (o podobnych parametrach transmitowanego obrazu) zużyła tylko 200 MB. O ile spodziewałem się wyniku w granicach 200-300 MB/h, to wynik chińskiej kamerki nieco mnie przeraził.

Podsumowując dotychczasowe prace, mogę stwierdzić, że malinowa kamera daje o wiele więcej możliwości i satysfakcji od kupnej wcześniej kamery p2p.

Wpis powstał w zeszłym tygodniu, a od tego czasu trochę się zmieniło. I tak, nie mam już kamerki p2p. Znalazła nowy dom;) Stary model Raspberry Pi zastąpiłem najnowszą wersją malinki. Dążąc do zminimalizowania pozostawionego na działce sprzętu elektronicznego, zrezygnowałem z routera. Od wczoraj malinka korzysta z modemu 4G USB.
A dzisiaj pozostawiłem mały wabik na złodzieja;)