Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
|
computer:geckocam [2010/06/18 13:10] christian gelöscht |
— (aktuell) | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | <note tip>**Hinweis:** Dieser Artikel ist veraltet und wird nicht mehr aktualisiert.</note> | ||
| - | {{ :computer: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====== | ||
| - | |||
| - | {{ :computer: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===== | ||
| - | |||
| - | {{ :computer:Geckocam_Webfrontend.jpg?200|Webfrontend der Geckocam}} | ||
| - | {{ :computer: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===== | ||
| - | |||
| - | {{ :computer: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===== | ||
| - | |||
| - | {{ :computer: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: | ||
| - | |||
| - | <code> # apt-get install gspca-modules-2.6.26-2-486</code> | ||
| - | |||
| - | Über den **Video4Linux**-Stack kann die Webcam nun angesprochen werden, eventuell ist es notwendig, folgenden Eintrag in die **/etc/modules** einzutragen: | ||
| - | |||
| - | <code> gspca</code> | ||
| - | |||
| - | =====fswebcam===== | ||
| - | |||
| - | {{ :computer: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: | ||
| - | |||
| - | <code> wget http://www.firestorm.cx/fswebcam/files/fswebcam_20070108-1_i386.deb | ||
| - | dpkg -i fswebcam_20070108-1_i386.deb</code> | ||
| - | |||
| - | 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: | ||
| - | |||
| - | <code> # 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"</code> | ||
| - | |||
| - | Um nun fswebcam als Daemon zu benutzen reicht ein: | ||
| - | |||
| - | <code> $ fswebcam --conf fswebcam.conf</code> | ||
| - | |||
| - | =====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: | ||
| - | |||
| - | <code> $ ssh-keygen -t rsa | ||
| - | $ ssh-copy-id -i ~/.ssh/id_rsa.pub benutzer@webserver</code> | ||
| - | |||
| - | 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 [[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: | ||
| - | |||
| - | <code> /var/www/gecko 192.***/255.255.255.0(rw,async)</code> | ||
| - | |||
| - | Anschließend werden die Rechte des NFS-Servers neu geladen: | ||
| - | |||
| - | <code> # exportfs -ra</code> | ||
| - | |||
| - | Auf dem Thin-Client wird in der **/etc/fstab** der Home-Order des Webcam-Benutzers einfach mittels NFS gemountet: | ||
| - | |||
| - | <code> 192.***:/var/www/gecko/ /home/fswebcam nfs defaults 0 0 </code> | ||
| - | |||
| - | **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 | ||