IP-Kamera im Eigenbau: So geht’s mit dem Raspberry Pi

Günstig und sicher: Mithilfe des Raspberry Pi bauen Sie sich eine eigene IP-Kamera, die weniger kostet und mehr kann als ein Standardgerät.

Wir beschreiben im Folgenden, wie Sie eine einfache Webcam als IP-Cam auf Basis des Raspberry Zero Pi W und der originalen Pi-Cam aufbauen. Dafür benötigen Sie lediglich sehr wenig Hardware: Der Minirechner inklusive passendem Kameramodul plus Stromversorgung reichen aus.

Für die Verbindung zur IP-Cam in einem kompakten Gehäuse gibt es mittlerweile sehr kurze Flachkabel, die auch in der Breite auf den neuen Anschluss des Raspberry Zero abgestimmt sind. Damit der Minicomputer ins Netz kommt, müssen Sie sich als Erstes um die Einstellungen für die Verbindung und die Firmware kümmern. Wir nutzen als Basis für dieses Projekt das aktuelle W-Modell des Raspberry, das WLAN schon an Bord hat. Es kostet rund 20 Euro.

Ohne einen LAN-Anschluss müssen Sie den Raspberry zum Vorkonfigurieren entweder an einen Bildschirm und eine Tastatur anschließen oder Sie bringen ihn idealerweise gleich ins eigene WLAN. Hierfür laden Sie sich zunächst ein aktuelles Image (Raspian Stretch) herunter und speichern es auf eine Micro-SD-Karte. Das Image für die SD-Karte des Zero Pi holt man sich am besten von der offiziellen Download-Seite. Die aktuelle Version „Stretch“ funktioniert auch auf dem kleinen Pi. Benötigen Sie keinen grafischen Desktop, können Sie auch die Version „Raspian Lite“ nehmen.

Schritt 1: Bringen Sie den Raspi ins WLAN

Nun müssen Sie in der Bootpartition der SD-Karte zwei Dateien anlegen, damit der Minicomputer aus dem eigenen Netzwerk starten kann. Zum einen ist das eine leere Datei ssh: Damit wird von Anfang an der ssh-Zugriff erlaubt, denn dieser ist in den letzten Distributionen standardmäßig abgeschaltet. Des Weiteren benötigt der Minirechner die Datei „wpa_supplicant.conf“ mit folgendem Inhalt:

ssid=“ssid des eigenen Netzwerks“

psk=“Passwort“

key_mgmt=WPA-PSK

}

Nach dem Neustart des Pi wird diese Datei dann in das Verzeichnis „/etc/wpa_supplicant/“ übertragen und die eingetragene Konfiguration darin übernommen. Damit kommt der Pi in Ihr WLAN. Im Routermenü sollte sich unter den sichtbaren Geräten im Funknetzwerk jetzt ein Eintrag mit dem Namen „raspberrypi“ befinden.

Starten Sie nun unter Linux eine Terminal-Sitzung und verbinden Sie sich mit dem Pi. Von einem Windows-Rechner aus nutzen Sie für die SSH-Verbindung am besten das Open-Source-Tool Putty. Geben Sie im Anschluss daran den folgenden Befehl ein:

ssh pi@raspberrypi

Das korrekte Passwort lautet raspberry. Als Nächstes richten Sie den Raspi mit dem Config-Tool ein, das Sie starten mit

sudo raspi-config

Vergeben Sie bitte ein neues Benutzerpasswort, damit der Standardbenutzer pi auch geschützt ist und ändern Sie den Hostnamen: Bei uns soll er im Folgenden ipcam heißen. Sie können danach auch gleich alle anderen Einstellungen zur Neueinrichtung des Pi erledigen, wie Lokalisierung und Expandieren des Filesystems.

In den „Interfacing Options“ muss natürlich die Kameraverbindung eingeschaltet werden. Bei den Bootoptionen benötigen wir das CLI mit dem automatischen Log-in des Standardbenutzers. Das ist sicherheitstechnisch zwar nicht besonders schick, aber erforderlich, damit die IP-Cam jeden Tag ohne Eingabe in einem gewissen Zeitfenster hochfahren kann.

Nachdem die Grundeinstellungen erledigt sind, kann es wie immer nicht schaden, die Codebasis auf den aktuellen Stand zu bringen. Das erledigen Sie mit den Befehlen

sudo apt-get update

sudo apt-get upgrade

