Inhaltsverzeichnis

Hinweis: Dieser Artikel ist veraltet und wird nicht mehr aktualisiert.

Geckocam-Logo

Die Geckocam ist ein Applikation in meinem Netzwerk, welche unsere beiden Leopardgeckos Lilly und Luna in periodischen Abständen fotografiert und diese Fotos mittels einem Webserver der Öffentlichkeit zugänglich macht.

Seit Anfang 2010 betreibe ich die Geckocam nicht mehr.

Bestandteile

Bestandteile der Geckocam

Geckocam besteht aus verschiedenen Bestandteilen:

Funktionsweise

In periodischen Abständen (30 Sekunden) wird ein neues Bild über das Tool fswebcam erfasst. Dieses Tool kann das Bild noch bearbeiten (drehen, spiegeln, Helligkeit/Kontrast modifizieren,…) und auch (Unter-)Titel und die aktuelle Uhrzeit hinzufügen. Das hat den schönen Effekt, dass man immer sehen kann, wie aktuell oder nicht-aktuell ein Bild ist.

Dieses Bild wird dann auf den Webserver übertragen, wo es von jedermann eingesehen werden kann.

Web-Oberfläche

Webfrontend der Geckocam Statistikenansicht

Um die Betrachtung zu erleichtern, werden die Bilder in einer HTML-Seite angezeigt. Mittels einem Meta-Tag wird diese Seite alle 30 Sekunden neu geladen, so wird also immer ein neues Bild angezeigt.

Die ganze Ausgabe erfolgt über ein PHP-Skript, welches auch Statistiken über die eigens entwickelte MisTasc-Engine pflegt. Gespeichert werden folgende Informationen:

So kann ich sehen, wie stark die Nutzung der Geckocam ist. Natürlich werden auch Statistiken veröffentlicht.

Hardware-Teil

Die Geckocam besteht aus diversen Hardware-Bausteinen, welche im Folegenden erklärt werden.

Thin-Client

Für die Geckocam wird ein etwas älterer IBM NetVista 8364-EXX mit folgender Hardwarekonfiguration verwendet:

Der Thin-Client wird neben der Geckocam auch als Pseudo-Bouncer für IRC und Jabber/ICQ verwendet. Die Rechenleistung reicht für diese Aufgaben aus.

Webcam-Umbau

Die Platine der geöffneten Webcam

In diesem Zusammenhang, zwei Fakten:

Das dachte ich, wäre möglich zu kombinieren.

In der Logitech-Webcam ist eine SMD-LED verbaut, welche unter Windows dann leuchtet, wenn die Webcam benutzt wird. Unter Linux leuchtet diese LED permanent. Diese LED könnte man durch eine hellere SMD-LED ersetzen.

Zum anderen bestünde die Möglichkeit am USB-Port eine weitere LED an den Plus-/Minuspol anzubringen.

Wegen mangelnder Widerstände kann ich das derzeit nicht durchführen, wird aber ein andermal nachgeholt.

Software-Teil

Die Geckocam besteht aus diversen Open-Source Softwarepaketen, welche im Folgenden erläutert werden.

Debian Lenny

Installation von Debian Lenny

