Hallo zusammen,
@ Bernd: danke für die Zeile. Hab mal wieder zu kompliziert gedacht.
Damit kann man ja richtig viel anfangen, und super einfach ists auch noch.
Hier die aktuellste Foscam-CGI-pdf die ich gefunden hab:
ftp://ftp.nadzor.net.ua/Nadzor/FOSCAM/SDK%20CGI/Foscam%20IPCamera%20CGI%20User%20Guide-3518.pdf
Hier mal ein Erfahrungsbericht mit der Foscam FI9828W (nicht um Werbung zu machen, sondern um die Script-Gültigkeit einzuschränken. Was nicht heisst, das die Scripte nicht auch mit anderen Cams der selben Entwicklungsstufe funktionieren) mit Beispielen.
Erfolgreich getestet hab ich:
Pan-Tilt, ZoomIn-Out, Modus setzen, anfahren von PreSets und Kombinationen davon.
Leider funktioniert PanTilt und Zoom nicht mit vorgegebenen Werten die man übergibt. Also z.B. 10° nach rechts u 3° nach oben und Zoom 20%.
Sondern mit: fahre nach rechts bis der Stop-Befehl kommt. …
Für die manuellen PTZ Befehle hab ich daher direkt nach dem eigentlichen Behfehl einen Stopp gesetzt. Für grössere Schritte könnte man ja noch einen sleep() dazwischen hängen. Hab ich so bei kombinierten Befehlen gemacht.
!! Das Absetzen dieser Befehle kann je nach Netzwerkverbindung (bei mir alles LAN) und derzeitigen Zugriffen 1-2-3-x Clients (dabei ist es egal ob alle den selben Stram verwenden oder auf die beiden aufgeteilt sind.), unterschiedliche Ergebnisse bringen, da der Stopp-Befehl verzögert ankommt.
Wenns zu viel wird (auch ohne Aktionen bei zu vielen gleichzeitgen Streams), bricht sogar der Stream ab. Im FF kommt der dann von allein wieder, mit Chrome ist ein WF-Tabwechsel notwendig.
Der mjpg Substream läuft im IPS-WF nur auch einem Client. Bei 2 bricht er regelmässig ab.
Die Latenz beim Streamen H.264 auf WLAN Clients (Bsp. org. Foscam App auf Tablet mit grottenschlechter Verbindung) kann bis zu 13 Sekunden betragen, läuft aber flüssig. Im IPS-WF (mjpeg) ist die Latenz zur selben Zeit nur 1-2 Sekunden im Vergleich mit einem IPS-WF (mjpeg) Stream im LAN.
!! Mitten im testen meiner Presets per Script (erstellt mit dem org. Foscam-WF), hatte ich plötzlich einen Pan-Offset von einigen Graden re. Hab dann die PreSets wieder angepasst. Nach einem Neustart der Kamera hatte ich dann genau den gegenteiligen Offset. -> Wenn ein eingestellter PreSet mal nicht mehr stimmt: erst mal einen Neustart der Kamera machen. Dann stimmts wieder (2x nachvollzogen). Kam aber nur beim, in kurzen intervallen, Wiederholen (evtl auch überschneiden) der Befehle vor. Nach dem ich Alles eingestellt hatte und die Presets nur noch 2x am Tag geändert werden, ists nicht mehr vorgekommen.
Folgende Scripte sind alle ohne ssl und mit Admin-User. Die meisten würden auch als Operator funktionieren.
Die IP, Port, User u PW sind bei mir in der __autoload.php hinterlegt.
Zum Steuern hab ich jeweils Int-Variablen mit den entsprechenden Profilen angelgt und die Scripte als Action-Script hinterlegt.
Setzen der PwrFreq (im Foscam-WF Modus genannt). Hab ich eingebaut, weils versehntl mal verstellt war.
<?
$ValID = 38272 /*[Logisch\Kameras\CamBirds01\Cambirds01-Foscam-Modus\Modus]*/ ;
setvalue ($ValID, $_IPS['VALUE']);
$Val = GetValue($ValID);
Switch ($Val)
{
Case 0: // 60 Hz
//echo "60 Hz";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/CGIProxy.fcgi?cmd=setPwrFreq&freq=0&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 1: // 50 Hz
//echo "50 Hz";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/CGIProxy.fcgi?cmd=setPwrFreq&freq=1&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 2: // OutDoor
//echo "OutDoor";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/CGIProxy.fcgi?cmd=setPwrFreq&freq=2&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
}
?>
Zoom:
<?
$ValID = 13865 /*[Logisch\Kameras\CamBirds01\Cambirds01-Foscam-Zoom\Zoom]*/ ;
setvalue ($ValID, $_IPS['VALUE']);
$Val = GetValue($ValID);
Switch ($Val)
{
Case 0: // Birds Zoom 0
//echo "Birds Zoom in";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(1);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 1: // Birds Zoom 1
//echo "Birds Zoom out";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomOut&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(3);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
}
?>
PanTilt:
<?
$ValID = 42206 /*[Logisch\Kameras\CamBirds01\Cambirds01-Foscam-PT\PanTilt]*/ ;
setvalue ($ValID, $_IPS['VALUE']);
$Val = GetValue($ValID);
Switch ($Val)
{
Case 0: // up
//echo "up";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzMoveUp&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzStopRun&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 1: // down
//echo "down";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzMoveDown&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzStopRun&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 2: // right
//echo "right";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzMoveRight&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzStopRun&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 3: // left
//echo "left";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzMoveLeft&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzStopRun&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
}
?>
PanTilt und Zoom könnte man sicher auch noch in einer Variablen unterbringen.
PreSets mit individuellen Zooms:
Da der aktuelle Zoom-Status nicht ausgelesen werden kann wird zuerst ganz herausgezoomt und dann schrittweise wieder eingezoomt.
<?
$ValID = 27763 /*[Logisch\Kameras\CamBirds01\Cambirds01-Foscam-PreSets\PrePos + PTZ]*/;
setvalue ($ValID, $_IPS['VALUE']);
$Val = GetValue($ValID);
Switch ($Val)
{
Case 0: // Birds Zoom 0
//echo "Birds Zoom 0";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=Birds02&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomOut&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 1: // Birds Zoom 1
//echo "Birds Zoom 1";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=Birds02&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomOut&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(3);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(10);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(1);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 2: // Birds Zoom 2
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=Birds02&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomOut&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(3);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(5);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(5);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
//echo "Birds Zoom 2";
Break;
Case 3: // Birds Zoom 3
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=Birds02&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomOut&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(5);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(5);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(5);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
//echo "Birds Zoom 3";
Break;
Case 4: // Birds Zoom 4
echo "Birds Zoom 4";
Break;
Case 5: // Hof Zoom 0
//echo "Hof Zoom 0";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=HofEinfahrt&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomOut&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 6: // Hof Zoom 1
//echo "Hof Zoom 0";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=HofEinfahrt&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomOut&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(3);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(10);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(1);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
Case 7: // Hof Zoom 2
//echo "Hof Zoom 0";
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=HofEinfahrt&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomOut&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
sleep(3);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(10);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(1);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomIn&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
// sleep(1);
Sys_GetURLContent("http://".$cambirds01_IP.":".$cambirds01_Port."/cgi-bin/CGIProxy.fcgi?cmd=zoomStop&usr=$Cambirds01_AUser&pwd=$Cambirds01_AUserPW");
Break;
}
?>
Die Cam wird bei mir 30 Minuten nach Sonnenaufgang auf eins unserer VogelFutterHäuser mit 2x Zoom geschwenkt und 30 Minuten nach Sonnenuntergang auf die Hofeinfahrt ohne Zoom zur Nachüberwachung.
Wie in der PDF ist sicher noch vieles mehr möglich.
Viel Spass damit.