NEWS
Starten eines anderen Script
-
Hi,
Ich möchte in einem Script(A) ein anderes Script(B) starten und dann in A warten bis sich B beendet.
In der Doku gibt es ja runScript und startScript leider ist mir der Unterschied nicht klar bzw. wird nicht erklärt.
Beides gibt es auch als Async. Leider sieht es so aus als ob alle Varianten nicht das machen was ich gerne möchte.Script dev3
console.log("dev3 start") await sleep(4000) console.log("dev3 end ") stopScript("dev.dev3")
script dev4
console.log("dev4 on") runScript("dev.dev3") // Version 1 startScript("dev.dev3") // Version 2 await runScriptAsync("dev.dev3") // Version 3 await startScriptAsync("dev.dev3") // version 4 console.log("dev4 off") stopScript("dev.dev4")
Könnte mir bitte jemand sagen wo ich meinen Fehler habe?
-
@ignis-draco sagte in Starten eines anderen Script:
Könnte mir bitte jemand sagen wo ich meinen Fehler habe?
Du kannst zwar in einem Script ein anders Script starten, aber Du erhältst keinerlei Info darüber, ob und wann das andere Script "durchgelaufen" ist.
Das ist auch so ohne weiteres gar nicht möglich. Definiere mal "durchgelaufen".Das aufgerufene Script könnte sich am Ende mit
stopScript()
selbst beenden.Oder Du könntest Dir mit einem Hilfs-DP helfen:
Erzeuge einen DP z.B.0_userdata.0.running
.
Diesen setzt Du im aufgerufenen Script gleich zu Beginn auftrue
und am Ende auffalse
.
Im aufrufenden Script reagierst Du per Trigger darauf:on({ id: '0_userdata.0.running', change: 'lt' }, function (obj) { });
Aber wozu soll das Ganze gut sein?
Das klingt alles sehr nach klassischer prozeduraler Programmierung.
Womöglich bist Du da völlig auf dem Holzweg.
Scripte werden im ioBroker üblicherweise nicht gestartet und gestoppt. Sie laufen einfach durch und reagieren auf Ereignisse. -
Hi
@codierknecht sagte in Starten eines anderen Script:Das aufgerufene Script könnte sich am Ende mit stopScript() selbst beenden.
Genau das mache ich ja. Siehe Zeile 4 in "dev3". jedoch müsste ich ja Blockierend warten auf "dev3" und ich suche dafür eine Möglichkeit.
@codierknecht sagte in Starten eines anderen Script:
Oder Du könntest Dir mit einem Hilfs-DP helfen:
Daran hatte auch auch gedacht. Hatte gehofft das es eine bessere Möglichkeit gibt.@codierknecht sagte in Starten eines anderen Script:
Aber wozu soll das Ganze gut sein?
Das klingt alles sehr nach klassischer prozeduraler Programmierung.
Womöglich bist Du da völlig auf dem Holzweg.In diesem Falle ist es auch so (nicht das mit dem Holzweg). Ich würde das an genau zwei Stellen benötigen.
- Bei meinen _Init Scripten die mir meinem Object Baum erstellen (Wird nur 1 mal aufgerufen wenn neue Hardware z.b. Fenster sensor eingebunden wird).
- Bei meinen TestScripte ich baue sehr universell einsetzbare Scripte um dieses zu Testen habe ich TestScripte gebaut die Datenpunkte setzten und schauen ob meine Scripte sich richtig verhalten. Diese Rufe ich nur auf wenn ich was in der Programmierung ändere habe und sicher gehen will das alles sich noch so verhält wie gewollt.
Um es übersichtliche zu haben sind die Test in einzelnen Dateien Gruppiert. Und da auch die Zeit eine rolle spielt daueren manche Test bis zu 3 Minuten und davon gibt es unterschiedliche viele in den einzelnen Szenarios.
Aber ich werde mir dann wohl was mit dem Datenpunkt bauen müssen.