**Hinweis:** Dieser Artikel ist veraltet und wird nicht mehr aktualisiert.
{{ :projekte:Geckocam_Logo.jpg?200|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======
{{ :projekte:Geckocam_Grafik.jpg?75|Bestandteile der Geckocam}}
Geckocam besteht aus verschiedenen Bestandteilen:
* ausrangierte Logitech Quickcam Express Plus
* IBM NetVista 2800 8364-EXX Thin-Client mit installiertem //Debian Lenny// und dem Tool //fswebcam//
* Webserver mit NFS-Unterstützung
* ...und natürlich dem Terrarium. :-)
======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=====
{{ :projekte:Geckocam_Webfrontend.jpg?200|Webfrontend der Geckocam}}
{{ :projekte:Geckocam_Webfrontend_Statistiken.jpg?200|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:
* Datum und Zeit des Zugriffs
* IP-Adresse
* Webbrowser
* Sprache/Land
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:
* Intel Pentium MMX Prozessor mit **266 Mhz**
* **192 MB** Arbeitsspeicher (//SDRAM PC-100//)
* **4 GB** Compact Flash-Speicherkarte als stromsparender Festplattenersatz
* 2x RS232- und 2x USB 1.1-Ports
* LPT, Onboard Sound und Lautsprecher
* VGA-Grafikkarte
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=====
{{ :projekte:Webcam_LEDs.jpg?200|Die Platine der geöffneten Webcam}}
In diesem Zusammenhang, zwei Fakten:
*//Geckos können nicht in vollkommener Dunkelheit sehen, sie benötigen eine schwache Lichtquelle//
*//Die Webcam benötigt Licht, um brauchbare Ergebnisse zu erzielen//
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=====
{{ :projekte:Geckocam_Installation.jpg?200|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:
* **openssh-server** - //für administrative Fernzugriffe//
* **nfs-common** - //NFS Client-Anbindung//
=====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=====
{{ :projekte:Geckocam.jpg?200|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
# 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 [[computer:journaling-dateisystem|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======
* Webseite des **fswebcam**-Projekts: http://www.firestorm.cx/fswebcam/
* Artikel über NFS-Freigaben: http://wiki.ubuntuusers.de/NFS