Raspberry Zero Überwachungskamera mit Push Notification

Es gibt für den Raspberry Zero eine nette Halterung Namens ZeroView, mit der man den Zero mit einer Kamera verbauen kann.

Ich hab mit das Ding gekauft und eine kleine Überwachungslösung gebaut - werden Bewegungen erkannt, bekomme ich eine Nachricht auf mein Handy.

Kosten und Bezugsquelle

Ich hab mir den Kram bei PiHut bestellt.

Anschlüsse

Der Raspberry Zero ist mit Anschlüssen sparsam versorgt - ein Mikro USB für die Stromversorgung (“PWR IN”), ein Mikro USB zum Anschließen von Geräten (“USB”). Da der Zero keinen Wlan Chip hat, benötigt ein Adapterkabel um eine Wifi Karte anzuschließen. So ein Adapterkabel ist bei dem “Essentials Kit” von PiHut dabei.

ZeroView zusammenbasteln

Der Raspberry wird einfach bei beiliegenden Schrauben mit der Kamera verschraubt. Dauert nicht länger als 5 Minuten. Das Kamerakabel - man benötigt für den Zero ein spezielles! - wird gefaltet zwischen die Konstruktion gepackt.

Zero mit ZeroView und Kamera

RPi_Cam_Web_Interface

Ich habe mich entschieden, für die Foto- und Videoaufzeichnung das RPi_Cam_Web_interface zu nutzen:

Die Beschreibung der Installation und der umfangreichen Optionen findet sich unter http://elinux.org/RPi-Cam-Web-Interface. Nicht erschrecken lassen von der Fülle der Optionen. Das Tool ist eine Webanwendung und lässt sich über den Browser bedienen.

Autostart

Die Camera App richtet sich unter /etc/rc.local ein eigenes Autostart Script ein. Beim Start des Zero läuft direkt die Anwendung.

Die Anwendung liegt dann unter /var/www/html.

Motion Detection

Die Anwendung besitzt eine automatische Bewegungserkennung. Ändert sich das Bild signifikant, so erkennt das die App und reagiert darauf, indem die Sequenzen aufgezeichnet werden. Zudem kann man seine eigene Scripten hinterlegen. Kleine Änderungen - Bewegungen an Bäumen beispielsweise - werden übrigens nicht erkannt.

Zu Aktivieren der Bewegungserkennung klickt man in der Webanwendung “motion detection start”.

Push Notification bei Bewegungserkennung

Ich hab mir einen Account bei instapush.com angelegt und lasse mich per Push Notification informieren, wenn eine Bewegung erkannt wurde.

Mein Sendscript sieht so aus:

#!/bin/bash

curl -X POST \
      -H "x-instapush-appid: <meine app id>" \
      -H "x-instapush-appsecret: <mein app secret>" \
      -H "Content-Type: application/json" \
      -d '{"event":"motion-detected","trackers":{"url":"http://<IP meines Raspberry Zero>/html/"}}' \
      https://api.instapush.im/v1/post

Ich schicke die URL mit, damit ich einfach per Klick auf die Notification direkt zur Anwendung gelange. Das ist im eigenen Wlan ok; wenn ich die Zero-IP in meinem Router expose, so dass ich auch von außen Zugriff hab, würde ich das nicht machen.

Bei meinen instapush Account sieht das so aus:

Instapush Konfiguration

Damit das Ganze dann funktioniert, muss man sich natürlich noch die instapush App runterladen.

Konfiguration instapush per Job Macro

Es gibt unterschiedliche Möglichkeiten, das Script in der App einzubinden. Die Anwendung ist kein Monolith, sondern besteht aus mehreren Komponenten, welche über FIFO Queues miteinander kommunizieren. In der App läuft ein Scheduler als Daemon, der seine Kommandos aus einer FIFO Queue bezieht. Man kann sich ein “Job Macro” bauen, welches dann vom Scheduler automatisch aufgerufen wird; das File muss start_vid.sh heißen (es gibt insgesamt eine Handvoll solcher Macros). Das start_vid.sh File legt man unter /var/www/html/macros ab. Dann bitte noch Ownership und Permissions setzen:

chown www-data.www-data /var/www/html/macros/start_vid.sh
chmod 764 /var/www/html/macros/start_vid.sh

Das Problem hierbei: Die RPi Anwendung selber ist nicht gegen Datendiebstahl geschützt. Der Macro Ordner liegt unterhalb des DocRoots und ist lesbar - und damit auch alle Scripten darin. Ich find das Käse und hab statt dessen das sendscript woanders hin gepackt und in den Settings konfiguriert.

Konfiguration instapush per Motion Settings

In der Webanwendung auf “edit motion settings” klicken; dort den Parameter on_event_start auf “/home/pi/sendpush.sh && echo -n ‘1’ >/var/www/html/FIFO1” setzen

Motion Konfiguration

Übersicht Konfiguration

Anbei die eine Übersicht der Parameter, die ich verwende:

  • Motion Setting:
    • minimum_motion_frames 10 – die Anzahl der Einzelbilder, inden denen Änderungen festgestellt werden, bevor dieses als Bewegung festgelegt wird.
    • event_gap 10 - die ANzahl von Sekunden in denen nicht spassiert, bevor die Beweugung als abgeschlossen erkannt wird. Das sollte mn nicht zu niedrig ansetzen, sonst bekommt man eine Kaskade von Notifications.
    • on_event_start /home/pi/sendpush.sh && echo -n ‘1’ >/var/www/html/FIFO1 - das Script, welches ausgeführt wird wenn eine Bewegung erkannt wurde.
  • Camera Settings
    • Preset auf “HD-Ready 720p 16:9” - um Speicherplatz zu sparen
  • Schedule Settings
    • PurgeSpace_ModeEx Min Space % – Löscht Aufzeichnungen, wenn der Speicherplatz zu Ende geht. Das Limit lässt sich mit PurgeSpace_Level einstellen