Webcam mit Pi Zero

Unser Webcam-Projekt startete schon vor vielen Jahren und ist öfters aktualisiert worden. In der dritten Generation unserer Cam arbeitet ein Raspberry Pi Zero mit WiFi an Bord. So ist alles nocheinmal kompakter geworden.

Im Folgenden soll also gezeigt werden, wie man eine einfache Webcam als IP-Cam auf Basis Zero Pi W und der originalen PiCam aufbaut. Die benötigte Hardware ist minimal, die besteht nur aus Minirechner, Kamera und Stromversorgung.

Für die Verbindung zur Cam in einem kompakten Gehäuse gibt es mittlerweile echt kurze Flachkabel, und in der Breite sind die 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, welches schon WiFi an Bord hat.

Ohne einen LAN-Anschluss muss man ihn zum Vorkonfigurieren entweder an einen Monitor und Tastatur anschließen oder man bringt ihm gleich den Zugang zum eigenen WLAN bei.

Das funktioniert, nachdem man sich günstigerweise 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 wie gewohnt am besten von der offiziellen Download-Seite auf https://www.raspberrypi.org/downloads/. „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 abgeschalten. Als Zweites braucht es noch eine wpa_supplicant.conf mit mindestens folgendem Inhalt:

network={
ssid=“ssid des eigenen Netzwerks“
psk=“Passwort“
key_mgmt=WPAPSK
}

Nach dem Neustart des Pi wird diese in das Verzeichnis /etc/wpa_supplicant/ übertragen und die Konfiguration darin übernommen. In der Routerkonfiguration 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 Configtool mittels

$ sudo raspiconfig

weitergehen. Man vergibt ein neues User-Passwort, damit der Standarduser pi auch divers geschützt ist und ändert den Hostnamen. Bei uns soll dieser im folgenden ipcam sein. Wie gewohnt, können dann auch alle anderen Einstellungen zur Neueinrichtung des Pi gleich gemacht werden, wie Lokalisierung und Expandieren des Filesystems.
In den Interfacing-Options muss natürlich der Kamera-Support eingeschalten werden. Bei den Boot-Optionen brauchen wir das CLI mit automatischem Log-In des Standard-Users. 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 getan 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 da 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. Dabei braucht sie nicht 24h online zu sein.
Die Aufnahme der Fotos soll ein Skript (ipcam.sh) bewerkstelligen, über welches dann die PiCam 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 command
0  9 * * * /home/pi/ipcam.sh
0 13 * * * /home/pi/ipcam.sh
0 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. Denn 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. Auf der anderen Seite nutzt es nichts, über die Nachtstunden eine Menge „schwarze“ Aufnahmen zu generieren. Im Beispiel hier also nurmal 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 vorgesehen. Die Zeitschaltuhr schaltet dann eine Viertelstunde vor und nach dem nächsten „Fototermin“ ein und aus.

Und unser Skript beendigt 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 Comandline-Tool convert, was 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 unter https://www.mediafont.com/download12824droid_sansfont.zip downloaden und dann im unten definierten Font-Verzeichnis ablegen.

Nun zum Shell-Skript, was jedesmal gestartet wird, wenn der Pi unter Strom gesetzt wird und alle Funktionalität beinhaltet. Der erste Teil stellt sicher, dass wir im Homeverzeichnis 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 -x
02| cd /home/pi
03| rname=`date +%Y%m%d_%H%M%S`“.jpg“
04| rpath=“/home/pi/“$rname
05| stamp=“BeispielBildbeschriftung mit Datum und Zeit „`date +%d.%m.%Y`“ „`date +%H:%M`“ Uhr“
06| opath=“/home/pi/orig.jpg“

