NEWS
(gelöst) Schleife nur einmal ausführen
-
Hallo,
ich habe hier ein Testskript welches startet, wenn ein Wert größer als 50 ist und in eine Schleife führt, die beendet wird, wenn der Wert kleiner 50 ist:Der Wert ändert sich öfters im Bereich größer 50. Dann startet das Skript bzw die Schleife jedesmal neu.
Ich möchte aber, dass die Schleife nur einmal gestartet wird und endet, wenn der Wert kleiner 50 ist.
Ist das möglich?Gruß
Kimchi -
@kymchy sagte in Schleife nur einmal ausführen:
Ich möchte aber, dass die Schleife nur einmal gestartet wird und endet, wenn der Wert kleiner 50 ist.
Dann erstell eine Variable, welche z.B. während der Ausführung auf
true
gesetzt wird und im Trigger geprüft wird, ob die Logik gerade schon einmal läuft. -
@haus-automatisierung wie prüfe ich denn im Trigger, ob die Variable beispielsweise auf true steht?
-
@kymchy Falls
<variable>
- genau wie deine andere Prüfung. Kannst auch ein und draus machen.Also Wert > 50 UND Variable.
-
@haus-automatisierung aber die Variable ist beim ersten Durchlauf undefined und vor der Schleife setzen kann ich sie ja schlecht...also über einen Datenpunkt?
-
@kymchy sagte in Schleife nur einmal ausführen:
aber die Variable ist beim ersten Durchlauf undefined
Dann setze sie beim Start des Script auf
false
-
@codierknecht das Skript wird doch bei einer Änderung des Wertes über 50 neu gestartet, während die andere Schleife noch läuft. So klappt das doch nicht.
-
das Skript wird doch ... neu gestartet
Ein Script wird in der Regel 1x gestartet und läuft dann bis zum Sanktnimmerleinstag.
Es "reagiert" mit den Triggern auf Ereignisse. Da wird nix gestartet oder gestoppt.https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps
-
@kymchy sagte in Schleife nur einmal ausführen:
das Skript wird doch bei einer Änderung des Wertes über 50 neu gestartet
Das Script wird nicht neugestartet. Nur der Inhalt des Triggers wird erneut ausgeführt...
Schau am besten die Grundlagen des JavaScript-Adapters in Ruhe an.Sieh Lösung von @Codierknecht (danke fürs Beispiel zusammenklicken!)
-
@haus-automatisierung ich habe es jetzt so und es funktioniert nicht wie gewünscht.
-
@kymchy sagte in Schleife nur einmal ausführen:
es funktioniert nicht wie gewünscht.
sondern wie?
der block serze variable auf falsch muss ja auch über den Trigger
-
@kymchy Naja wenn Du bei jedem Trigger-Aufruf den Wert zurücksetzt, hast Du an der Logik ja auch nichts geändert. Außerhalb deklarieren, innerhalb nur entsprechend zurücksetzen.
@Codierknecht hat doch ein super Beispiel gebaut.
-
@kymchy
Nimm statt "Wert von Example.State" einfach den Baustein "Wert" (siehe Beispiel).
Den Wert des triggernden DP nochmal zu lesen ist ineffizient. -
@homoran habe meinen Fehler vermutlich gefunden, die Variable muss vor dem Trigger gesetzt werden.
-
@kymchy sagte in Schleife nur einmal ausführen:
@homoran habe meinen Fehler vermutlich gefunden, die Variable muss vor dem Trigger gesetzt werden.
ja
-
@homoran das vergesse ich jedesmal, bei mir hat sich fälschlicherweise eingebrannt, dass der Trigger immer das Erste ist...daher kam ich auch nicht weiter.
Herzlichen Dank. -
@kymchy sagte in Schleife nur einmal ausführen:
bei mir hat sich fälschlicherweise eingebrannt, dass der Trigger immer das Erste ist
Das gilt auch für den normalen Ablauf.
Was über dem Trigger steht wird nur einmalig bei Skriptstart ausgeführt.und wie bereits von anderen geschrieben ist Triggern nicht Skriptstart
-
@homoran yo, wieder einiges gelernt...
-
@kymchy
Lies Dir nochmal die Grundlagen durch.https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/blockly.md