ProgramExecute - Zeitpunkt der Ausführung?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von Black » 02.04.2021, 21:23

@Matsch

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]");
so erhälst du, wenn du es aus dem Scripteditor des SDV heraus startest (hier die zweite Ebene, die Remote Script Api) folgendes Ergebnis:

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 -------------------------------
Programm startet, logeintrag Apr 2 21:04:10 SpieleSystem user.debug LOGGERNAME: [StartScript anfang]
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]
Das gestartete Program "Startscript" wird gestartet (21:15:42) läuft 6 sekunden (wie das SDV Script auch, sind ja 6 programmierte sekunden verzögerung) und wird nach den 6 Sekunden beendet. (21:15:48). Innerhalb der 6 Sekunden wird aber keines der via ProgramExecute getriggerten Programme zur AUsführung gebracht.
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
starts.PNG
starts.PNG (19.77 KiB) 1327 mal betrachtet
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
Zuletzt geändert von Black am 02.04.2021, 23:26, insgesamt 2-mal geändert.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Matsch
Beiträge: 5359
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von Matsch » 02.04.2021, 22:17

Ganz herzlichen Dank für diese ausführliche Untersuchung und Darstellung, das hilft viel für das Verständnis.
Black hat geschrieben:
02.04.2021, 21:23
Heisst also, hast du ein CCU programm X, welches via programexecute ein anderes CCU program Y startet, so wird zuerst das noch laufende Script Y abgearbeitet, bevor das Program Y gestartet wird.
Sicher "Script X" gemeint?

Genau das hatte ich mir schon gedacht, auch wenn ich es mir anders gewünscht hätte, denn das macht es etwas komplizierter, wenn ich eigentlich in dem Script vom Ergebnis des Aufrufes abhängig bin. So muß ich extra Triggervariablen einbauen, damit das aufrufende Programm erneut getriggert wird, sobald das aufgerufene seinen Lauf beendet hat und somit ein Ergebnis vorliegt.

Wenn das aufgerufene Programm zunächst nur vorgemerkt/geflaged ist, dann ist es nicht verwunderlich, dass es nur einmal abgearbeitet wird, auch bei mehrfachem Aufruf in einem Script. Aber das Thema berührt mich derzeit ohnehin nicht.

Ich habe die Programme schon entsprechend umgebaut und werde sehen, ob es jetzt wie gedacht funktioniert.

[sprotte80]
Beiträge: 331
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 23 Mal

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von [sprotte80] » 03.04.2021, 13:17

Hi

grad ne PN vom andren Forum gekriegt.
Is wohl nich doch nich so wie Black schreiben tut.
https://forum.fhem.de/index.php/topic,8 ... msg1145403

Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

Matsch
Beiträge: 5359
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von Matsch » 03.04.2021, 13:48

Mag ja sein, dass nicht alles richtig war, was Black geschrieben hat, aber der entscheidende Punkt war korrekt und wird von BadenPower auch bestätigt:
Was allerdings wichtig ist und auch beachtet werden muss, das ist die Tatsache, dass die Ausführung der Aktionen, welche sich in einem Programm befinden, welches durch ein Skript in einem Programm auf der CCU durch .ProgrammExecute() gestartet wird, erst nach Abarbeitung des Skriptes ausgeführt werden.
Natürlich interessiert mich allein, zu welchem Zeitpunkt die Aktionen ausgeführt werden! Unter Berücksichtigung dieses Sachverhaltes läuft nun auch mein Programm/Script so wie ich es mir gewünscht hatte.

Übrigens, wenn du wirklich ernstgenommen werden willst, dann bediene dich bitte nicht des Comic-Stils - den finde nun wieder ich nicht komisch.
Oder ist Deutsch nicht deine Muttersprache?

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von MichaelN » 03.04.2021, 14:14

Matsch hat geschrieben:
03.04.2021, 13:48
Übrigens, wenn du wirklich ernstgenommen werden willst, dann bediene dich bitte nicht des Comic-Stils
Das kann ich nur unterschreiben. Mir rollen sich dabei die Zehennägel auf, wenn ich diese Babysprache lese. Es ist ja löblich, wenn man sich fachlich beteiligt, aber um ernst genommen zu werden, ist Sprache ein wichtiger Faktor.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

[sprotte80]
Beiträge: 331
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 23 Mal

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von [sprotte80] » 03.04.2021, 18:34

