Webcams sind Hipp. Webcams sind schon hochinteressant, aber gerade, wenn sie autonom draußen funktionieren sollten, wirds knifflig. Klar, das Angebot ist da – ich hatte aber vor dieser Installation noch keine Erfahrung mit solchen Geräten.

Mein Vater hat mich nach den irren Schneefällen im Jänner/Februar angeschrieben und gesagt, eigentlich wäre so eine Webcam schon ein Hingucker – gerade in unserem Eck in Lech am Arlberg hat man schon ein schönes Bild zu bewundern. Also hab ich ihm ein paar Vorschläge auf Amazon rausgeholt, die den drei Kriterien entsprechen:

  • WLAN-Anbindung
  • Outdoor-Fest (sollte schon ein paar Minustemperaturen aushalten, wetterfest)
  • Autonomes Bildermachen, hochladen auf externen Web-/FTP-Server

Ich muss ehrlich sagen, ich hab nicht genau gewusst, ob die Kameras, die ich ihm vorgeschlagen habe, ordentliche Kameras sind – da waren überall ein paar Schlagwörter dabei und ich hab einfach auf gut Glück welche rausgepickt. Blindflug pur. Entschieden hat er sich dann für eine IP-CAM von Hootoo, die wohl eher als Überwachungskamera gedacht ist – mit Bewegungsmelder, Nachtsicht und SMTP-Alarm-Service tun sich da schon ganz interessante Möglichkeiten auf. Die hat er dann auch am gleichen Abend gekauft, wie ich dann erfahren habe ;)

Das Ding lädt auf FTP hoch und nachdem ich das erfolgreich getestet habe, konnte es auch schon losgehen. Anfangs hatte ich noch Probleme mit der WLAN-Konnektivität, an der ich beinahe verzweifelt wäre – dabei braucht das Ding nur ein bisschen, bis es sich verbindet. Als die ersten Bilder auf meinem Webspace kam, hab ich auch schon die ersten paar Zeilen PHP zu Papier gebracht. Die Bilder sind alle mit einem Timestamp im Dateinamen versehen. Ich wollte an das Bild mit dem letzten Creation Date noch 1-2 Wasserzeichen und eine Textzeile dranhängen – damit man auch brav sieht, von welcher Webcam das Bild kommt.

Die Bilder werden schön in einem eigenen Ordner gespeichert, das macht das durchiterieren etwas leichter.

Im gesamten sieht der Code dann in etwa so aus:

   1: <?php

   2: $imgdir="./pictures/";

   3:  

   4: $latestFile="";

   5: $latestCTime=0;

   6:  

   7: if ($handle = opendir($imgdir))

   8: {

   9:     while (false !== ($file = readdir($handle)))

  10:     {

  11:         if ($file != "." && $file != "..")

  12:         {

  13:             $fp = fopen($imgdir.$file, "r");

  14:             // sammle Statistiken

  15:             $fstat = fstat($fp);

  16:             fclose($fp);

  17:  

  18:             if($fstat["ctime"] >= $latestCTime)

  19:             {

  20:                 //Get latest file name

  21:                 $latestFile=$file;

  22:                 $latestCTime=$fstat["ctime"];

  23:             }

  24:         }

  25:     }

  26:     closedir($handle);

  27: }

  28:  

  29: header('Content-type: image/png');

  30:  

  31: // Open watermark

  32: $imgzeichen = imagecreatefrompng('wasserzeichen-1.png');

  33: // Open Image

  34: $imgsrc = imagecreatefromjpeg($imgdir.$latestFile);

  35:  

  36: // Image information

  37: $width = imagesx($imgsrc);

  38: $height = imagesy($imgsrc);

  39:  

  40: // Create empty image

  41: $img = imagecreatetruecolor($width, $height);

  42:  

  43: // Paste Webcam image as background

  44: imagecopy($img, $imgsrc, 0, 0, 0, 0, $width, $height);

  45:  

  46: // paste watermark in the right lower corner

  47: imagecopy($img, $imgzeichen, $width-241, $height-50, 0, 0, 241, 50);

  48:  

  49: //Create colors for text

  50: $black = ImageColorAllocate ($img, 0, 0, 0);

  51: $white = ImageColorAllocate ($img, 255, 255, 255);

  52: $imgText="Willkommen - Welcome - BERGLAND APPARTEMENTS*** in Lech am Arlberg: ".date("d.m.Y H:i:s",$latestCTime);

  53: //Line one

  54: ImageTTFText($img, 10, 0, 3, 13, $white, "./font/AnticSlab-Regular.ttf",$imgText);

  55: //Line two if necessary. Replace the fifth parameter with a multiple of 13

  56: //ImageTTFText($img, 10, 0, 3, 26, $white, "./font/AnticSlab-Regular.ttf","");

  57: // Show image directly

  58: imagepng($img);

  59:  

  60: // Free memory

  61: imagedestroy($img);

  62: ?>

 

 

1-2 Feinheiten sollten noch gemacht werden, gerade die Performance ist natürlich nicht überragend, wenn das Bild dann jedes Mal neu gezeichnet wird. Aber die Hauptarbeit ist getan und das Bild kann sich sehen lassen – die Kamera macht ganz ordentliche Bilder!