Überwachungskamera mit dem Raspberry Pi

In diesem Artikel will ich zeigen, wie man seine eigene Überwachungskamera mit dem Raspberry Pi bauen kann. Dabei stelle ich drei unterschiedliche Möglichkeiten vor.

Einkaufsliste

  • Raspberry Pi (3, 4 oder Zero W)
  • Picamera (1.3 0der 2.1)
  • Gehäuse (z.B. offizielles Zero Gehäuse mit Öffnung für Kamera)
  • Netzteil

Alles zusammen kann man hier für ca. 50 Euro kaufen.

Ich habe eine Rasberry Cam 1.3 mit einem Zero W und dem offiziellen Gehäuse verwendet. Die 2.1 hat im Vergleich zur 1.3 beim Video keine großen Vorteile (beide 1080p30) und ist spottbillig zu haben.

Der Zusammenbau erfolgt ähnlich wie in meinem anderen Artikel und sieht mit dem offiziellen Gehäuse so aus:

Einbau der Kamera ins Gehäuse
Gehäuse mit Raspberry und Kamera drinnen

Für die übliche Inbetriebnahme muss bei den Einstellungen noch die Kamera aktiviert werden. Zu empfehlen ist auch VNC und SSH Zugang zu aktivieren und beim Einsatz von mehreren Raspberrys noch einen anderen Namen als raspberry zu vergeben.

Einstellungen
Hostname vergeben

Webstream mit Picamera

Als erstes eine ganz einfache Möglichkeit: In der offiziellen Doku der picamera Python-Bibliothek findet sich ein Skript, das einen einfachen Webstream erzeugt.

Das Skript (hier benant in webstream.py) einfach in den /home/pi Ordner legen und dann mit crontab -e beim Booten das Skript ausführen lassen:
@reboot sudo python3 /home/pi/webstream.py &

Nun kann man im eigenen Netzwerk die IP Adresse des Rasberry Pi aufrufen mit dem Port 8000: http://your-pi-address:8000/.
Von Unterwegs kann man das ganze ansehen, indem man sich einen VPN einrichtet. Für die Fritzbox ist das hier beschrieben.

Der Stream ist recht flüssig. Man kann die Bildqualität noch erhöhen, indem man im Skript folgende Anpassung vornimmt: resolution='1920x1080'. Der Raspberry Zero packt das schon, wenn nichts anderes auf ihm läuft. Je nachdem wie die Kamera montiert ist, muss man das Bild ggf. noch drehen. das geht über camera.rotation = 90 bevor die Kamera mit camera.start_recording aktiviert wird.

Verzichten muss man auf Bewegungserkennung und Benachrichtigungen.

Webstream, Bewegungserkennung und Benachrichtigung mit Motion

Wenn man eine Bewegungserkennung, Sicherung als Video und Bild und Benachrichtigung will, empfiehlt sich das Projekt Motion. Auf dem Rapsberry Pi ist es recht schnell eingerichtet. Mit dieser Anleitung geht es recht gut. Im Unterschied zu dem Tutorial starte ich Motion aber nicht als Deamon, sondern gebe einfach wieder über crontab -e folgendes an: @reboot sudo motion &
Wichtig ist auf jeden Fall, dass die magische Zeile:
sudo modprobe bcm2835-v4l2
eingegeben wird.
Nur dann ist die Rasberry Kamera in Linux über /dev/video0 verfügbar und für Motion auch erreichbar. Die wichtigsten Konfigurationen für den Webstream sind beschrieben und über sudo nano /etc/motion/motion.conf einstellbar.

Der Livestream ist über http://your-pi-address:8081 erreichbar. Von außen wieder über VPN.

Nun geht es weiter: wir wollen ja bei Bewegung ein Foto schießen, ein Video aufnehmen und benachrichtigt werden.

Das meiste davon geht einfach über sudo nano /etc/motion/motion.conf in der Konfiguration einzustellen.

