Wenn Sie über Links in unseren Artikeln einkaufen, erhalten wir eine kleine Provision. Das hat weder Einfluss auf unsere redaktionelle Unabhängigkeit noch auf den Kaufpreis.
In einem kleinen Projekt soll gezeigt werden, wie man eine einfache Webcam als IP-Cam auf Basis Raspberry Zero Pi W und der originalen Pi-Cam aufbaut. Die benötigte Hardware ist minimal, sie besteht nur aus Minirechner, Kamera und Stromversorgung.
Für die Verbindung zur Cam in einem kompakten Gehäuse gibt es mittlerweile sehr kurze Flachkabel, und in der Breite sind diese auf den neuen Anschluss des Zero abgestimmt worden.
Damit der aber ins Netz kommt, braucht es zuerst alle vorbereitenden Maßnahmen in Sachen Konnektivität und Firmware. Wir nutzen das letzte W-Modell des Raspberry, das schon WiFi an Bord hat.
Ohne einen LAN-Anschluss muss man ihn zum Vorkonfigurieren entweder an einen Monitor und eine Tastatur anschließen oder man bringt ihm gleich den Zugang zum eigenen WLAN bei.
Das funktioniert, nachdem man sich idealerweise ein aktuelles Image (Raspian Stretch) heruntergeladen und auf eine Micro-SD übertragen hat und man dann auf der Bootpartition der SD-Karte zwei Dateien ablegt.
Das Image für die SD-Karte des Zero Pi holt man sich am besten von der offiziellen Download-Seite . „Jessie“ und auch das jetzt dort angebotene „Stretch“ funktionieren auch auf dem kleinen Pi von Anfang an. Wenn man den grafischen Desktop nicht braucht, kann man auch das „Raspian Lite“ in der aktuellen Version nehmen.
Die erste der oben genannten Dateien, die wichtig für den Start aus dem eigenen Netzwerk sind, ist eine leere Datei ssh , damit auch von Anfang an ssh-Zugriff erlaubt wird, denn dieser ist in den letzten Distributionen standardmäßig abgeschaltet. Als Zweites braucht es eine wpa_supplicant.conf mit mindestens folgendem Inhalt:
network={ssid="ssid des eigenen Netzwerks"psk="Passwort"key_mgmt=WPA-PSK}
Nach dem Neustart des Pi wird diese in das Verzeichnis /etc/wpa_supplicant/ übertragen und die Konfiguration darin übernommen. In der Router-Konfiguration sollte sich unter den Geräten im Funknetzwerk nun ein Eintrag raspberrypi befinden und man kann sich per
$ ssh pi@raspberrypi
und dem Passwort raspberry auf einem Terminal mit dem Pi verbinden.
Jetzt kann es mit dem Config-Tool mittels
$ sudo raspi-config
weitergehen. Man vergibt ein neues Nutzer-Passwort, damit der Standard-Nutzer pi auch divers geschützt ist und ändert den Hostnamen.
Bei uns soll dieser im Folgenden ipcam sein. Wie gewohnt, können dann auch gleich alle anderen Einstellungen zur Neueinrichtung des Pi gemacht werden wie Lokalisierung und Expandieren des Filesystems.
In den Interfacing Options muss natürlich der Kamera-Support eingeschaltet werden. Bei den Boot-Optionen brauchen wir das CLI mit automatischem Login des Standard-Nutzers. Das ist sicherheitstechnisch zwar nicht besonders schick, aber unsere Cam soll ja Tag für Tag ohne Eingabe von außen in einem gewissen Zeitfenster hochfahren. Aber dazu später.
Nachdem die Grundeinstellungen erledigt sind, kann es wie immer nicht schaden, die Codebasis mittels
$ sudo apt-get update$ sudo apt-get upgrade
auf den aktuellen Stand zu bringen.
Jetzt geht es darum, neben dem Betriebssystem eine wirkliche Firmware für die IP-Cam zu schreiben. Angelehnt an die eigenen Wünsche sollte man sich vorher ein Konzept zurechtlegen. Meine Ansprüche waren relativ gering. Die Webcam soll dreimal am Tag ein Bild vom Standort aus aufnehmen und für die weitere Verwendung bereitstellen. Dafür braucht sie nicht 24 Stunden online zu sein.
Die Aufnahme der Fotos soll ein Skript ( ipcam.sh ) bewerkstelligen, über welches dann die Pi-Cam eingebunden ist. Damit das Ganze tatsächlich zu definierten Zeitpunkten erledigt wird, gibt es diverse Einträge in der Crontab für root
# m h dom mon dow command0 9 * * * /home/pi/ipcam.sh0 13 * * * /home/pi/ipcam.sh0 17 * * * /home/pi/ipcam.sh
welche man durch
$ sudo crontab -e
einträgt. Die Zeiten kann jeder auf die eigenen Bedürfnisse anpassen. Bei uns hat unter anderem eine gute Verteilung über den Tag eine Rolle gespielt. Unsere alte Lösung ist unter anderem auf Webpages zum lokalen Wetter verlinkt, das sollte die neue Lösung hier auch wieder leisten.
Die Anzahl der Fotoshots kann man an dieser Stelle also auch gerne vervielfachen. Allerdings nutzt es nichts, über die Nachtstunden eine Menge “schwarze” Aufnahmen zu generieren. Im Beispiel hier also nur mal drei Bilder pro Tag, um 9, 13 und 17 Uhr.
Hat man genügend Zeit zwischen den Aufnahmen und will man über Nacht eine größere Pause einlegen, lohnt es sich, die Anlage über weite Strecken stromlos zu machen. Das spart Energie und am Ende Kosten. Man betreibt den Pi dann einfach an einem Zwischenstecker mit Zeitschaltuhr. Damit das Ganze auch bei diversen Ungenauigkeiten über lange Strecken funktioniert, sollte man ein größeres Zeitfenster vorsehen. Die Zeitschaltuhr schaltet dann eine Viertelstunde vor und nach dem nächsten “Fototermin” ein und aus.
Unser Skript beendet sich mit einem definierten shutdown now . Die Erfahrung hat gezeigt, dass das eine gute Idee ist, um Beschädigungen an der SD-Karte vom Pi zu vermeiden. Also erst wenn komplett heruntergefahren ist, wird ihm die Betriebsspannung entzogen.
Damit wirklich alles zur Verfügung steht, muss noch mehr installiert werden. Das Commandline-Tool convert , das wir später noch brauchen, stammt aus dem Paket imagemagick :
$ sudo apt-get install imagemagick
Im Zuge dessen werden weitere Pakete automatisch installiert. Dann noch den lftp-Client mittels
$ sudo apt-get install lftp
Der ist nicht schlecht in Sachen Komfort und Handhabung, also bewusst gewählt. Den für die Bildbeschriftung ausgesuchten Droidsans-Font kann man zum Beispiel hier herunterladen und dann im unten definierten Font-Verzeichnis ablegen.
Nun zum Shell-Skript, das jedes Mal startet, wenn der Pi unter Strom gesetzt wird und alle Funktionalität beinhaltet. Der erste Teil stellt sicher, dass wir im Home-Verzeichnis sind und baut Ausgabenamen ( rname ) und Pfad ( rpath ) mit Zeitstempel zusammen. Daneben noch die Beschriftung für das aktuelle Image ( stamp ), welche zuerst in das unbeschriftete Original ( opath ) eingetragen wird:
01| #!/bin/bash -x02| cd /home/pi03| rname=`date +%Y-%m-%d_%H-%M-%S`".jpg"04| rpath="/home/pi/"$rname05| stamp="Beispiel-Bildbeschriftung mit Datum und Zeit "`date +%d.%m.%Y`" "`date +%H:%M`" Uhr"06| opath="/home/pi/orig.jpg"
Jetzt zur Aufnahme mittels raspistill . Auflösung und Qualität sind hier relativ moderat gewählt, das hat wie immer etwas mit der resultierenden Bildgröße zu tun, die nicht unnötig groß sein soll. Die aktuelle Pi-Cam schafft einiges mehr. Gerne kann man die Parameter für Höhe und Breite also variieren, je nachdem, wie viel man Platz auf dem Zielverzeichnis hat…
Probieren in Bezug auf Größe und Seitenverhältnis der gewollten Aufnahme lohnt aber – nicht alle Parameter bringen gute Ergebnisse. Nicht zuletzt ist oben auch eine Pause eingefügt, raspistill braucht etwas zum Arbeiten. Um die Bildbeschriftung einzufügen, haben wir uns für convert aus imagemagick entschieden.
Bleibt noch die Frage nach der Pi-Cam Revision 1.3, wie sie lange ausgeliefert wurde, oder der V 2.1, wie es sie heute gibt. Wie viele andere Nutzer, die die neue Pi-Cam rechtzeitig geordert hatten, hatte ich mit dem voreingestellten Fokus zu kämpfen. Der war unterschiedlich und nicht auf die Ferne eingestellt.
Da konnte man sich helfen, indem man mit leichtem Druck den Fokusring aus seiner Klebeverankerung gelöst und ihn etwas nach rechts im Uhrzeigersinn gedreht hat. Insgesamt hat mich die Qualität der Neuen aber nicht überzeugt, so dass in unserer Cam wieder die alte Kamera-Hardware zum Zug kam. Mal sehen, was da die Zusammenarbeit der Raspberry-Leute mit Sony in der Zukunft so bringt…
Nebenbei: Damit es keine unerwünschten Reflektionen bei unserer Hinterglas-Installation gibt, braucht es auch ein dunkles Gehäuse. Da wir das Original-Gehäuse des Zero Pi (mit vorbereiteter Aussparung für das Objektiv) verwendet haben, ist das Ganze deshalb nachträglich geschwärzt worden. Aber dazu später weiter unten im Text.
Das Original-Gehäuse des Zero Pi (mit vorbereiteter Aussparung fürs Objektiv) wird geschwärzt
Bleibt noch die Übertragung mittels SFTP. Damit das automatisiert gelingt, soll, wie vorhin schon geschildert, lftp zum Einsatz kommen. auto-confirm wird bei uns gesetzt, da wir auf einen Host übertragen, bei dem wir nur eingeschränkt Konfigurationsmöglichkeiten haben und so Authentication-Fehler vermeiden können…
11| HOST='mein sftp host'12| USER='mein sftp user'13| PASSWD='mein sftp passwd'14| lftp15| open sftp://$HOST16| set sftp:auto-confirm yes17| user $USER $PASSWD18| put $rname19| bye20| END_SCRIPT
An dieser Stelle möchte ich darauf hinweisen, dass jeder für die Sicherheit der Login-Daten selber sorgen soll. Dazu gehören die Erreichbarkeit und die Leserechte des Skripts selbst, wo wir der Einfachheit halber hier auch das Passwort im Plaintext eingetragen haben.
Alternativ kann man lftp dazu bewegen, sich die Credentials aus den Bookmarks oder der .netrc zu holen. Nicht ganz unproblematisch mitunter, deshalb sollte man da am besten die "man pages" oder diverse Anleitungen aus dem Web als Hilfestellung heranziehen.
Damit sich nicht alle individuellen Bilder auf der SD-Karte des Pi ansammeln und dessen Platz verbrauchen, wird bei uns jetzt die gerade gemachte Aufnahme nach erfolgreicher Übertragung mittels
21| mv $rpath /home/pi/swcam.jpg
auf ein "Last Image" namens swcam.jpg zurückgeführt. Das kommt einem Löschen der letzten Aufnahme mit Zeitstempel gleich, denn wir brauchen kein Aufnahmearchiv auf der SD-Karte und wollen auch den Überlauf dieser verhindern.
Daneben hat eine unserer Web-Anwendungen aber Bedarf am aktuellen letzten Bild mit einem immer gleich lautenden Dateinamen ohne Zeitstempel darin. Da liegt es nahe, das gerade umbenannte Image ( swcam.jpg ) ebenso zu übertragen. Und das an einen alternativen Ablageort:
22| HOST2='mein alternativer sftp host'23| USER2='mein sftp user2'24| PASSWD2='mein sftp passwd2'25| lftp26| open sftp://$HOST227| set sftp:auto-confirm yes28| user $USER2 $PASSWD229| put $swcam.jpg30| bye31| END_SCRIPT
Am Ende fährt das Skript den Pi durch
32| sudo shutdown -h now
herunter, die Zeitschaltuhr schaltet binnen weniger weiterer Minuten ab und zur nächsten Fotoaufnahme wieder rechtzeitig ein. Es vergehen nur wenige Minuten, bis per Crontab-Eintrag das Skript von neuem startet. Und das bei uns regelmäßig dreimal am Tag.
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.
Um Fotos aufzunehmen und diese zu verteilen, reicht der kleinste Pi völlig. Wir haben den sozusagen hinter Glas an einem entsprechenden Fenster platziert. Der Vorteil gegenüber einer Außeninstallation ist, dass man nicht mit großen Temperaturschwankungen zu kämpfen hat. Das kleine Objektiv der Pi-Cam sollte aber ohne großen Abstand zur Fensterscheibe platziert sein, sonst funktioniert der Fokus nicht mehr.
Wir haben den Pi am Fenster angebracht und dafür den Schwanenhals einer gebräuchlichen Navi-Halterung fürs Auto genutzt
Zum Schluss noch mal ein kleiner Blick auf die Mechanik. Zur Anbringung am Fenster haben wir einen Schwanenhals einer gebräuchlichen Navi-Halterung fürs Auto genutzt. Statt dem Saugfuß ist alles permanent am Rahmen angebracht und klappt bei Bedarf zusammen mit dem Fenster auf.
Darauf ist dann der Kameraaufsatz, wie unten abgebildet, aufgesteckt. Nur: Besonders genau ist das nicht. Deshalb gibt es zum nachträglichen Ausrichten zwei Gewindestäbe, um die Blickrichtung mittels Feineinstellung zu beeinflussen.
Für den Kameraaufsatz gibt es zum nachträglichen Ausrichten zwei Gewindestäbe, mit denen man die Blickrichtung einstellen kann
Mit der Webcam-Lösung bin ich also recht zufrieden, da ich mich überdies auch aus dem eigenen Netzwerk auf dem Gerät einloggen, bei Bedarf fernsteuern und eben ganz individuelle Abläufe festlegen kann.
Da kann eine käufliche IP-Cam nur bedingt mithalten. Denn zum einen ist sie teurer als unser Eigenbau und die Funktionen sind immer auf das beschränkt, was die eingebaute GUI so hergibt.
Das äußere Erscheinungsbild wiederum war für unsere Zwecke eher zweitrangig.
Die vorgestellte Lösung hier ersetzt unseren alten Raspberry Pi 1. Mit dem war es auch schon recht flexibel. Aber nun ist alles noch kompakter geworden. Es braucht keinen zusätzlichen WiFi-Adapter am USB-Anschluss mehr. Der im Zero Pi W eingebaute Chipsatz nebst Antenne verbindet sich sogar sicherer zum einen Stockwerk tiefer liegenden Router. Wie früher schon werden die per SFTP übertragenen Bilder direkt von unseren Websites und dem Homeserver genutzt. Da passt das Zusammenspiel prima, was ich nicht mehr missen möchte.
Erweiterungen sind auch schon implementiert. Beispielsweise kann ein alternatives Skript gestartet werden, um in kurzen Zeitabständen Bilder aufzunehmen, die dann in einem Film zusammengefasst werden. So kann man einen Tag oder eine Woche im Zeitraffer ablaufen lassen, wie man das beispielsweise von diversen Baustellen-Cams kennt. Dazu muss die Cam permanent am Stromnetz bleiben. Damit das keinen manuellen Eingriff braucht, ist als nächstes geplant, die einfache Zeitschaltuhr durch eine Homematic-Schaltsteckdose zu ersetzen und diese ganz nach Bedarf aus unserer bestehenden Hausautomatisierung heraus zu starten...
Swen Hopfe arbeitet bei einem mittelständischen Unternehmen aus der Chipkarten-Branche und ist Experte für Smart Cards, RFID, das IoT, Raspberry Pi und Arduino.