Danach die 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 PiCam schafft einiges mehr. Gerne kann man die Parameter für Höhe und Breite also varieren, je nachdem wieviel man Platz auf dem Zielverzeichnis hat…

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

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 ein kleines Stück zum arbeiten. Um die Bildbeschriftung einzufügen, haben wir uns für convert aus imagemagick entschieden. Für den Font funktionieren auch andere TrueTypes…

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“`“

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

Bleibt noch die Frage nach der Pi-Cam Revision 1.3, wie sie lange ausgeliefert wurde oder der V2.1, wie es sie heute gibt. Wie viele, welche die neue Pi-Cam recht zeitig 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, in dem man mit leichtem Druck den Fokusring aus seiner Klebeverankerung gelöst hat 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 Zeropi (mit vorbereiteter Aussparung für das Objektiv) verwandt haben, ist das Ganze deshalb nachträglich geschwärzt worden. Aber dazu später.

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| lftp<<END_SCRIPT
15| open sftp://$HOST
16| set sftp:autoconfirm yes
17| user $USER $PASSWD
18| put $rname
19| bye
20| END_SCRIPT

An dieser Stelle soll noch darauf hingewiesen werden, dass doch jeder für die Sicherheit der Login-Daten selbst Sorge tragen soll. Dazu gehören die Erreichbarkeit und die Leserechte des Skript 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 Webanwendungen aber Bedarf am aktuellen letzten Bild mit einem immer gleich lautenden Dateinamen ohne Zeitstempel drin. 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| lftp<<END_SCRIPT
26| open sftp://$HOST2
27| set sftp:autoconfirm yes
28| user $USER2 $PASSWD2
29| put $swcam.jpg
30| bye
31| 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. Da vergehen dann 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 Users 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 „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.

Zum Schluss nochmal ein kleiner Blick auf die Mechanik. Zur Anbringung am Fenster haben wir einen Schwanenhals einer gebräuchlichen Navihalterung 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 zumittels Feineinstellung zu beeinflussen.

Mit der Webcam-Lösung bin ich also recht zufrieden, da man sich ü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 die teurer als unser Eigenbau und die Funktionen immer nur auf das beschränkt, was die eingebaute GUI so hergibt. Das äußere Erscheinungsbild wiederum war für unsere Zwecke eher zweitrangig.

Die 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 implemtiert, so 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 zum Beispiel von diversen Baustellen-Cams kennt. Dazu muss die Cam permanent am Stromnetz verbleiben. Damit das keinen manuellen Eingriff braucht, ist als nächstes geplant, die einfache Zeitschaltuhr durch eine Homematic-Schaltsteckdose zu ersetzen und die ganz nach Bedarf aus unserer bestehenden Hausautomatisierung heraus zu starten…

Rückblick. So hat vor einigen Jahren alles angefangen, mit einem Raspberry Pi 1 und einer Cam an USB. Dabei handelt es sich im folgenden Text schon um die zweite Generation mit diversen Anpassungen…

Was man nicht alles mit einem Raspberry Pi machen kann. So arbeitet bei uns ein zweiter Raspi-Einplatinencomputer mit Raspbian und fswebcam in Verbindung mit einer klassischen Webcam mit 720p-Aufloesung. Das Ganze ergibt dann die IP-Cam, gerichtet auf unseren Ortsteil in Auerbach, deren Bilder man im Menue unter /Visuelles/Webcam sehen kann.

Hat man einmal den Pi konfiguriert und mit Wheezy-Raspian betriebsbereit, gestaltet sich der weitere Aufbau nicht ganz einfach, aber doch jeder Zeit machbar. fswebcam (hier verwendet) ist etwas aelter, jedoch auch unproblematischer handhabbar als das motion-Paket.

Fuer das Holen der Bilder von der Cam muss etwas probiert und getestet werden. Ein Blick auf eine Kompatibilitaetsliste im Netz lohnt sich. An einen cron-job gebunden, liefert die Software 3mal am Tag entsprechende Bilder per SCP an unseren Hausserver und per SFTP (WLAN-Stick) an ein Remoteverzeichnis, wo sie verschiedenen Webseiten zur Verfuegung stehen.

Zwischenzeitlich gab es auch Modifikationen. Die Bilder erscheinen jetzt (05/2013) etwas schaerfer und groesser (800×450). Dazu wurde die Software auf unserer Cam angepasst und die Hardware (Logitech C720 gegen MS Life Cam HD getauscht) auch.

Mechanisch ist das Ganze auf einem Stativ angebracht und befindet sich auf einem Dachboden hinter Glas. Somit spielt die Witterung nicht die entscheidende Rolle. Die Stromversorgung uebernimmt ein aktiv versorgter USB-Hub, an welchem auch die Webcam und der WLAN-Stick von Edimax angeschlossen sind.

Alles in allem macht die Loesung aber auch softwareseitig einen stabilen Eindruck, wir sind rundum zufrieden damit. Auf der Cam ueber ssh eingeloggt, lassen sich remote alle Parameter setzen und ueberwachen. So gibt es auch ein zweites Skript, welches in kurzer Folge Bilder fuer einen Zeitraffer-Film schiesst, sollte mal der Wolkenhimmel wieder besonders schoen sein…

Swen Hopfe

Schreibe einen Kommentar

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