Ich habe meine motion.conf hier bereitgestellt.

Das wichtigste in Kürze:

  • target_dir /home/pi/motion-images legt das Verzeichnis fest, in das Bilder und Videos geschrieben werden. Das Vereichnis muss dazu angelegt sein.
  • Im Abschnitt Motion Detection Settings muss man die Parameter etwas anpassen, bis es zu den eigenen Bedürfnissen passt. threshold und noise_level gibt die Empfindlichkeit an und event_gap die Zeit ab wann eine Bewegung als neu erkannt wird und damit ein neues Video aufgenommen wird.
  • Auch hier muss ggf. mit rotate die Bilddrehung angegeben werden.

Nun wird es spannend: Die Benachrichtigung:

Hierzu installiere ich yagmail:
sudo pip install yagmail und sudo pip3 install yagmail.
Yagmail macht es einfach E-Mail über Googlemail zu senden. Man braucht nun eine Googlemail-Adresse zum Versenden und eine Zieladresse zum Empfangen der Beanchrichtigung. Bei der Senderadresse muss man bei den Google-Sicherheitseinstellungen die Erlaubnis für unsichere Apps einstellen.

Dann lege ich ein neues Verzeichnis im root an:
sudo mkdir /motion-notification
und dann weise ich die Gruppe zu:
sudo chown motion:motion /motion-notification.
Dann füge ich noch den Nutzer Pi zur Gruppe motion hinzu:
sudo usermod -a -G motion pi
Danach lege ich ein Python-Skript (email_n.py) in diesem Ordner mit dem Inhalt aus diesem Gist (Eingabe von Sender-Adresse mit Passwort und Zieladresse noch nötig) an, und setze die Rechte wie zuvor. Es müssen also nun für alle Verzeichnisse und die Python-Datei selbst Ausführrechte für den User motion vorhanden sein.

Nun kann man in der motion.conf in Zeile 609 beim Speichern-Event das Python Skript ausführen lassen:
on_picture_save /usr/bin/python /motion-notification/email_n.py %f.
%f übergibt das Bild als Pfad an das Python Skript und Yagnmail sendet es im Anhang.

Nun wird die SD-Karte ziemlich zugemüllt. Über folgenden Eintrag in der sudo crontab können die Bilder und Videos nach einem Tag gelöscht werden:
0 23 * * * root find /home/pi/motion-images/ -type f -mtime +1 -delete;

Zwei weiterführende Infos noch:

  • Der Raspberry Zero kommt beim Motion ganz schön ins schwitzen und läuft auf fast 100% Auslastung. Die Auflösung auf 640×480 setzen hilft etwas.
  • Theoretisch kann man beide Verfahren kombinieren und auf einem Rasberry das Skript aus dem ersten Abschnitt “Webstream mit Picamera” laufen lassen und auf einem anderen Motion für die Bewegungserkennung und Benachrichtigung. Dazu gibt man in der motion.conf bei netcam_url die URL des streamenden Raspberrys ein.

Motioneyeos

Basierend auf Motion gibt es auch ein eigenes Image für ein abgespecktes Betriebssystem für den Raspberry. Dieses verwandelt den Raspberry recht einfach in eine Überwachungskamera, man hat dann aber keinen Einfluss mehr auf das Betriebssystem.

Ich hab Motioneyeos noch nicht ausprobiert, aber die Beschreibungen sehen recht vielversprechend aus.

Aber auch hier ist der Stream wohl nicht ganz flüssig, da die Basis Motion bildet.

Update Mai 2022

Mittlerweile wird die Option in Googlemail für weniger sichere Apps nicht mehr unterstützt. Alternativ muss man das Konto mit einer Zwei-Faktor Authentifizierung versehen und dann ein App-Passwort generieren. Das muss man sich nachdem es angezeigt wird notieren oder kopieren und im Pythonskript statt dem alten Passwort angeben. Dann klappt es ebenfalls.



Als erster einen Kommentar schreiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert