INSTAR Kamera per CGI-Befehle steuern. Wie ansprechen?

Ich bin gerade dabei eine INSTAR-Kamera in mein Frontend einzubinden.

Den Stream greife ich bereits ab.

Nur wie kann ich das ganze mit den CGI-Befehlen steuern?

Eine Liste der Befehel habe ich hier:

List of CGI commands (VGA)

List of CGI commands (HD)

Diese muss ich in ein Script einbinden, aber ich weiß nicht wie das ganze auszusehen hat.

Also Beispiel das hoch und runter fahren der Kamera über ein Script, wie funktionert das,
hat das schon jemand gemacht und kann mir helfen?

Moin Daste!

Entweder du baust dir das ganze wirklich alles selbst zusammen…ODER du machst es ganz einfach und verwendest IPSCam aus der IPSLibrary. Funktioniert bei mir mit allen Fix und PTZ-Cams ohne Probleme :slight_smile:
Bei IPSCam sind dann die passenden Befehle in der zugehörigen „IPSComponentCam_Instar.class.php“ zu finden.

Wenn du es selbst machen willst, dann kannst du dir z.B. einen Button machen, welcher eine URL aufruft, die das passende CGI-Kommando beinhaltet zum Kamera schwenken nach unten, dann einen Button für nach oben, usw…

Grüße,
Chris

Servus Bayaro,
danke dir.

Ich werde beides mal ausprobieren.

Für zweiteres, hast du da eventuell mal ein Beispiel für mich für so einen URL Aufruf?
Ich habe vorhin schon ein bisschen rumprobiert, aber leider habe ich es nicht so richtig hinbekommen.

Moin!

Die Beispiele stehen doch auf der von dir verlinkten Seite?!
z.B.:

Pan&Tilt
/decoder_control.cgi?command=[&onestep=&user=&pwd=&next_url=]

tilt up="/decoder_control.cgi?command=0&onestep=1&user=&pwd="

tilt down="/decoder_control.cgi?command=2&onestep=1&user=&pwd="

pan left="/decoder_control.cgi?command=4&onestep=1&user=&pwd="

pan right="/decoder_control.cgi?command=6&onestep=1&user=&pwd="

home pos="/decoder_control.cgi?command=25"

Willst du Buttons für das Schwenken (hoch/runter/links/rechts), dann könntest du eine Integer Variable machen mit einem eigenen Variablenprofil. Jeweils als Text 0 - „hoch“, 1 - „runter“, 2 - „links“, 3 - "rechts … und dann ein Aktion-Skript (dieses unter der Variable einordnen für mein Skript) für die Variable mit z.B. diesem Inhalt machen:

<?
// KONFIGURATION
$camIP = '192.168.2.10';  // IP deiner Webcam
$camUser = 'admin';       // Benutzername zum Anmelden an deiner Webcam
$camPass = '123456';      // Passwort zum Anmelden an deiner Webcam
$schrittweite = 1;        // Schrittweite (wie weit die Kamera schwenkt pro Klick) > 1,2,3,4,...


if($_IPS["SENDER"] == "WebFront") {
    SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]);
}

$Parent = IPS_GetParent($_IPS['SELF']);
$ptzCommand = GetValue($Parent);

if ($ptzCommand == 0) {
	$url="http://".$camIP."/decoder_control.cgi?command=0&onestep=".$schrittweite."&user=".$camUser."&pwd=".$camPass.""; // hoch
}
elseif ($ptzCommand == 1) {
	$url="http://".$camIP."/decoder_control.cgi?command=2&onestep=".$schrittweite."&user=".$camUser."&pwd=".$camPass.""; // runter
}
elseif ($ptzCommand == 2) {
	$url="http://".$camIP."/decoder_control.cgi?command=4&onestep=".$schrittweite."&user=".$camUser."&pwd=".$camPass.""; // links
	}
elseif ($ptzCommand == 3) {
	$url="http://".$camIP."/decoder_control.cgi?command=6&onestep=".$schrittweite."&user=".$camUser."&pwd=".$camPass.""; // rechts
}
elseif ($ptzCommand == 50) {
	$url="";
}

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$page = curl_exec($curl);
curl_close($curl);

IPS_Sleep(500);
SetValue($Parent, 50);  // Leeren Eintrag im Variablenprofil auswählen, damit nach dem Klick optisch im WebFront nichts ausgewählt ist

?>

…ungetestet…einfach mal auf dich anpassen und ausprobieren :slight_smile:
…könnte man auch anders/kürzer machen, aber wollte es mal ausführlich machen, damit es leichter verständlich ist.

Vorher die URLs mal einfach im Browser eingeben und schauen, ob die Webcam dann auch wirklich schwenkt…

Grüße,
Chris

Hier noch eine Möglichkeit welche ich bei Axis nutze:


$AxisLED = file_get_contents("http://user:pw@".$ip_webcam_kz.":80/axis-cgi/io/lightcontrol.cgi?action=L1:-100");

Danke euch beiden.

@Bayaro:

