NEWS
Script durch Button starten
-
Hallo,
ich möchte mittels Button in Vis ein Java/ Blocklysctipt aktivieren bzw. deaktivieren. Ist so etwas möglich?
Ich habe in iobroker unter Javascript0 ein neuen Datenpunkt als Zahl angelegt. Dort werden durch Buttons die ich in Vis bestätige Zahlen 1-3 als Wert gesetzt (1 = Script eins aktivieren usw.).
Deshalb habe ich ein weiteres Blocklysctipt geschrieben welches die Werte ausliest und das entsprechende Script unter javascript0.scriptEnabled.[Name] auf true bzw. false setzt.Leider interessiert es iobroker nicht ob da nun true oder false drinsteht und wird ignoriert Nachdem ich erst das Script händisch aktiviere (Playknopf), wird es ausgeführt.
Muss ich noch wo anders irgendwo was ändern?
Freue mich auf eure Unterstützung.
Grüße
Philipp -
@PCGamer1988 sagte in Script durch Button starten:
Deshalb habe ich ein weiteres Blocklysctipt geschrieben welches die Werte ausliest und das entsprechende Script unter javascript0.scriptEnabled.[Name] auf true bzw. false setzt.
Wenn du im Forum mal nach diesen Datenpunkten suchst wirst du feststellen das es keine gute Idee ist, diese zum dynamischen Aktivieren von Skripten zu nutzen.
Besser ist es, im betroffenen Script zu schauen wie dein Datenpunkt gesetzt ist und basierend darauf die eigentliche Aktion des Skriptes durchzuführen.
A.
-
@Asgothian
@PCGamer1988
kann mich nur anschliessen - ich mußte viele scripts ändern, nachdem ich von den profis darauf hingewiesen worden bin , doch über einen datenpunkt zu steuern/triggernzusätzlich wurde bei mir bei jedem script-start, welches ich programmierte, im admin (script-tab) eine art refresh gemacht - also während ich etwas programmierte hat hat der admin den focus verloren - da irgendein script gestartet wurde und beendet wurde
-
@liv-in-sky sagte:
im admin (script-tab) eine art refresh gemacht
Bei jedem Scriptstart wird das Script compiliert. Unnötige Scriptstarts sind daher nicht gerade Resourcen schonend.
@PCGamer1988
Packe den kompletten Inhalt des bisherigen Skripts in eine Funktion und starte die Funktion über einen Trigger auf den VisDatenpunkt.function script1() { Hier das bisherige Skript rein } on({id: 'javascript.0.VisDatenpunkt', val: 1}, script1); // Triggert auf Wert 1
-
Danke für die Antworten.
Ich werde da mal meine Scripte anpassen -
Kann man das auch mit Blockly bewerkstelligen? Ich habe mein komplettes Script in einer Funktion gepackt.
Zusätzlich habe ich ein Trigger der ausgeführt wird falls sich das Objekt ändert. In Trigger prüfe ich ob es den Wert 1 hat und führt wenn es zutrifft die Funktion aus. Leider wird die Funktion auch ausgeführt, wenn sich der Wert von 1 auf 2 geändert hat. Gibt es noch ein passerden Trigger?
Mein Script in der Funktion enthält auch verschiedene Trigger, funktionieren Trigger in einer Funktion?
Zum Testen habe ich mal ein Trigger in der Funktion erstellt, wo eine Lampe umgeschalten wird wenn ein Objekt geändert wurde. Zwar geht das, aber die Lampe wird min. 3mal hintereinander geschalten als ob die Funktion mehrfach ausgeführt wirdWas habe ich falsch gemacht?
-
@PCGamer1988 sagte:
Mein Script in der Funktion enthält auch verschiedene Trigger, funktionieren Trigger in einer Funktion?
Nein, in der Regel nicht.
@PCGamer1988 sagte in Script durch Button starten:
In Trigger prüfe ich ob es den Wert 1 hat und führt wenn es zutrifft die Funktion aus. Leider wird die Funktion auch ausgeführt, wenn sich der Wert von 1 auf 2 geändert hat. Gibt es noch ein passerden Trigger?
on({id: 'javascript.0.VisDatenpunkt', change: 'ne', val: 1}, script1); // Triggert auf Wert 1
-
Kann man ein eigenen Trigger in Blockly definieren? Ich habe mein Script in Blockly geschrieben und nicht in puren JS. Wenn Trigger aber in Funktionen nicht möglich sind, kann ich es für mich leider nicht so umsetzen
Gibt es noch eine andere Möglichkeit? -
Gibt es noch eine andere Möglichkeit?
Ja, wenn auf bestimmte Ereignisse getriggert werden soll, aber nur bei Freigabe durch einen Datenpunkt eine Aktion ausgelöst werden soll, kann man diesen Freigabe-Datenpunkt in jedem Trigger als erstes abfragen.