CGI Sript ausführen

Hallo Leute,

ich habe ein Vellmann Experimentierboard und möchte vom Digitaleingang ein
CGI-Script ausführen. Also, wenn der Kontakt geschlossen wird soll das
Sript ausgeführt werden. Wie könnte das Execute-Script in diesem Fall aussehen? :cool:

Http Befehl zur Kamerasteuerung, der ausgeführt werden soll:

http://192.168.1.16/cgi-bin/nphControlCamera?Direction=&Mode=Motion&Resolution=320x240&Quality=Standard&Interval=30&Size=STD&Width=320&Height=240&NewPosition.x=&NewPosition.y=&PresetOperation=Move&Language=9

Ich freu mich auf jeden Vorschlag :slight_smile:

Schau mal bei fopen():

http://de3.php.net/manual/de/function.fopen.php

Damit solltest du einen Webserver vom IPS aus via HTTP antriggern können.

Eine andere Möglichkeit (wenn die fopen wrapper aus Sicherheitsgründen deaktiviert worden sind) wäre die Nutzung des WWWReader-Moduls, um die URL aufzurufen, ein system(„wget xxxx“) oder auch die Nutzungvon sockets im php.

Tommi

Tommi,

Du bist Genial :
mach ne www-reader mit der sein URL das cgi-script.
in das IPS-script : WWWReader_UpdatePage(wwwIid);
jetzt das IPS-script triggern lassen uber den Digitaler Eingang von die USB-platine
und fertig :smiley:

Leider funktioniert das mit dem wwwreader imho nur, wenn sich die Parameter in der URL nicht ändern. Zumindestens wüßte ich auf Anhieb nicht, wie ich vom Script die URL ändern kann. Deshalb auch die Alternativen mit wget und konsorten.

Vieleicht ist es eine gute Idee für die Wunsch-Liste: dem wwwreader eine funktion zum setzen der URL mitgeben.

Tommi

Jabadaba doeh !
@Paresy : auf die TD Liste damit

@Tommi : ich dachte das der cgi-script immer die gleiche war. Schnappschot uber IP-camera… befehl bleibt dann gleich.
Tommi : Bitte mach ein Eintrag im wiki-ToDo (deine idee)

Grusse,
Fredje

Es gibt dafür eine Lösung… Die nötigen Befehle sind:

IPS_GetInstanceSettings und IPS_SetInstanceSettings… + der XML Parser aus dem WebInterface.

:wink:

Grüße, paresy

Für alle, die sich nicht gleich vorstellen können, was Paresy gemeint hat (so wie ich:rolleyes: ), hier ein Beispiel:


<?
require "web/includes/xmlparser.ips.php";

//Beispiel URL, diese muss vorher irgendwo zusammengebaut werden
$neue_url="http://wetter.tdressler.net";

//Setting in Array lesen, 31718 ist die InstanceID meines WWReaders
$xmldata=IPS_GetInstanceSettings(31718);
$xml 	= new IPS_XMLParser( false );
$array  = $xml->GetArray( $xmldata );
$alte_URL=$array['ID']['Settings']['URL'];
echo "$alte_URL<br>";

//URL ändern und zurückspeichern
$array['ID']['Settings']['URL']=$neue_url;
$xmldata=$xml->SetArray( $array,"ID" );
$result=IPS_SetInstanceSettings(31718,$xmldata);

//Test
$xmldata=IPS_GetInstanceSettings(31718);
$xml 	= new IPS_XMLParser( false );
$array  = $xml->GetArray( $xmldata );
$URL=$array['ID']['Settings']['URL'];
echo "URL ist jetzt: $URL<br>";
?>

BTW:so lassen sich alle Settings ändern!:smiley:

Tommi

@Tommi:
Du kannst deinen Beispiel-Code noch etwas einfacher gestalten.

  • den Parameter ‚false‘ bei new IPS_XMLParser() weglassen (‚false‘ ist der default)
    -> dann brauchst du auch bei SetArray() nicht die Root-Node „ID“ als Parameter übergeben