Bei mir sieht es aktuell so aus:


(Hier erscheint oben links ein Fehler beim Klicken auf einen Button.)

Das Script ist dasselbe wie von dir gepostet nur angepasst mit aktuellem Admin, Passwort und IP.

Ich glaube ich habe einfach nur einen Fehler in der Umsetzung.
Ich habe der Variablen dein gepostetes Script untergeordnet und als Aktionsscript ausgewählt.

Kannst du mir nochmal kurz beschreiben was du genau meinst?
Dann sollte es doch klappen. :slight_smile:

Hallo
Wenn du keinen Fehler im Logfenster hast aber nur eine Anzeige im Webfront,
koennte es sein , dass du im Script vor „<?“ oder nach „?>“ ein Leerzeichen oder
Leerzeile hast,

@1007:
Das wars mal wieder, der Fehler ist weg.
Nächstes mal passiert mir das nicht mehr…

Danke dir. :slight_smile:

@ALL:
Das Script von Bayaro wirf beim auführen noch einen Fehler aus, der lautet:
„Notice: Undefined variable: url in [Kamera\Steuerung\Schwenken\Kamerasteuerung] on line 22“

In Zeile 22 steht: $curl = curl_init($url);

Hab mal eine neue Version vom Skript erstellt und oben in meinem Beitrag 4 geändert
> INSTAR Kamera per CGI-Befehle steuern. Wie ansprechen?

Bitte das mal testen und berichten :slight_smile:

MfG,
Chris

Getestet, es treten keine Fehler mehr auf, aber die Kamera schwenkt auch nicht.

Habe es gerade über den Browser getestet:
_http://xxx.xxx.xx.xxx/decoder_control.cgi?command=0&onestep=5&user=max&pwd=mustermann
(Den Untersrich davor bitte wegdenken, denn habe ich nur hin gemacht da es sonst automatisch in eine klickbare URL umgewandelt wird und nicht der gesamte Link zu sehen ist und pw d ist auch zusammengeschrieben also pwd, wird falsch angezeigt hier.)

Dieser Aufruf (mit Beispieldaten) sollte richtig sein, wenn ich diesen aber in meinem Browser aufrufe, erhalte ich ein Invalid-Request.

Es erscheint die Fehlermeldung:
Error 404: Not Found
invalid request

Nicht das die CGi-Befehle veraltet sind, ich schau mal ob es aktueller gibt.

Oder was meinst du, daran wird es liegen oder habe ich den URL-Aufruf falsch zusammengesetzt?

Erstes Problem gelöst:
Ich hatte die falsche CGI-Liste verlinkt.

Die verlinkte Liste war für VGA-Cams, ich habe aber eine HD-Cam.

Hier der Link zu richtigen Liste:
HD Kamera CGI Liste – Willkommen im INSTAR Wiki - Ihr Spezialist für IP Kameras, Netzwerkkameras, Überwachungskameras, Webcams, Powerline, PoE Kameras u.v.m.

Im Anfangspost ergänzt.

Ok, dann einfach mal die richtigen CGI Befehle nehmen :smiley:

Also z.B. für schwenken nach rechts wäre das vmtl. diese URL:
__http://XX.XX.XX.XX/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=right&-usr=BENUTZER&-pwd=PASSWORT

Okay, getestet. :smiley:

Mit den neuen Befeheln benötigt man nicht mal den Benutzernamen + Passwort zum drehen der Kamera.
(Zum Abrufen des Streams muss man es aber angeben.)

Über den Browser mit der URL funktioniert es ohne Probleme.
Wenn ich das ganze über das Skript laufen lasse, funktioniert es noch nicht.
Es passiert einfach nichts, aber ein Fehler tritt auch nicht auf.

Hier mein angepasstes Script mit den richtigen CGI-Befehlen für HD-Cams:


<?
// KONFIGURATION
$camIP = '192.168.11.130:80';  // IP deiner Webcam
$camUser = 'Max';       		// Benutzername zum Anmelden an deiner Webcam
$camPass = 'Mustermann';      // Passwort zum Anmelden an deiner Webcam
$schrittweite = 1;        // Schrittweite (wie weit die Kamera schwenkt pro Klick) > 1,2,3,4,...


if($_IPS["SENDER"] == "WebFront") {
    SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]);
}

// http://192.168.11.130:80/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=up
// http://192.168.11.130:80/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=down
// http://192.168.11.130:80/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=left
// http://192.168.11.130:80/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=right


$Parent = IPS_GetParent($_IPS['SELF']);
$ptzCommand = GetValue($Parent);

if ($ptzCommand == 0) {
    $url="http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=up"; // hoch
}
elseif ($ptzCommand == 1) {
    $url="http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=down"; // runter
}
elseif ($ptzCommand == 2) {
     $url="http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=left"; // links
    }
elseif ($ptzCommand == 3) {
    $url="http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=right"; // rechts
}
elseif ($ptzCommand == 50) {
    $url="";
}

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$page = curl_exec($curl);
curl_close($curl);