Schritt 2: Erstellen Sie eine Firmware für die Kamera

Jetzt geht es darum, neben dem Betriebssystem eine echte Firmware für die IP-Cam zu schreiben. Sie enthält die Aufgaben, die die Kamera erledigen soll. Angelehnt an die eigenen Wünsche sollte man sich dafür vorher ein Konzept zurechtlegen. In unserem Projekt geht es darum, dass die Webcam dreimal am Tag ein Bild vom Standort aus aufnehmen und für die weitere Verwendung bereitstellen soll. Dafür braucht sie aber nicht permanent online zu sein.

Die Aufnahme der Fotos soll hier das Script „ipcam.sh“ bewerkstelligen, über das dann die Pi-Cam eingebunden ist. Das Script erstellen wir in Schritt 3. Zuvor müssen Sie verschiedene Einträge in der Crontab für root tätigen, damit die Kamera die Bilder tatsächlich zu bestimmten Zeitpunkten aufnimmt. Rufen Sie Crontab mit dem folgenden Befehl auf:

sudo crontab -e

Dort tragen Sie die folgenden Zeilen ein:

0 9 * * * /home/pi/ipcam.sh

0 13 * * * /home/pi/ipcam.sh

0 17 * * * /home/pi/ipcam.sh

In unserem Beispiel nimmt die Kamera also drei Bilder pro Tag auf, jeweils eines um 9, 13 und 17 Uhr. Die Zeiten kann jeder an die eigenen Bedürfnisse anpassen. Bei unserem Projekt war unter anderem eine gute Verteilung über den Tag wichtig. Die Anzahl der Fotoaufnahmen kann man an dieser Stelle auch gerne vervielfachen. Allerdings bringt es nichts, in den Nachtstunden eine Menge dunkler Aufnahmen zu machen.

Für die Kamerafirmware brauchen Sie zusätzliche Tools wie das Commandline-Tool convert. Es stammt aus dem Paket imagemagick, das Sie wie folgt installieren:

$ sudo apt-get install imagemagick

Zudem holen Sie sich den komfortablen und übersichtlichen lftp-Client mittels

$ sudo apt-get install lftp

Schließlich brauchen Sie noch einen Schriftfont für die Bildbeschriftung: Wir wählen den Droidsans-Font , den Sie herunterladen und im unten definierten Fontverzeichnis ablegen.

Schritt 3: Script für die Kameraaufnahmen schreiben

Nun zum Shell-Script, das jedes Mal startet, wenn der Pi angeschaltet wird. Es beinhaltet alle Aufnahmefunktionen. Der erste Teil stellt sicher, dass wir im Home-Verzeichnis sind, und baut für das aufgenommene Foto Ausgabenamen (rname) und Pfad (rpath) mit Zeitstempel zusammen. Daneben erfolgt die Beschriftung für das aktuelle Image (stamp), die in das unbeschriftete Original (opath) eingetragen wird:

01| #!/bin/bash -x

02| cd /home/pi

03| rname=`date +%Y-%m-%d_%H-%M-%S`“.jpg“

04| rpath=“/home/pi/“$rname

05| stamp=“Beispiel-Bildbeschriftung mit Datum und Zeit„`date +%d.%m.%Y`“ „`date +%H:%M`“ Uhr“

06| opath=“/home/pi/orig.jpg“

Danach folgen die Angaben zur Aufnahme mit dem Befehl raspistill. In unserem Beispiel sind Auflösung und Qualität so gewählt, dass auf den Bildern das Motiv gut erkennbar ist, aber die Dateigröße nicht ausufert. Die aktuelle Pi-Cam schafft deutlich höhere Werte. Sie können deshalb gerne bei den Parametern für Höhe (-h) und Breite (-w) variieren, je nachdem, wie viel Platz Sie im Zielverzeichnis haben.

07| raspistill -h 945 -w 1680 -rot 90 -awb auto -q 90 -o $opath

08| sleep 6

Auch bei der Größe und beim Seitenverhältnis der gewünschten Aufnahme herumzuprobieren, lohnt sich – nicht alle Parameter bringen jedoch gute Ergebnisse. Nach der Aufnahme fügen wir im Script des Weiteren eine kurze Pause ein, denn raspistill braucht etwas Zeit zum Arbeiten. In der Folge wird das Foto noch mit einer Bildbeschriftung versehen. Hier kommen das Tool convert sowie der Droidsans-Font zum Einsatz, die Sie zuvor schon heruntergeladen haben.

