Sodele, nun habe ich es geschafft. Es gibt zunächst mal eine Übersichtsseite (kameras.cgi) mit den 4 Kamerabildern, die per script abgerufen werden und die ganz normal über Port 80 erreichbar ist.
Meine Webseiten liegen im absoluten Pfad /volume1/web, hier wurde ein Verzeichnis /img erstellt und mit einer .htaccess geschützt. Das bedeutet, nur, wer autorisiert ist, kann die Bilder sehen.
kamera.cgi:
#!/bin/ash
set -f
pwd=`pwd`
echo "Content-type: text/html"
echo
echo "<HTML><HEAD><TITLE>Haus</TITLE>"
echo "<meta http-equiv="Refresh" content="60">"
echo "</HEAD>"
curl "http://10.0.0.81:81/snapshot.cgi?&resolution=32&user=USER&pwd=PASS&" > /volume1/web/img/cam1.jpg
curl "http://10.0.0.82:82/snapshot.cgi?&resolution=32&user=USER&pwd=PASS&" > /volume1/web/img/cam2.jpg
curl "http://10.0.0.83:83/snapshot.cgi?&resolution=32&user=USER&pwd=PASS&" > /volume1/web/img/cam3.jpg
curl "http://10.0.0.84:84/snapshot.cgi?&resolution=32&user=USER&pwd=PASS&" > /volume1/web/img/cam4.jpg
echo "<br>"
echo "<A HREF="/cgi-bin/kam1.cgi"><img src="/img/cam1.jpg" width="336" height="252" BORDER="0"></A>"
echo "<A HREF="/cgi-bin/kam2.cgi"><img src="/img/cam2.jpg" width="336" height="252" BORDER="0"></A>"
echo "<A HREF="/cgi-bin/kam3.cgi"><img src="/img/cam3.jpg" width="336" height="252" BORDER="0"></A>"
echo "<A HREF="/cgi-bin/kam4.cgi"><img src="/img/cam4.jpg" width="336" height="252" BORDER="0"></A>"
echo "<br>"
echo "<BODY>"
echo "</BODY></HTML>"
echo
Die Bilder selbst verweisen auf die Seiten kam1.cgi - kam4.cgi, in denen ich die Steuerung implementiert habe. Das ist zwar ein wenig aufwendig, funktioniert aber perfekt.
Dazu habe ich zunächst im Ordner /cgi-bin einen Unterordner /control erstellt und auch mit einer .htaccess und der gleichen .htpasswd wie oben versehen. Das ist nötig, damit nur autorisierte Nutzer an den Kameras drehen können.
Die Datei kam1.cgi liegt auch im Verzeichnis /cgi-bin und sieht folgendermaßen aus:
#!/bin/ash
set -f
pwd=`pwd`
echo "Content-type: text/html"
echo
echo "<HTML><HEAD><TITLE>Kamera 1</TITLE>"
echo "<meta http-equiv="Refresh" content="15">"
echo "</HEAD>"
curl "http://10.0.0.81:81/snapshot.cgi?&resolution=32&user=USER&pwd=PASS&" > /volume1/web/img/cam1.jpg
echo "<br>"
echo "<img src="/img/cam1.jpg">"
echo "<br>"
echo "<A href="/cgi-bin/control/kam1_l.cgi">links</A>        "
echo "<A href="/cgi-bin/control/kam1_r.cgi">rechts</A>        "
echo "<A href="/cgi-bin/control/kam1_o.cgi">hoch</A>        "
echo "<A href="/cgi-bin/control/kam1_u.cgi">runter</A>        "
echo "<A href="/cgi-bin/control/kam1_home.cgi">home</A>        "
echo "<br>"
echo "<br>"
echo "<A href="/cgi-bin/control/kam1_p1.cgi">1</A>    "
echo "<A href="/cgi-bin/control/kam1_p2.cgi">2</A>    "
echo "<A href="/cgi-bin/control/kam1_p3.cgi">3</A>    "
echo "<A href="/cgi-bin/control/kam1_p4.cgi">4</A>    "
echo "<A href="/cgi-bin/control/kam1_p5.cgi">5</A>    "
echo "<A href="/cgi-bin/control/kam1_p6.cgi">6</A>    "
echo "<A href="/cgi-bin/control/kam1_p7.cgi">7</A>    "
echo "<A href="/cgi-bin/control/kam1_p8.cgi">8</A>    "
echo "<A href="/cgi-bin/control/kam1_p9.cgi">9</A>    "
echo "<A href="/cgi-bin/control/kam1_p10.cgi">10</A>    "
echo "<A href="/cgi-bin/control/kam1_p11.cgi">11</A>    "
echo "<A href="/cgi-bin/control/kam1_p12.cgi">12</A>    "
echo "<A href="/cgi-bin/control/kam1_p13.cgi">13</A>    "
echo "<A href="/cgi-bin/control/kam1_p14.cgi">14</A>    "
echo "<A href="/cgi-bin/control/kam1_p15.cgi">15</A>    "
echo "<BR>"
echo "<BR>"
echo "<A href="/cgi-bin/control/kam1_al1.cgi">Alarm ein</A>        "
echo "<A href="/cgi-bin/control/kam1_al0.cgi">Alarm aus</A>    "
echo "<BODY>"
echo "</BODY></HTML>"
echo
Die Dateien kam2.cgi … kam4.cgi sehen entsprechend aus.
Wie man sieht, gibt es nun die Schaltflächen links, rechts, hoch, runter, home, Alarm an, Alarm aus sowie die Anwahltasten für die 15 Positionen. Diese Schalter verweisen auf entsprechende Dateien im geschützten Ordner /cgi-bin/control.
Beispiel für das Script kam1_p1.cgi, was die Kamera Position 1 anfahren läßt und dann zurückspringt zu kam1.cgi:
#!/bin/ash
set -f
pwd=`pwd`
echo "Content-type: text/html"
echo
echo "<HTML><HEAD><TITLE>Kam1 Position 1</TITLE>"
echo "<script LANGUAGE="JavaScript">"
echo " top.location.href='/cgi-bin/kam1.cgi'"
echo "</script>"
echo "</HEAD>"
curl "http://10.0.0.81:81/decoder_control.cgi?user=USER&pwd=PASSWD&command=31"
echo "<BODY>"
echo "</BODY>"
echo "</HTML>"
Hier noch das Beispiel für die Datei, mit der man den Alarm von Kamera1 ausschalten kann. Hier muss man ein Administrator-Login übergeben.
kam1_al0.cgi
#!/bin/ash
set -f
pwd=`pwd`
echo "Content-type: text/html"
echo
echo "<HTML><HEAD><TITLE>Kam1 Alarm aus</TITLE>"
echo "<script LANGUAGE="JavaScript">"
echo " top.location.href='/cgi-bin/kam1.cgi'"
echo "</script>"
echo "</HEAD>"
curl "http://10.0.0.81:81/set_alarm.cgi?user=ADMINISTRATOR&pwd=PASS&motion_armed=0"
echo "<BODY>"
echo "</BODY>"
echo "</HTML>"
Nochmal zusammengefasst, habe ich dank NobiMan s tatkräftiger Hilfe folgendes realisiert:
- Ein script holt bei Aufruf aus dem Netz die aktuellen Standbilder von 4 Kameras im heimischen Netz 10.0.0.0 ab und generiert daraus eine html-Seite. Es ist dazu nicht notwendig, dauernd über den ftp-Client der Kameras Bilddateien auf den Server zu schreiben.
- Bei Aufruf der Seite gibt es keinen Verweis auf die globalen Adressen und Ports der einzelnen Kameras. Die gesamte Seite inclusive Bilder ist einfach über den Port 80 erreichbar, so dass die vier Bilder auch von einem auf die Ports 80 und 443 beschränkten Mobilfunkaccount (z.B. Vodafone live!) oder von einem ähnlich abgeschotteten Firmennetz erreichbar sind.
- Auf gleiche Weise kann man alle 4 Kameras auch aus dem Netz heraus über einen einzigen Port steuern (also z.B. drehen, oder den Alarm ein und ausschalten).
- Das Ansehen der Bilder und das Bedienen aller vier Kameras ist passwortgeschützt. Man muss sich nur genau einmal autorisieren und hat dann Zugriff auf alle Funktionen der 4 Kameras.
Nochmals ganz vielen Dank an NobiMan