IPS_Sleep(500);
SetValue($Parent, 50);  // Leeren Eintrag im Variablenprofil auswählen, damit nach dem Klick optisch im WebFront nichts ausgewählt ist

?>

Hast du das Skript einfach so gestartet oder hast du übers WebFront deine Buttons gedrückt? Weil das Skript einfach so starten funktioniert nicht, da passiert auch nichts. Wenn - geht es nur über die Buttons im WebFront…

Hi Bayaro,
ich habe es über das Frontend angesteuert über die Buttons.

Abend Daste,

hab es jetzt extra mal nachgebaut und mit dem von mir geposteten Skript funktioniert es bei mir :confused:

Sieht dein Variablenprofil so aus?
ptz.png
…weil wenn ich mir deinen oberen Screenshot in Beitrag 6 anschaue, dann sind da links und rechts noch die Pfeile < > neben dem hoch/runter/… und das bedeutet bei deinem Variablenprofil ist wohl falsch…vermute ich… ?!

Grüße,
Chris

Browser-Cache + Cookies?

Wenn ich das ganze über das Skript laufen lasse, funktioniert es noch nicht.

Denkanstoss… s.o.

@Bayaro: Jetzt sieht mein Profil genauso aus wie bei dir. Vorher hatte ich noch Schrittweisen drinnen.

Ich hatte ja geschrieben mit dem neuen CGI-Befehl brauch ich das Passwort + User nicht mehr.
Ja das stimmt auch nur solange es im Cache gespeichert ist…

Das heißst wenn ich z.B. einen Privaten Tab aufmache die URL dort eingebe, muss ich mich über ein aufploppendes Fenster authentifizieren. Somit habe ich die Userdaten mitgegeben.

Ich glaub ich habe das aktuell Problem gefunden:
Da ich die Steuerung über das PHP-Skript aufrufe habe ich beim Aufruf kein aufploppendes Fenster wie im Browser, dadurch kann ich mich nicht anmelden.

Aber leider kann ich PW + User nicht wie bei den alten VGA Cams in der URL per CGI mitgegeben, ich habe zumindest nichts gefunden. (Ich habe mir auch mal eine URL wie bei den alten VGA-Cams gestrickt, aber das hat nicht funktioniert.)

Jemand eine Idee, wie ich das Passwort + User mitgeben kann bzw. mich authentifizieren kann?

Funktioniert diese Variante nicht?

___http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=down&-usr=BENUTZER&-pwd=PASSWORT

Grüße,
Chris

Es funktioniert. :slight_smile:

Hier noch einmal das komplette Script:


<?
// KONFIGURATION
$camIP = 'xxx.xxx.xxx.xxx:80';  // IP deiner Webcam
$camUser = 'Max';       		// Benutzername zum Anmelden an deiner Webcam
$camPass = 'Mustermann';      // Passwort zum Anmelden an deiner Webcam
$schrittweite = 1;        // Schrittweite (wie weit die Kamera schwenkt pro Klick) > 1,2,3,4,...


if($_IPS["SENDER"] == "WebFront") {
    SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]);
}

// http://192.168.11.130:80/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=up
// http://192.168.11.130:80/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=down
// http://192.168.11.130:80/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=left
// http://192.168.11.130:80/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=right


$Parent = IPS_GetParent($_IPS['SELF']);
$ptzCommand = GetValue($Parent);

if ($ptzCommand == 0) {
    $url="http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=up&-usr=".$camUser."&-pwd=".$camPass.""; // hoch
}
elseif ($ptzCommand == 1) {
    $url="http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=down&-usr=".$camUser."&-pwd=".$camPass.""; // runter
}
elseif ($ptzCommand == 2) {
     $url="http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=left&-usr=".$camUser."&-pwd=".$camPass.""; // links
    }
elseif ($ptzCommand == 3) {
     $url="http://".$camIP."/cgi-bin/hi3510/ptzctrl.cgi?-step=".$schrittweite."&-act=right&-usr=".$camUser."&-pwd=".$camPass.""; // rechts
}
elseif ($ptzCommand == 50) {
    $url="";
}

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$page = curl_exec($curl);
curl_close($curl);

IPS_Sleep(500);
SetValue($Parent, 50);  // Leeren Eintrag im Variablenprofil auswählen, damit nach dem Klick optisch im WebFront nichts ausgewählt ist

?>


Ein Dank geht an alle die mir geholfen haben, besonders an Bayaro.

@Bayaro: Du hattest recht mit deinem letzten Befehl.
Ich hatte das so ähnlich auch getestet, allerdings hatte ich das Passwort und den Benutzer im CGi-Befehl nach „Schrittweise“ eingebaut und nicht am Schluss.

Wenn ich vor der eigentliche Adresse noch den folgendes Eintrag „http://Benutzer:Passwort@IP…“ kann ich das Passwort + Benutzer zwar auch mitgeben, aber das klappt nur über den Browser, da man anschließen noch einmal bestätigen muss das die Nutzerdaten benutzt werden sollen, daher nicht passend für das Script.