09| FONT=/usr/share/fonts/truetype/droid/DroidSans.ttf

10| convert -font $FONT -pointsize 22 -fill white -draw „text 10,935 ‚$stamp‘“ „$opath“ „`basename „$rpath“`“

Nunmehr haben wir also ein Bild von unserer Cam mittels raspistill erzeugt und mit Text versehen.

Schritt 4: Bilder der Webkamera sicher speichern

Bleibt noch die Übertragung mittels SFTP. Damit das automatisiert gelingt, soll das Tool lftp zum Einsatz kommen. Der Parameter auto-confirm wird bei uns gesetzt, da wir auf einen Host übertragen, bei dem wir nur eingeschränkte Konfigurationsmöglichkeiten haben und mit dieser Einstellung Authentifizierungsfehler vermeiden können.

11| HOST=‘mein sftp host‘

12| USER=‘mein sftp user‘

13| PASSWD=‘mein sftp passwd‘

14| lftp<<END_SCRIPT

15| open sftp://$HOST

16| set sftp:auto-confirm yes

17| user $USER $PASSWD

18| put $rname

19| bye

20| END_SCRIPT

An dieser Stelle möchte ich noch darauf hinweisen, dass jeder Nutzer natürlich selber für die Sicherheit der Log-in-Daten sorgen muss. Dazu gehören die Erreichbarkeit und die Leserechte des Scripts selbst, wo wir der Einfachheit halber auch das Passwort im Klartext eingetragen haben. Alternativ lässt sich lftp dazu bewegen, sich die Nutzernamen und das Passwort aus den Bookmarks oder der Datei „.netrc“ zu holen. Das ist allerdings mitunter nicht ganz unproblematisch und erfordert deshalb meist eine Einarbeitung mithilfe verschiedener Anleitungen aus dem Internet.

Damit nicht jedes einzelne Bild auf der SD-Karte des Pi verbleibt und Platz belegt, behelfen wir uns im Script mit dem Befehl

21| mv $rpath /home/pi/swcam.jpg

Dabei wird jede gemachte Aufnahme nach der erfolgreichen Übertragung auf ein „Last Image“ namens „swcam.jpg“ zurückgeführt. Das kommt einem Löschen der letzten Aufnahme mit Zeitstempel gleich, denn wir benötigen kein Aufnahmearchiv auf der SD-Karte. Sie können das aktuelle Bild außerdem an einen alternativen Ablageort übertragen. Dort kann dann beispielsweise wie in unserem Projekt eine Webanwendung darauf zugreifen. Daher ergänzen wir das Script noch entsprechend: Das gerade umbenannte Bild (swcam.jpg), das der letzten Aufnahme mit immer gleichem Dateinamen ohne Zeitstempel entspricht, wird so an einen weiteren Host übertragen.

22| HOST2=‘mein alternativer sftp host‘

23| USER2=‘mein sftp user2‘

24| PASSWD2=‘mein sftp passwd2‘

25| lftp<<END_SCRIPT

26| open sftp://$HOST2

27| set sftp:auto-confirm yes

28| user $USER2 $PASSWD2

29| put $swcam.jpg

30| bye

31| END_SCRIPT

32| sudo shutdown -h now

Mit der letzten Zeile fährt das Script den Pi herunter, die Zeitschaltuhr schaltet binnen weniger Minuten ab und den Rechner zur nächsten Fotoaufnahme wieder rechtzeitig ein. Danach startet der Crontab-Eintrag das Script von Neuem – in unserem Projekt regelmäßig dreimal am Tag.

Das Herunterfahren durch den Befehl shut down now bewährt sich unserer Erfahrung nach, um Beschädigungen an der SD-Karte des Pi zu vermeiden. Denn erst wenn der PC komplett heruntergefahren ist, wird ihm die Betriebsspannung entzogen. Für Testzwecke kann man die letzte Zeile oben vorerst auskommentieren und

sudo ./ipcam.sh

im Terminal aufrufen. Bei uns sind wir dazu im Home-Verzeichnis des Nutzers pi. Gerne kann man alles aber auch in einem eigenen Unterordner unterbringen.

Die richtige Kamera für den Raspi