<?
require "web/includes/xmlparser.ips.php";
 
//Beispiel URL, diese muss vorher irgendwo zusammengebaut werden
$neue_url="http://wetter.tdressler.net";
 
//Setting in Array lesen, 31718 ist die InstanceID meines WWReaders
$xmldata=IPS_GetInstanceSettings(31718);
$xml     = new IPS_XMLParser();
$array = $xml->GetArray( $xmldata );
$alte_URL=$array['ID']['Settings']['URL'];
echo "$alte_URL<br>";
 
//URL ändern und zurückspeichern
$array['ID']['Settings']['URL']=$neue_url;
$xmldata=$xml->SetArray( $array );
$result=IPS_SetInstanceSettings(31718,$xmldata);
 
//Test
$xmldata=IPS_GetInstanceSettings(31718);
$xml     = new IPS_XMLParser();
$array = $xml->GetArray( $xmldata );
$URL=$array['ID']['Settings']['URL'];
echo "URL ist jetzt: $URL<br>";
?>

Ich habe mal die beiden verwendeten Funktionen IPS_GetInstanceSettings und IPS_SetInstanceSettings im Wiki nach meinem Wissen beschrieben. Da sind aber noch etliche „Löcher“, die noch der Ergänzung harren. Sicherlich sind da extrem nützliche Funktionen enthalten, die genutzt werden möchten.
Für die neuen Funktionen aus dem Webinterface /XML-Parser usw. sollte evtl. auch noch eine Dokumentation eingerichtet werden.

Also, wer sich damit auskennt(Torro,Olli,…), bitte auch daran denken.

Danke!
Tommi

Hallo tommi

ehrlich? bin ich im Moment zeitlich ueberfordert, da die neuen Funktionen fuers Webinterface zu komplex sind, dass da noch fuer andere Sachen Zeit vorhanden ist…nebenbei will ich auch mal mein IPS weiter konfigurieren :smiley:

Gruss Torro

Hallo,

Glaube ich Dir gerne, geht mir genauso:)

Nur wenn keiner mehr mitkommt, was Ihr tolles entwickelt habt, weil es nicht beschrieben ist und man nicht jedesmal einen Hilfeschrei im Forum loslassen möchte (den der nächste mit der gleichen Frage ohnehin nicht findet), ist es auch nicht so Klasse für Euch und für uns Nutzer.:wink:

Tommi

Hmm, die Doku ist nicht ganz so einfach: IPS_GetInstanceSettings und IPS_SetInstanceSettings sind erst richtig brauchbar mit dem XMLParser und der ist eigentlich nicht Standardmässig in IPS vorhanden sondern erst mit dem Webinterface (und da muss man ggf. den Parser noch in das IPS-Skriptverzzeichnis kopieren falls man den XMLParser auch vom IPS aus benutzen möchte).

Gerade die Funktion IPS_SetInstanceSettings() kann dabei kritisch sein, da man sich die eigene settings.xml zerschiessen kann - man sollte ggf. mit zusätzlichen Backupdateien arbeiten.

Die drei Funktionen sind im Zusammenspiel ziemlich mächtig und da sind noch bei weitem nicht alle möglichen Test’s gemacht worden…

Gruss,
Oliver

Hallo zusammen,

Ihr braucht Euch nicht auf den Schlips getreten fühlen, ich weiss, das es oft andere Prioritäten gibt. :wink:
Ich wollte nur dafür werben, dass neue Funktionen auch dokumentiert werden, wenn sie schon veröffentlicht werden. Sonst kommt keiner mehr mit, was nun nicht das Ziel Eurer Bemühungen sein kann.

Insofern: einmal den „Erklär-Bär“ machen und dann könnt Ihr immer auf die Doku verweisen:cool:

Viele Grüße!
Tommi