es gibt 2 "Ablaufebenen", einmal die , welche du aus der Remote Script Api ansprichst, die andere ist die RegaHSS selber, also die Programmsteuerung der CCU. Schnelles Beispiel: "lokale" Scriptvariablen sind gar nicht so lokal, in der Ablaufebene der RegaHSS kannst du lokale Variablen, die ein Script A definiert wurden, ohne neudeklaration in Script B benutzen. Is zwar bitchy, geht aber. Anders ist es über die RemoteApi , hier kannst du nicht (es geht auch über Handstände, aber das ist akademischer Natur) auf die lokalen Variablen der Programmsteuerung zugreifen..
kannst du dir vorstellen: in dem Bereich 2 getrennte Welten.
wenn du nun das StartScript etwas veränderst, um da bisschen fühlbaren zeitlichen versatz reinzubekommen:
Code: Alles auswählen
system.Exec ("logger -t LOGGERNAME -p user.debug [StartScript anfang]");
dom.GetObject(ID_PROGRAMS).Get("test2").ProgramExecute();
system.Exec ("sleep 2");
dom.GetObject(ID_PROGRAMS).Get("test2").ProgramExecute();
system.Exec ("sleep 2");
dom.GetObject(ID_PROGRAMS).Get("test1").ProgramExecute();
system.Exec ("sleep 2");
system.Exec ("logger -t LOGGERNAME -p user.debug [StartScript ende]");
Code: Alles auswählen
--------------------------------- SystemLog ---------------------------------
Apr 2 21:04:10 SpieleSystem user.debug LOGGERNAME: [StartScript anfang]
Apr 2 21:04:10 SpieleSystem user.debug LOGGERNAME: [Script test2]
Apr 2 21:04:12 SpieleSystem user.debug LOGGERNAME: [Script test2]
Apr 2 21:04:14 SpieleSystem user.debug LOGGERNAME: [Script test1]
Apr 2 21:04:16 SpieleSystem user.debug LOGGERNAME: [StartScript ende]
------------------------------- Ausführung -------------------------------
dann folgt Programexecute von program test2
das script in der remote hängt nun in 2 sekunden warteschleife, in der zweiten welt bemerkt aber die RegaHSS das gesetzte Startflag und führt das Programm aus, logeintrag Apr 2 21:04:10 SpieleSystem user.debug LOGGERNAME: [Script test2]
nach 2 sekunden wird dieses nochmal getriggert (21:04:12) da die rega den ersten start schon abgearbeitet hat, kommt die zweite ausführung und der zweite log
nach weitreren 2 sekunden programexecute von program test1. dann schläft script wieder.. die rega aus der zweiten welt, führt das programm aus, logeintrag
nach den 2 sekunden logeintrag scriptende udn ende des SDV scriptes, soweit alles logisch, Laufzeit wird auch mit 21:04:16:658 CCU Laufzeit 6.093 sec angegeben.
so, nun spielen wir dieses Script in das Testprogram "Startscript ein". nun liegt das Startscript also in der selben logischen ABlaufebene wie die zu startenden Programme.
über webui oder SDV bringen wir nun das CCU-Programm "Startscript" zur Ausführung
Die AUsführung sieht hier nun komplett anders aus:
Code: Alles auswählen
Apr 2 21:15:48 SpieleSystem user.debug LOGGERNAME: [Script test1]
Apr 2 21:15:48 SpieleSystem user.debug LOGGERNAME: [Script test2]
Apr 2 21:15:48 SpieleSystem user.debug LOGGERNAME: [StartScript ende]
Apr 2 21:15:42 SpieleSystem user.debug LOGGERNAME: [StartScript anfang]
Erst nachdem dieses Programm abgearbeitet und beendet wurde kommt das wia ProgramExecute gestartet Program test2 zur ausführung, aber nur einmal, da es ja vorher nicht ausgeführt wurde und 2 mal flaggen führt auch nur zu einer Ausführung.
Direkt nach dem test2 kommt das test1 zur Ausführung.
Heisst also, hast du ein CCU programm X, welches via programexecute ein anderes CCU program Y startet, so wird zuerst das noch laufende Script X abgearbeitet, bevor das Program Y gestartet wird.
Interessant ist in dem zusammenhang noch, das die WebUI Startzeit mit den Zeitpunken des Triggerns des startscriptes übereinstimmt (die 2 Sekunden Versatz), die Scriptausführung aber erst nach bendigung von Program X beginnt
Das ist natürlich eine Falle, die man immer im Hinterkopf haben muss, wenn man über die Remote APi (sei es über Editoren wie den SDV oder auch das interne Script testen, aber auch: über Befehlszeilen wie den HTML Code, der auch nix anderes wie die Remote APi ist, ebenso wenn man Rega Programme von externen Systemen wie z.b. über SendTo von IObroker aus zur AUsführung bringt.
Black
Editgrund: Typo korrigiert nach Hinweis von Matsch