NEWS
Script starten automatisch bei ioBroker start
-
Hallo Leute,
mir ist heute aufgefallen, dass meine Scripte sich beim starten von ioBroker alle selbst ausführen. Woran kann das liegen? Das macht leider große Probleme beim neuen Backup Adapter, zumindest für mich. Gibt es einen Weg das zu verhindern?
Grüße
-
Wie sehen deine Skripte denn aus? Wie nutzt du sie? Normalerweise sollen Skripte direkt laufen oder sie reagieren auf bestimmte trigger. Bei letzterem sollte das aber nicht passieren das sie direkt loslaufen.
Gesendet vom Handy …
-
Ok stimmt. Am fehlenden Trigger könnte es liegen bei den Scripten. Sie werden sonst immer nur mit Alexa gestartet.
Ich habe zwei arten von Scripten bei denen ich das automatische starten nicht möchte.
var wol = require('wake_on_lan'); var myPC1 = "XX:XX:XX:XX:XX:XX"; wol.wake(myPC1); setState("javascript.0.scriptEnabled.WOL_JS"/*scriptEnabled.WOL_JS*/, false);
Um meinen PC zu starten. Ist ein rein Javascript.
var timeout; getState("broadlink2.0.RM:192-168-0-71.L.RF_A_AN", function (err, state) { setState("broadlink2.0.RM:192-168-0-71.L.RF_A_AN"/*RF A AN*/, state ? !state.val : true); }); timeout = setTimeout(function () { getState("broadlink2.0.RM:192-168-0-71.L.Fernseher_Fernbedienung_Power_Button", function (err, state) { setState("broadlink2.0.RM:192-168-0-71.L.Fernseher_Fernbedienung_Power_Button"/*Fernseher Fernbedienung Power Button*/, state ? !state.val : true); }); }, 5000);
Um meinen Fernseher z.B. anzuschalten.
Hast du einen kleinen Tipp was ich bei beiden einbauen kann, damit das nicht mehr passiert?
-
Ich würde mir einen "Default" Datenpunkt erstellen der im Standard auf "false" steht und ggf. erst bei Aktivierung von ioBroker (nach erfolgreichem Start) auf True gestellt wird. Diesen Datenpunkt würde ich dann in den Scripts prüfen damit die Bedingung erfüllt ist und diese Scripts erst dann greifen.
-
Gute Idee. Nur leider nicht praktikabel für mich. Die automatische Sicherung des neuen ioBroker Adapters stoppt ioBroker jede nacht. Das würde heißen ich muss jeden Tag den Punkt manuell umstellen.
Ich habe die Sicherung jetzt so eingestellt, dass es nicht immer ioBroker stoppt. Aber wie gut die Sicherung dann noch ist, also wie brauchbar diese Sicherungen dann sind, weiß ich leider nicht….
-
Ok stimmt. Am fehlenden Trigger könnte es liegen bei den Scripten. Sie werden sonst immer nur mit Alexa gestartet.
Ich habe zwei arten von Scripten bei denen ich das automatische starten nicht möchte.
var wol = require('wake_on_lan'); var myPC1 = "XX:XX:XX:XX:XX:XX"; wol.wake(myPC1); setState("javascript.0.scriptEnabled.WOL_JS"/*scriptEnabled.WOL_JS*/, false);
Um meinen PC zu starten. Ist ein rein Javascript.
var timeout; getState("broadlink2.0.RM:192-168-0-71.L.RF_A_AN", function (err, state) { setState("broadlink2.0.RM:192-168-0-71.L.RF_A_AN"/*RF A AN*/, state ? !state.val : true); }); timeout = setTimeout(function () { getState("broadlink2.0.RM:192-168-0-71.L.Fernseher_Fernbedienung_Power_Button", function (err, state) { setState("broadlink2.0.RM:192-168-0-71.L.Fernseher_Fernbedienung_Power_Button"/*Fernseher Fernbedienung Power Button*/, state ? !state.val : true); }); }, 5000);
Um meinen Fernseher z.B. anzuschalten.
Hast du einen kleinen Tipp was ich bei beiden einbauen kann, damit das nicht mehr passiert? `
Und somit sind wir beim Nachteil per Alexa Skripte direkt zu aktivieren. Wenn du so etwas tust musst du die Skripte nach ihrem Ablauf auch wieder deaktivieren.Gesendet vom Handy …
-
Und somit sind wir beim Nachteil per Alexa Skripte direkt zu aktivieren. Wenn du so etwas tust musst du die Skripte nach ihrem Ablauf auch wieder deaktivieren.
Gesendet vom Handy … `
Nur durch das Deaktivieren der Scripte nach dem ausführen würde ich erreichen, dass die Scripte beim ioBroker Start nicht direkt ausgeführt werden? Das wäre ja leicht zu lösen.
-
In der Theorie ja. Ich nutze das so nicht von daher nur vermutung
Gesendet vom Handy …
-
Wahrscheinlich liegen die Scripte unter Scripte enabled ?
Du hast wahrscheinlich Deine Scripte von Script enable direkt in den iot/cloud Adapter eingefügt ?
Damit schaltest Du die dann bei der Abfrage an und aus ?
(das hatte ich zu Anfang auch so, weil ich es nicht besser wusste und durch kopieren funktionierender Scripte als "Basis" immer so weiter gemacht habe)
Das hat den Nachteil das beim JS Adapter Start oder beim Neustart des ganzen Systems erstmal alle Scripte los laufen und eben auch alle Ansagen, oder noch schlimmer, alle Geräte wie Staubsauger oder Rasenmäher usw… los liefen.
Das kannst Du nur ändern indem Du Dir eigene Datenpunkte erstellst und dann diese als Trigger zum schalten nimmst.
Ganze Scripte schalte ich nur um oder an/aus z.B. über meine Anwesenheit.
Wenn ich zu Hause bin brauche ich z.B. nicht extra eine Telegram Nachricht über den aktuellen Telefonanruf oder ob ein Fenster geöffnet wurde.
-
Wahrscheinlich liegen die Scripte unter Scripte enabled ?
Du hast wahrscheinlich Deine Scripte von Script enable direkt in den iot/cloud Adapter eingefügt ?
Damit schaltest Du die dann bei der Abfrage an und aus ? `
Ich verstehe nicht was du meinst mit "die scripte liegen unter scripte enebled".
Aber ja, ich habe sie direkt in den Cloud Adapter eingebunden. Ich verstehe nur nicht ganz warum sie dann immer ausgeführt werden beim start.
Ich könnte die Scripte ja am ende wieder ausschalten lassen, aber auch ausgeschaltete direkt eingefügte Scripte werden ausgeführt. Wie z.B. mein WOL Script.
Was ändert der Datenpunk daran? Die Umsetzung ist mir klar, aber nicht der Grund.
-
Ich weiß nicht wie ich es besser erklären soll, aber wenn Du ein Script hast was beim starten sozusagen abgearbeitet wird und ein Gerät schaltet dann läuft es halt auch beim Neustart los und macht was da drinn steht.
Wenn Du aber einen eigenen Datenpunkt als Trigger hast nicht, weil ja erst dieser Datenpunkt angesprochen werden muss damit nun das Script abgearbeitet wird.
Dieser Datenpunkt wird ja beim Neustart des Systems nicht angesprochen.
Es geht auch so wie Du es machst, aber dann müssten immer alle Scripte ausgeschaltet sein und nur auf Anfrage angeschaltet werden und nach dem Durchlauf wieder ausgeschaltet werden, aber dann laufen die halt nur einmal durch und sind dann wieder aus.
Der Sinn ist doch aber eigentlich das Scripte immer laufen und auf das lauschen was Du machen willst.
Vielleicht habe ich Dich aber auch falsch verstanden…
PS: ausgeschaltete Scripte sollten natürlich nicht ausgeführt werden
-
Ich erklär am besten nochmal wie genau ich die Scripte benutze.
Jedes Script ist direkt im Cloud Adapter eingebunden.
Die Scripte sind aus, da sie nur ein mal ausgeführt werden müssen, z.B. für den Start von mehreren Geräten hintereinander.
Aber wenn die Scripte aus sind, wie eben z.B. mein WOL Script, starten sie trotzdem einmal beim ioBroker start.
Und genau das verstehe ich nicht
-
@Granten Servus,
hast du eine Lösung gefunden? Habe nämlich das gleiche Problem ;(
-
Hallo,
du darfst die Skripte nicht so verstehen, als würden sie auf ein Startbefehl warten.
Sie starten, wenn die Javascript Instanz startet.Wenn du bestimmte Aktionen nur einmal ausführen willst, brauchst du einen Trigger. Wenn es zB um das Setzen der Zustände von mehreren Aktoren geht (zB alle Lampen im Wohnzimmer) und der Auslöser ein Taster ist, dann benutzt die die on()-Funktion (Überwachung). Die genaue Beschreibung ist im javascript-Adapter Dokumentiert.
Etwa so: on(Trigger[bedingungen], Aktionen)
Wenn du keinen Taster nutzen willst, kannst du im gleichen Skript (oder woanders) einen Datenpunkt erzeugen (createState()) und den zB in VIS schalten.
Beispiel: Ist er true -> Licht an, ist er false -> Licht aus.Solange der Javascript-Adapter läuft, läuft auch das Skript und überwacht die ganze Zeit den Trigger Datenpunkt.
Dieser Trigger kann von außen gesetzt werden (Alexa, VIS, Hardware) oder auch zum Beispiel über einen Zeitplan (schedule).
Gruß
Pix