Als Betriebssystem kommt das freie Linux-Derivat Debian GNU/Linux zum Einsatz. Zuvor habe ich für dieses Projekt mit CRUX Linux mein Glück versucht. Allerdings scheiterte ich hier an der Anbindung der Webcam und hatte auch mit den Umlauten meine Probleme (siehe http://blog.christian-stankowic.org/?p=1254).

Debian verfügt über eine hervorragende Treiber-Unterstützung, auch für die angestaubte i486-Architektur. Die meisten Linux-Distributionen unterstützen diese Architektur nicht einmal mehr.

Installiert wurde ein einfaches Debian-System, ohne jegliche Anwendersoftware - verwendet wurde hier für die Netinstall-CD.

Nach der Grundinstallationen wurden noch einige weitere Anwendungen installiert:

Webcam-Unterstützung

Im Debian-Repo gibt es für Webcams mit GSPCA(2)-Chipsatz einen passenden Treiber. Für die Logitech QuickCam Express Plus wird genau dieser Treiber benötigt:

 # apt-get install gspca-modules-2.6.26-2-486

Über den Video4Linux-Stack kann die Webcam nun angesprochen werden, eventuell ist es notwendig, folgenden Eintrag in die /etc/modules einzutragen:

 gspca

fswebcam

Testbild der Geckocam

Auf der Webseite des fswebcam-Projekts gibt es neben dem Quellcode auch ein vorkompiliertes Debian-Paket. Dieses kann einfach herunterladen und installiert werden:

 wget http://www.firestorm.cx/fswebcam/files/fswebcam_20070108-1_i386.deb
 dpkg -i fswebcam_20070108-1_i386.deb

Für das Tool selbst kann eine Konfigurationsdatei angelegt werden - das hat den Vorteil, dass man nicht alle Parameter anhängen muss. Somit bleibt das Ganze relativ übersichtlich.

Meine Konfigurationsdatei sieht wie folgt aus:

 # Webcam grabbing configuration for fswebcam
 # Camera: Logitech QuickCam Express Plus
 #
 # (c) 2010 by Christian Stankowic <webmaster@christian-stankowic.org>
 # http://wiki.christian-stankowic.org/
 #
 
 #Geraet und Aufloesung definieren
 device v4l1:/dev/video0
 resolution 352x288
 
 #Bild auf 640x480 vergroessern
 scale 640x480
 
 #Alle 30 Sekunden ein neues Bild
 loop 30
 
 #20 Frames auslassen, damit die Kamera richtig fokussieren kann
 skip 20
 
 #Optionales
 #set brightness=60%
 #set contrast=50%
 
 #Bild spiegeln und drehen (Decken-Montage)
 flip h,v
 
 #keine Ausgaben zeigen und Programm als Daemon benutzen
 quiet
 background
 
 #Banner-Definieren
 banner-colour #FF000000
 line-colour #663300
 underlay background.png
 
 top-banner
 font /usr/share/fonts/truetype/msttcorefonts/arial.ttf:16
 no-shadow
 title "Geckocam"
 subtitle "...Lilly und Luna. :)"
 timestamp "Bild vom %d.%m.%Y um %H:%M:%S (%Z)"
 
 #Bild als JPG 90% speichern
 jpeg 90
 save webcam.jpg
 
 #Befehl der nach dem Speichern ausgeführt wird (bei SSH/SCP-Verfahren)
 #exec "scp /home/webcam/webcam.jpg benutzer@webserver:/pfad/webcam.jpg"

Um nun fswebcam als Daemon zu benutzen reicht ein:

 $ fswebcam --conf fswebcam.conf

NFS-Anbindung

Um die erfassten Bilder vom Thin-Client auf den Webserver zur Publizierung zu übertragen gibt es hier zwei Möglichkeiten:

Um dies zu erledigen gibt es zwei Möglichkeiten:

Lösungsansatz 1: SSH/SCP

Man könnte nach dem Erstellen des Fotos die Datei mittels SSH/SCP auf den Webserver übertragen. Dafür müsste ein Zertifikat erstellt und auf den Webserver übertragen werden:

 $ ssh-keygen -t rsa
 $ ssh-copy-id -i ~/.ssh/id_rsa.pub benutzer@webserver

Das hat allerdings einen schwerwiegenden Nachteil: die interne Flash-Speicherkarte des Thin-Clients wird belastet, da die Bilder erst auf dieser zwischengespeichert werden, bevor sie auf den Webserver übertragen werden.

Und genau hier liegt das Problem. Speicherkarten haben gegenüber herkömmlichen Festplatten den bedeuteten Nachteil, dass die Anzahl der Lese-/Speicherzugriffe beschränkt sind. Wenn diese Anzahl der Zugriffe erschöpft sind, ist die Karte defekt und kann nicht mehr benutzt werden.

Wenn man mal überlegt, dass bei dieser Methode schon jede Minute 4 Zugriffe erfolgen, nämlich für das (Über-)Schreiben und Auslesen des Bildes zur Übertragung mittels SSH/SCP, wird klar, dass das keine gute Lösung ist.

Rechnet man das mal für eine Woche durch, kommt man auf rund 40.320 Zugriffe - ob das die Karte lange durchmacht? :-)

Weitere Informationen zu (non-)Journaling-Dateisystemen auf Speicherkarten/SSDs gibt es hier.

Lösungsansatz 2: NFS

Viel durchdachter und sinnvoller ist es, den Home-Ordner des Webcam-Benutzers mittels NFS auszulagern. Sämtliche Speicher- und Lesezugriffe erfolgen dann nicht auf der Speicherkarte sondern auf dem NFS-Server. Hierzu wird auf dem Webserver einfach ein Ordner für den Benutzer angelegt und ein entsprechendes Recht in der NFS-Konfigurationsdatei /etc/exports gesetzt:

 /var/www/gecko       192.***/255.255.255.0(rw,async)

Anschließend werden die Rechte des NFS-Servers neu geladen:

 # exportfs -ra

Auf dem Thin-Client wird in der /etc/fstab der Home-Order des Webcam-Benutzers einfach mittels NFS gemountet:

 192.***:/var/www/gecko/ /home/fswebcam nfs defaults 0 0 

Hinweis: Damit der Beuntzer Rechte auf dem Server hat, müssen die beiden angelegten Benutzer auf dem Client und Server die selbe UID haben! Falls dies nicht der Fall ist, muss dies ggf. mit dem Befehl usermod implementiert werden.

Sämtliche Lese-/Schreibezugriffe erfolgen nach diesen wenigen Schritten nicht mehr auf der Speicherkarte sondern auf dem Webserver.

Internet-Verweise