Include oder IPS_RunScriptWait

Hallo,

ich programmiere mir gerade mein Edip etwas um und habe folgendes Problem.
Ich schalte nachts ab 22:00 per Script das Edip dunkel und lege dabei ein Touchfeld über den ganzen Bildschirm. Wenn ich jetzt draufdrücke (auf den dunklen Bildschirm) soll das Display wieder angehen.
Ich habe ein Script, das das Edip ausliest und abhängig vom Rückgabewert des Edip verschiedene Dinge ausführt.
Soweit funktioniert das eigentlich auch.
Das Edip wird dunkel geschaltet, ich drücke drauf, bekomme eine Meldung von meinem Script, das der richtige Wert empfangen wurde und dann sollte ein Script aufgdrufen werden, das das Display wieder anmacht und verschiedene Werte und Bilder zeigt. Aber das läuft nicht. Ich habs mit Include versucht und mit IPS_RunScriptWait, nichts passiert. Der erste Befehl in dem aufzurufenden Script ist ein print (zum testen) und den sehe ich schon nicht mehr.
Ich finde auch keine Fehlermeldung.
Was mache ich falsch?
Habe ich einen Denkfehler?

Gruß
HMK

Also damit startet ohne Probleme ein anderes Skript.

 IPS_RunScript(12345 /*[Skript]*/);

Zeige doch bitte mal die beiden Skripte, die Du Startest.

Hallo,

ich benutze das IPS_RunScriptWait auch an anderen Stellen, da funktionierts auch, nur in dem speziellen Fall nicht.

Das ist mein Edip_Auslesen-Script, getriggert von einer Registervariable:

<?
include('28364.ips.php');
if ($IPS_SENDER != "RegisterVariable") {   // Raus wenn nicht von RegVar aufgerufen
	print "Edip_Auslesen nicht von RegVar aufgerufen, sondern von " . $IPS_SENDER;
	exit;
}
$buf  = RegVar_GetBuffer($IPS_INSTANCE); // das sind Daten die bereits im Puffer sind
$buf .= $IPS_VALUE; // neu empfangene Daten anhängen

if (GetValueBoolean(@IPS_GetVariableID(".Debug_Flag"))) print "Buffer: " . $buf;

$id = ord(substr($buf,0,1)); //ersten wert auslesen
if ($id == "27") {	 //27 = 1B
	switch (ord(substr($buf,1,1)))	{
      case "65": //A befehle auslesen
   	if ((strlen($buf))>3) { //Schauen ob alles empfangen wurde
        	$id = ord(substr($buf,3,1)); // 4.te zahl ist die Info die wir brauchen
			if (GetValueBoolean(@IPS_GetVariableID(".Debug_Flag"))) print "erfolgreich ".$id . "
";
    	break;
    	}
    }
}
// diese Nummer darf im EA-Kit Editor nicht definiert sein, sonst wird sie nicht gesendet
// 1	 Hauptmenu
// 100 Display aktivieren
// 101 Zirkulationspumpe ein
// 102 Zirkulationspumpe aus
// 103 Teich an
// 104 Teich aus
// 105 System-Makro an
// 106 System-Makro aus

if (GetValueBoolean(@IPS_GetVariableID(".Debug_Flag")))	print $id. " empfangen
";

switch ($id) {

	case "1":                            // Hauptmenu Touch gedrückt
		include('21092.ips.php');            //IPS Startup-Script, als include sonst gehts nicht
		break;

	case "100";
		SetValueBoolean(44883 /*[Heizung\DisplaySteuerung\Edip_Aktiv]*/,true);    //Merker setzen Display an
		IPS_RunScriptWait(52751 /* Display-Steuerung */);
//		include('21092.ips.php');            //IPS Startup-Script, als include 
//		Show_Temp();               // Temperaturen anzeigen
		break;

Bei case „100“ steht das RunScript, der Befehl davor wird noch ausgeführt und dann kommt das Script DisplaySteuerung

<?
// Display initialisieren

if (GetValueBoolean(@IPS_GetVariableID(".Debug_Flag"))) echo "DisplaySteuerung Script läuft
";

include('28364.ips.php');

edip("AL,100,1");          // Touch Dunkelschaltung löschen
edip("MN,0"); 					// Makro 0: Power-On ausführen
edip("DE"); 					// Display hell schalten
edip("YL,1"); 					// Beleuchtung an
edip("YH,5"); 				// Beleuchtung Helligkeit in %

$edip_str = "";
edip("AI,0");
edip("AE,0");
edip("AT,9,33,30,56,101,102,$edip_str"); // Touch Zirkulationspumpe
edip("AT,5,103,31,124,103,104,$edip_str"); // Touch Teich

edip("AT,35,0,60,8,110,111,$edip_str"); // Touch Aussentemperatur Min
edip("AT,75,0,90,8,112,113,$edip_str"); // Touch Aussentemperatur Max


IPS_RunScriptWait(16636 /*[Heizung\Aktuelle_Zeit]*/);      // Aktuelle Zeit anzeigen
Show_Temp();               // Temperaturen anzeigen

?>

Der erste Befehl (print) wird schon nicht ausgeführt. Das Script wenns alleine läuft funktioniert.

Liegt da vielleicht an dem Aufruf durch die RegVar?
Gibt es irgendwo noch Fehlermeldungen die ich vielleicht nicht sehe?

Das erste Script ist nicht vollständig nehme ich mal an?
Probiere mal bitte nur ein Script aufzurufen in dem eine Variable gesetzt wird als Test und sag mal was passiert.

Ja das erste Script enhält noch weitere Case statements, habe ich mir erspart zu kopieren.

Ich habe jetzt ein Script mit nur einem Print-Befehl angegeben, aber es passiert einfach nichts!

Bitte schreibe mal eine Bool, der print Befehl gefällt mir hier nicht.

So jetzt habe ich statt dem print eine BoolVariable gesetzt: funktioniert!
Was stört denn am Print-Befehl?

Ich habe dann wieder mein Display-Script eingebunden, aber das geht nicht obwohl da kein Print-Befehl drin steht.

Was jetzt?

Hallo,
ich habe jetzt mal alle meine Prints und Echos durch IPS_LogMessage ersetzt und in diesem Zug meine Programm-Logik überarbeitet.
Dabei habe ich auch die Reihenfolge der Befehle ans EDIP geändert und jetzt funktioniert eigentlich alles wie gewollt.

Trotzdem vielen Dank für die Hilfe

:slight_smile: