[kein Bug] Error: Maximum Execution time of 60 seconds exceeded in line ..

Hallo zusammen,

ich bastele gerade an meiner Rolladensteuerung und habe ein kleines Problem:

Für das Öffnen und Schliessen verwende ich die Funktionen DriveUp und DriveDown.

Wenn ich nun die Rolladen einzeln hiermit steuere, dann funktioniert das ganz gut. Wenn ich aber versuche, mehrere Rolladen hinter einander z.B. zu schliessen (Timer Event), dann bekomme ich die o.g. Fehlermeldung angezeigt und der Timerevent versucht jede Minute diesen Event neu zu starten, jedoch ohne Erfolg.

Hat hier jemand eine Idee,

Gruss,
reflectedimage

Hallo,

lege im Verzeichnis von IP-SYMCON folgende Datei an:

php.ini

und schreibe mit einem Editor folgendes hinein:



```php

max_execution_time = 150

dann beende bitte IPS und starte neu, dann sollte das Problem behoben sein.

Gruss Torro

Hallo torro,

php.ini existierte bereits u.a. mit diesem Eintrag. Habe die Originaldatei wegkopiert und eine neue nach Deinen Angaben erstellt. Leider kein Erfolg. Das System „hängt“ dann so stark (es versucht minütlich diesen Befehl auszuführen) so daß ansonsten keine Bedienung mehr möglich ist.

Hast Du noch eine andere Idee?

Gruss,
reflectedimage

Hallo,

ja, dann hast Du eventuell eine Eigendynamik in Form einer Schleife o.a. eingebaut. Durchforste Dein Script mal aus rein logischer Sicht, nicht aus programmtechnischer.

Ansonsten musst Du das komplette Script mal zeigen…

Gruss Torro

Hallo Torro,

habe mal alle Funktionen isoliert und ein einfaches Skript erstellt:

/*


IP-SYMCON Event Scripting


File : test.ips.php
Trigger :
Interval :
*/

IPS_LogMessage(„test“,„1“);
FS20_DriveUp(38566, 30000);
IPS_LogMessage(„test“,„2“);
FS20_DriveUp(54366, 30000);
IPS_LogMessage(„test“,„3“);
FS20_DriveUp(60789, 30000);
IPS_LogMessage(„test“,„4“);
FS20_DriveUp(23671, 30000);
IPS_LogMessage(„test“,„5“);
[/FONT]

Ich bekomme hier zwar nicht mehr diese Fehlermeldung, aber das 2. Driveup führt das System gar nicht mehr aus. Wenn ich die Time beispielsweise auf 15000 reduzierte, dann komme ich zumindest bis zum 3. Driveup. Reduziere ich die Time auf 100, dann führt das System alle Driveups aus.

Was hat es hiermit auf sich?

Gruss,
reflectedimage

ermmmm, kuck mal hier.

und spezial dies hier:

Diese Funktion blockiert den PHP Parser, während sie ausgeführt wird

Könnte es sein, das dein Script einfach blockiert wird da zuviel „Drive Up“ befehle zusammen in einem Script?
Hast du schon mal versucht, das ganze in ein paar scripte zu verteilen?
Bin kein Experte darin, habe auch keine Markisen, sondern nur RST’s aber die steuere ich auch zeitversetzt an.

mfG Franz

Wird deine php.ini auch benutzt? Lass dir mal die aktuellen Einstellungen anzeigen, mit denen PHP im IPS arbeitet.

Erstelle folgendes Skript im IPS:

 
<?
  ob_start();
  phpinfo();
  $phpinfo = ob_get_contents();
  ob_end_clean();
  file_put_contents("c:/phpinfo.html",$phpinfo);
?>

und führe es aus.

Die Datei c:\phpinfo.html wird erstellt -> diese mit einem Webbrowser öffnen.

Schau dann mal nach was dort bei ‚max_execution_time‘ (Zeit in Sekunden) eingetragen ist.

Hallo Olli,

habe das Skript gerade getestet. Die damit erzeugte Datei zeigt mir folgenden Wert:
max_execution_time 60 150

Local Value: 60
Master Value: 150

Was bedeutet das jetzt?

Gruss,
reflectedimage

naja, das bedeutet zumindest schonmal, dass die php.ini die du bearbeitet hast auch ausgeführt wird…

Was es mit der ‚Local Value‘ aktuell auf sich hat kann ich dir im Augenblick auch nicht sagen - wenn ich Zeit finde schau ich mir das heute/morgen Abend mal an.

Evtl. Workaround:
Die aktuelle IPS-Beta ist Multithreading fähig. D.h. du kannst ein Script schreiben, in dem mit IPS_Execute() vier andere Scripte parallel gestartet werden (für jede deiner Rolladen ein Script mit einem Drive-up). Theoretisch müssten dann alle deine Rolladen (fast) gleichzeitig hochfahren und die max. Execution eines einzelnen Rolladen-Skriptes liegt dann bei 30 Sekunden. Theoretisch…

Die aktuelle IPS-Beta ist Multithreading fähig. D.h. du kannst ein Script schreiben, in dem mit IPS_Execute() vier andere Scripte parallel gestartet werden (für jede deiner Rolladen ein Script mit einem Drive-up). Theoretisch müssten dann alle deine Rolladen (fast) gleichzeitig hochfahren und die max. Execution eines einzelnen Rolladen-Skriptes liegt dann bei 30 Sekunden. Theoretisch…

probier ich schon die ganze Zeit zu sagen, nur keiner hört mir zu, grmpf ! Der Parser ist blockiert während einem „Drive up“ !

mfG Franz

Das gilt jedoch nur für die aktuelle Release vom IPS. Und reflectedimage hat uns bisher noch gar nicht mitgeteilt welches IPS er aktuell verwendet…

Ich kann mein Rollo 30 Sekunden lang hochfahren und währenddessen weiterhin alle meine Lampen, Verbraucher oder sonstiges steuern.

Hallo zusammen,

ich arbeite mit der aktuellen Produktiv-Version (bin lt. LiveUpdate aktuell).

Ich verstehe ja, daß DriveUp/Down den Parser blockieren. Wir schaffe ich es denn eine Verzögerung so einzubauen, daß die nachfolgenden Befehle ausgeführt werden? Habe es mit IPS_Sleep versucht: kein Erfolg. IPS_SetScriptTimer funktioniert beim ersten Mal ganz gut, hat aber leider den Effekt, daß das Skript immer wiederholt wird.

Wenn es aktuell hierfür keine Lösung gibt, dann muss ich halt warten bis das kommende Update das „Multithreading“ unterstützt.

Gruss,
reflectedimage

Hallo,

das kann aber mit dem Update schon noch etwas dauern. Also nicht ungeduldig werden, denn es werden sicher erst mal weitere Betas erscheinen, bevor es ein neues Live Update geben wird.

Genaueres dazu koennen aber steiner und paresy sagen.

Gruss Torro

Hallo reflectedimage,

da deine Rolladen ja wahrscheinlich Endabschalter haben kannst du einfach die TX-Devices statt der Drive Befehle benutzen, dann hast du auch keine Probleme mehr.

FS20_SwitchMode(11111, FALSE);
FS20_SwitchMode(22222, FALSE);

Du mußt aber beachten, das du die TX Instanz-ID benutzt und nicht die von den Drive.

Auf diese Weise bremst du dich nicht aus und notfalls ruf einzelne scripte mit unterschiedlichen scripttimern auf. Bei mir klappen so 3 Rollos gleichzeitig.

Viel Erfolg

Kolja

Das einzige was dir dann helfen kann ist folgendes.

Du brauchst mehrere Scripte, und zwar:

Ein Schleifen-Script. Es ist ein Script, das z.B. im Minutentakt (oder die Zeit, die ein Rollo braucht, um hochzugehen) einen Zähler inkrementiert und bei einem gewissen Zählerstand (z.B. Anzahl Rollos die du hast) wieder von vorne, d.h. auf 0 anfängt.
Und bei jedem einzelnen Zählerstand startest du ein anderen Rollo (ein anderes Script indem nur ein Rollo angesteuert wird), dann funktionniert es sicherlich tadellos, ausser von aussen unschön, da ein Rollo eben nach dem anderen hochgeht.

PS: So mache ich es mit meinen FHT’s und meinen Rollors (RST’s) und das funktionniert tadellos.

mfG Franz