Das passende Kameramodul für den Raspi gibt es als Revision 1.3 und in der neueren Version 2.1 (rund 25 Euro). Wie andere Nutzer, die die neue Pi-Cam frühzeitig erworben hatten, hatte auch ich mit dem voreingestellten Fokus zu kämpfen. Der war unterschiedlich und nicht auf die Ferne eingestellt. Dieses Problem lässt sich entschärfen, indem Sie mit leichtem Druck den Fokusring aus seiner Klebeverankerung lösen und ihn etwas nach rechts im Uhrzeigersinn drehen. Trotzdem war die Qualität des neuen Kameramoduls nicht überzeugend: Daher kommt im vorgestellten Projekt die ältere Kamerahardware zum Zug.

Schritt 5: Die Raspi-Hardware richtig aufstellen

Um Fotos aufzunehmen und diese zu verteilen, reicht der kleinste Pi völlig. Für das Projekt haben wir den Minirechner hinter einem Fenster platziert. Von dort soll er die Außenwelt aufnehmen. Dies hat den Vorteil, dass der Rechner nicht den Temperaturschwankungen ausgesetzt ist, mit denen er bei einer Installation draußen zu kämpfen hätte. Das kleine Objektiv der Pi-Cam sollte aber ohne großen Abstand zur Fensterscheibe platziert sein, sonst funktioniert der Fokus nicht mehr.

Zur Anbringung am Fenster haben wir einfach einen Schwanenhals einer gebräuchlichen Navi-Halterung für das Auto genutzt. Statt des Saugfußes ist alles permanent am Rahmen angebracht und klappt bei Bedarf zusammen mit dem Fenster auf.

Darauf ist dann der Kameraaufsatz aufgesteckt. Um ihn präziser auszurichten, sind außerdem zwei Gewindestäbe angebracht. Damit es keine unerwünschten Reflexionen bei unserer Hinterglasinstallation gibt, ist außerdem ein dunkles Gehäuse erforderlich. Da wir das Originalgehäuse des Zero Pi mit vorbereiteter Aussparung für das Objektiv verwendet haben, ist das Ganze deshalb nachträglich geschwärzt worden.

Mithilfe dieser Webcam-Lösung im Eigenbau können Sie sich also aus dem eigenen Netzwerk auf dem Gerät einloggen, es bei Bedarf fernsteuern und ganz individuelle Abläufe festlegen. Da kann eine käufliche IP-Cam lediglich bedingt mithalten. Denn zum einen ist sie teurer als der Eigenbau und zum anderen sind die Funktionen immer auf das beschränkt, was die eingebaute Benutzeroberfläche hergibt.

Schritt 6: Die Eigenbau-Kamera flexibel erweitern

Die vorgestellte Lösung funktioniert grundsätzlich auch mit einem älteren Raspberry Pi 1. Doch mit der aktuellen Hardware lässt sich der Aufbau noch kompakter erledigen: Es braucht keinen zusätzlichen WiFi-Adapter am USB-Anschluss mehr. Der im Zero Pi W eingebaute Chipsatz nebst Antenne verbindet sich beispielsweise stabiler mit dem Router im Stockwerk darunter.

Erweiterungen lassen sich auch implementieren. Mit einem alternativen Script lassen sich beispielsweise in kurzen Zeitabständen Bilder aufnehmen, die in einem Film zusammengefasst werden können. So kann man einen Tag oder eine Woche im Zeitraffer ablaufen lassen, wie man das beispielsweise von diversen Baustellen-Cams kennt. Dazu muss die Kamera allerdings permanent am Stromnetz bleiben. Alternativ können Sie die einfache Zeitschaltuhr aus diesem Projekt zum Beispiel durch eine zeitgesteuerte Smart-Home-Schaltsteckdose ersetzen. Damit binden Sie die IP-Kamera des Raspi dann in eine bestehende Hausautomatisierung ein.

So spart die Eigenbau-Cam Strom

Sind die Aufnahmezeitpunkte per Crontab-Eintrag großzügig über den Tag verteilt und auch in der Nacht keine Aufnahmen vorgesehen, lohnt es sich, die Anlage in der Zwischenzeit stromlos zu machen, um Energie und Kosten zu sparen. Das erreichen Sie, indem Sie den Pi an einem Zwischenstecker mit Zeitschaltuhr betreiben. Damit das Ganze auch bei diversen Ungenauigkeiten über einen längeren Zeitraum funktioniert, sollte man ein größeres Zeitfenster vorsehen. Am besten schaltet die Zeitschaltuhr dann eine Viertelstunde vor und nach dem nächsten im Crontab festgehaltenen Fototermin das System ein und aus.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.