Hi
MichaelN hat geschrieben:
03.04.2021, 14:14
wenn ich diese Babysprache lese.
Kannst das lassen? Das tut weh weil ich mich schon bemühe.
Sry will nicht näher drauf eingehen.

Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

Matsch
Beiträge: 5359
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von Matsch » 03.04.2021, 22:18

Sollte es Umstände geben, die außerhalb deines Willens liegen und die wir nicht kennen können, so tut mir das leid. Wir haben wirklich alle gedacht, da will uns einer auf den Arm nehmen. Wenn man um eine Sache Bescheid weiß, kann man besser und verständnisvoller darauf eingehen.

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von MichaelN » 04.04.2021, 18:15

[sprotte80] hat geschrieben:
03.04.2021, 18:34
Kannst das lassen? Das tut weh weil ich mich schon bemühe.
Wenn du das persönlich nimmst, ist das deine eigene Entscheidung. Offen Defizite ansprechen kann übrigens helfen.

Als ernstgemeinter Tipp : las deinen Text von Google Übersetzer von deutsch in englisch und zurück übersetzen.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von Black » 05.04.2021, 15:43

Nun, die Mehrzahl der Beiträge jenigen Users hier betrafen wohl eher Troll und BlamePosts gegen mich. Seis drum, das Forum hat ja zum Glück auch Möglichkeiten, sich von dem Lesen derartiger Beiträgen freistellen zu lassen :mrgreen:

Nun aber zum Sachlichen.
Das Verhalten , das in Logs und Auswertungen meines dokumentierten Versuchsaufbaus beim Starten des Startprogrammes aus einem Programm selber und nicht aus einem Scripteditor heraus,nur eine Ausführung des Programmes Test2 zu beobachten war, ist für den durchgeführten, dokumentierten Part auch so richtig. Hintergrund ist der retriggern Haken, der bei dem Versuchsaufbau ("..man lege ein Program test1 und test2 an..") standartmäßg gesetzt ist. In diesem Case istbei gesetzem Retriggern Haken expliziet nur eine Ausführung zu beobachten. (Auch logisch, bevor das Programm test2 das erste mal ausgeführt werden kann, wird es nochmal getriggert, damit eliminierung des 1. triggerns und damit nur eine Ausführung)

Nimmt man nun den Retriggern haken weg von der Destination aus test2 und Startet den Versuchsaufbau erneut, so ist natürlich zu beobachten, das nach Beendigung von Startscript 2mal test2 und dann 1 mal test1 ausgeführt wird. Dieser Effekt ist

Code: Alles auswählen

Apr  5 15:19:58 SpieleSystem user.debug LOGGERNAME: [Script test1]
Apr  5 15:19:58 SpieleSystem user.debug LOGGERNAME: [Script test2]
Apr  5 15:19:58 SpieleSystem user.debug LOGGERNAME: [Script test2]
Apr  5 15:19:58 SpieleSystem user.debug LOGGERNAME: [StartScript ende]
Apr  5 15:19:52 SpieleSystem user.debug LOGGERNAME: [StartScript anfang]
eine Zählsystemvariable, um die Test2 erweitert wurde, zählt auch 2 Aufrufe.
Auch hierbei gibt: Die Weitere Ausführung der Programme test2 und test1 erst, nachdem das startscript beendet wurde.

Erweitert man nun das script test2 um einen verzögerungdelay innerhalb des scriptes von 3 Sekunden, so werden alle 3 scripte mit einer Verzögerung von den 3 Sekudnen gestartet. Der bekannte und erwiesene Effekt, dass die Scriptausführung eines Scriptes innerhalb der Programmablaufebene alle anderen Ausführungen dieser Ablaufebene blockiert.

Damit sollte das Thema nun hinreichernd abgehandelt sein

Black
Zuletzt geändert von Black am 05.04.2021, 16:40, insgesamt 1-mal geändert.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Matsch
Beiträge: 5359
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: ProgramExecute - Zeitpunkt der Ausführung?

Beitrag von Matsch » 05.04.2021, 16:00

Das ist auch nochmal ein interessanter Aspekt. Ich glaubte allerdings, dass sich die Retriggeroption allein auf Timer (also zeitverzögerte Ausführungen) bezieht.
Nun, der Fall doppelter Triggerungen wird ohnehin fast nie vorkommen, aber wenn doch, muß man das im Kopf haben.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“