[kein bug] sequentielle Ausführung von IPS_RunScript?

Wie lautet denn die aktuelle Empfehlung, wenn ich Skripte wohlgeordnet nacheinander ausführen möchte? Soll ich jetzt ‚include‘ verwenden statt IPS_RunScript?

Bei include muss ich dann aber überall auch noch ein „.ips.php“ ergänzen…

PS:
Gibt’s ein Beispiel zu IPS_RunScriptEx()?


if ($urlaub == False) {
   include(IPS_GetScriptFile("FS20_Büro_Decke_An"));
   include(IPS_GetScriptFile("FS20_Fensterlampe_An"));
   include(IPS_GetScriptFile("FS20_Farbstrahler_An"));
   //IPS_RunScript("FS20_FarbKreisel_An");
   include(IPS_GetScriptFile("FS20_Schlaf_LK_An"));
   if ($heizperiode = 2) {
      include(IPS_GetScriptFile("Flurbeleuchtung"));

usw.

ok, dann mach ich mir die Hilfsfunktion IPSRunScript() um nicht soviel ändern zu müssen…

 
function IPSRunScript( $scriptname )
{
   include( IPS_GetScriptFile($scriptname));
}

Und wie ist es mit IPS_RunScriptEx() gedacht? Scheinbar kann ich damit Parameter übergeben… oder?

Ja. Guck dir mal an wie der TimerWizard die Fnktion nutzt im zusammenspiel mit dem RRD_DatePoller.

Grüße, paresy

ok,ok, dann installiere ich jetzt auch noch das web-interface… wiips runterladen und tee nachschütten geh…

Nur mal so eine Frage, wie erfährt man eigentlich, dass IPS_RunScript wohl ohne Funktion ist, wenn ich diese Thread hier richtig verstehe.

Nachdem ich mich wunderte, warum das gewünschte Script nicht ausgeführt wird, habe ich erst nach der Forumssuche diesen Hinweis hier finden können.

Müßte so etwas nicht in der Doku aufgeführt sein, bzw der Befehl herausgenommen werden ???

Auch IPS_ScriptExists funktioniert bei mir nicht und ich habe das Beispiel (angepasst mit vorhandenem Script) aus der Doku genommen, auch im Kernel Debug kommt keinerlei Meldung, wenn diese Funktion aufgerufen wird.

Ein wenig irritiert bin ich jetzt schon, den wenn man komplexe Scripte schreibt, dann muss man sich schon darauf verlassen können, dass die vorhandenen Funktionsaufrufe auch mind. ihre Grundfunktionalität bieten

Jetzt mit include funzt alles wie gewünscht - wenn dieses Try and Error nur nicht so viel Zeit kosten würde, wäre es ja OK

@Ergoforce

sowohl IPS_RunScript() wie auch IPS_ScriptExists() funktionieren. Bei der Angabe des Skriptnamens muss jedoch die Endung .ips.php weggelassen werden.
Beispiel: IPS_RunScript(„Test1“) -> führt das IPS-Skript Test1.ips.php aus.

Die obige Diskussion hat den Hintergrund, dass IPS_RunScript() früher mal ähnlich wie PHP-include funktioniert hat und somit eigentlich überflüssig war bis auf den Punkt, dass man sich die Endung .ips.php sparen konnte.

Anfang diesen Jahres wurde jedoch IPS_RunScript() bei der Einführung von threadbasierten PHP-Skripten dahingehend geändert, dass damit ein PHP-Skript als neuer Thread gestartet wird (schau dir mal das Thread-Addin an).
D.h. wenn z.B. drei IPS_RunScript’s hintereinander aufgerufen werden laufen die drei entsprechenden Skripte parallel ab. Das hat durchaus Vorteile :slight_smile:

Falls man jedoch Skripte hintereinander ausführen will, muss man nun die PHP Standardbefehle include, include_once, require oder require_once verwenden - dabei dann natürlich inkl. der Dateiendung .ips.php.

Die Doku bzgl. IPS_RunScript() ist aber in der Tat veraltet. Aber es ist eine Wiki und du kannst sie ja jetzt ergänzen :slight_smile:

Gruss,
Olli

PS: hier noch zwei Beispielskripte atest1 und atest2. Beide müssen in IPS als Skript angelegt werden. Das Skript atest1 wird dann per Hand gestartet und ruft atest2 auf. Um sich das ganze bzgl. Ausführung anzusehen muss man das Thread Addin Fenster von IPS geöffnet haben.

atest1:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : atest1.ips.php
Trigger  : 
Interval : 
*/
echo IPS_ScriptExists("atest2") ? 'existiert!' : 'existiert nicht!';
IPS_Sleep(200);
IPS_RunScript("atest2");
IPS_Sleep(800);
?>

atest2:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : atest2.ips.php
Trigger  : 
Interval : 
*/
IPS_Sleep(6200);
?>

NA, da bin ich aber wirklich froh, dass es mal wieder Fehler 40 war :slight_smile:
(Ich hatte die Dateiendung angefügt, war vielleicht etwas spät gestern)

Bzgl der Wiki war ich eigentlich davon ausgegangen, dass zumindest die Befehlsreferenzen von IPS gepflegt werden, aber dem ist wohl generell nicht so.

Danke für die umfangreiche Info

[offtopic]

@Olli

Hallo Olli,

ich habe gesehen, dass du mehrmals diese Funktion:

echo IPS_ScriptExists("atest2") ? 'existiert!' : 'existiert nicht!';

benutzt hast, mit dem ‚?‘ hintendran, dann mit verschiedenen Werten.

Wo kann ich das nachlesen, welche Möglichkeiten es hier noch gibt.
Ich stehe, wie ich sehe, noch immer sehr am Anfang meiner PHP Kentnisse.

mfG Franz

Beschreibung auf PHP.net

http://de.php.net/manual/de/control-structures.alternative-syntax.php

Ziemlich unten als Comment von paul at example dot com ist das o.g. Beispiel.

Gruß Marcel

Dank dir !

mfG Franz