NEWS
Trigger bestimmtes Script
-
@TobStar sagte:
ohne zusätzliche Datenpunkte quasi
Man kann Werte von Skript zu Skript nur über Datenpunkte übergeben.
-
Du musst ja nur die Anwesenheits Prüfung in ein eigenes Skript mit einem Status Datenpunkt, der ja dann permanent aktualisiert wird, auslagern. (so wie das @Ahnungsbefreit wohl auch meint)
Ab da können ja alle anderen Skripte auf diesen Status Datenpunkt zugreifen. Entweder als Trigger oder auch in Abfragen. Ich habe zig Skripte die Anhand vom Anwesenheits Status schalten und walten.
Eine Möglichkeit wie Du das ungefähr haben willst ist vielleicht dass ein Skript ein anderes aktiviert/deaktiviert. Ich verwende das auch, aber nur spärlich, zB schaltet bei mir ein Skript mit einem Zeitplan mein Heizungs Skript im Sommer aus und im Winter ein (wenn ich das Heizungs Skript 6 Monate nicht brauche, muss das ja auch nicht laufen und ständig Thermometer, Stellmotore etc überwachen). Das ist irgendwie so wie die Holzhammer Methode, Trigger sind schon wesentlich eleganter. Vielleicht musst Du auch nur Deine Denkweise etwas anpassen
-
@Albert-K aktuell läuft das ja auch alles über Datenpunkte. Nur wäre es manchmal ganz nützlich wenn man direkt ein anderes Script ansprechen könnte ohne ständig Datenpunkte aus / einzulesen. Bei mir ging es gerade um die Videoüberwachung die bei Abwesenheit eingeschalten wird. Hab das ganze nun nach Globals ausgelagert und spreche dann die einzelnen Funktionen darüber an.
Elegant wäre es halt wenn man nun aus dem einen Script eine Funktion in einem anderem Script aufrufen könnte, samt Parameter. Z.b. /scripts/Video.js -aktivieren o.ä.
-
@TobStar So ganz verstehe ich das Problem nicht. Skripte starten nur über einen Trigger (Variablenwert, Uhrzeit etc).
Wenn du aus einem Skript ein anderes starten willst, dann geht das so nicht. Das andere Skript wartet ja auf einen Trigger und den müsste das aufrufende Skript erst setzen.
Du kommst also imho nicht darum herum, einen Triggerwert abzufragen in jedem Skript, das bei einem bestimmten Ereignis laufen soll. Und wenn es um Anwesenheit geht, dann hast du doch eintweder einen Datenpunkt (z.B. im radar2-Adapter) oder du hast eine Variable definiert "Anwesenheit". Und die fragst du im Trigger ab. Wirklich aufwändig ist das nicht... -
@amg_666 So sehe ich das auch.
-
@amg_666 es ist ja auch kein Problem, die Frage war nur ob es hier eine weitere Möglichkeit gibt um das auf diese Art zu lösen. Scheinbar nicht.
Es ist ja auch eine Frage der Performance-Steuerung. Wenn ich z.B. diverse Scripte habe die eine Aktion um eine bestimmte Uhrzeit ausführen sollen, dann würde man z.B. Per Cron (* * * * *) jedes einzelne Script jede Minute starten um zu prüfen ob Zeit X gleich der gewünschten ist. Praktischer wäre ein einzelnes Script das jede Minute läuft und dann zu entsprechenden Uhrzeit eines dieser Scripte mit entsprechendem Parameter aufruft.
Klar könnte man das auch umsetzen indem man zusätzlich zum Datenpunkt STARTEUMUHRZEIT einen weiteren Trigger-Datenpunkt erzeugt der dann im jeweiligem Script etwas ausführt, aber dann wird es auch irgendwann sehr unübersichtlich.
Es geht also nicht darum ob es schwierig ist oder wo das Problem ist, es geht einzig darum ob es besser gelöst werden kann. Ich komme aus der Webentwicklung und weiß daher das es an sich möglich ist, die Frage war nur ob sich dies auch in ioBroker umsetzen lässt.
Edit: Ja die Global Scripte gäben das her.
-
Du musst ja nur EINEN Datenpunkt abfragen, jemand zu Hause dann mach dies, niemand zu Hause dann mach das.
Ich habs auch bei der Video Überwachung. Sobald der Status auf "alle abwesend" springt, werden die Kameras und Bewegungsmelder scharf geschaltet.
@amg_666
das ist nicht ganz richtig. Ein Skript muss nicht unbedingt einen Trigger haben. Ein Skript läuft automatisch ab wenn es aktiviert wird (der rote Pfeil rechts neben dem Namen) und das kann man per Blockly in einem anderen Skript ein/ausschalten. In gewissen Fällen macht das Sinn, aber nicht generell. -
@TobStar sagte:
Ja die Global Scripte gäben das her.
Sie werden aber in jedes normale (nicht globale) Script kopiert.
-
@paul53 Richtig, deshalb will ich es darüber auch nicht tun
-
@TobStar said in Trigger bestimmtes Script:
Es ist ja auch eine Frage der Performance-Steuerung. Wenn ich z.B. diverse Scripte habe die eine Aktion um eine bestimmte Uhrzeit ausführen sollen, dann würde man z.B. Per Cron (* * * * *) jedes einzelne Script jede Minute starten um zu prüfen ob Zeit X gleich der gewünschten ist. Praktischer wäre ein einzelnes Script das jede Minute läuft und dann zu entsprechenden Uhrzeit eines dieser Scripte mit entsprechendem Parameter aufruft.
Und genau das ist hier nicht der Fall. Das Skript wird gestartet und wartet darauf dass der Trigger ausgelöst wird/wahr wird (z.B. die Uhrzeit die Du im Trigger festgelegt hast), und wenn das erfolgt laufen die Aktionen im Skript ab.
-
@TobStar sagte:
aus dem einen Script eine Funktion in einem anderem Script aufrufen könnte, samt Parameter.
Du kannst eigene Module erstellen und diese mittels require('meinModul') in das Skript einbinden. Es funktioniert zwar ähnlich den globalen Funktionen mit dem Unterschied, dass man Module nur dort einbindet, wo sie gebraucht werden.
-
@paul53 danke dir, das zielt doch schon in die Richtung die ich anstrebe.