NEWS
[gelöst] Blockly schaltet zu oft
-
@chris777 sagte: was hat der sonst falls nicht Verzögerung timeout zu sagen?
Das verhindert, dass der Timeout mehrfach gestartet wird.
-
@paul53 Ich weiß, ich nerve vielleicht, aber was heist verzögerung timeout genau? Das der Timeout nicht gleich gestartet wird und wenn ja nach wieviel sek. wird er gestartet.
Hast du eingutes Handbuch, wo man sich solche Funktionen angucken kann?
-
@chris777 sagte: was heist verzögerung timeout genau?
Es wird die Timer-Variable
timeout
geprüft. Wenn der Timer startet, wird sie auf ein spezielles Timer-Objekt gesetzt. Wenn der Timer gestoppt wird, wird die Variabletimeout
auf null gesetzt, so dass die Bedingung "nicht Verzögerung timeout" erfüllt ist. -
@paul53 Danke!
-
@chris777 sagte in Blockly schaltet zu oft:
aber was heist verzögerung timeout genau? Das der Timeout nicht gleich gestartet wird und wenn ja nach wieviel sek. wird er gestartet.
Nein! Du kannst die Verzögerung selbst mit einem Namen versehen, damit du verschiedene Verzögerungen in einem Blockly auseinander halten kannst.
Da du das nicht gemacht hast, heisst drine Verzögerung einfach noch "timeout" -
Meine Lösung scheint auch zu funktionieren.
Gruß
-
@chris777 sagte in [gelöst] Blockly schaltet zu oft:
Meine Lösung scheint auch zu funktionieren.
und welche Möglichkeit hast du noch gefunden, die Paul, Codierknecht oder ich übersehen haben?
-
@homoran siehe oben mein screenshoot. Bevor der eine timeout startet wird der jeweils andere gestoppt und bis jetzt kommen saubere Signale.
-
@chris777 kann es nicht!
Da ich immer noch nicht weiß was hinter den DPs steckt, natürlich nur auf Glaskugelbasisder Timeout2 würde mehrfach gestartet, wenn öfter ein Wert >3000 kommt (3004, 3007, 3003,......) und gleichzeitig der andere unbekannte DP true ist.
Danach kannst du den Timeout2 nicht mehr stoppen. -
@homoran sagte in [gelöst] Blockly schaltet zu oft:
der Timeout2 würde mehrfach gestartet, wenn öfter ein Wert >3000 kommt (3004, 3007, 3003,......) und gleichzeitig der andere unbekannte DP true ist.
Danach kannst du den Timeout2 nicht mehr stoppen.Genau darum stoppe ich (so ich denn mal welche verwende) jeden Timeout bevor ich ihn starte.
In der Regel will man ja etwas bewirken, wenn ein Zustand länger als x andauert.Will man nach einer Zeit x etwas bewirken, sobald sich ein Zustand das erste mal ändert und sich dies innerhalb der Zeit auch so bleibt, nimmt man entweder eine Verriegelungs-Variable oder prüft, ob der Timer noch nicht läuft, bevor man einen neuen startet.
Mehrere Instanzen eines Timeouts gilt es auf jeden Fall zu vermeiden.
-
Ihr habt recht, jetzt kommen wieder die Signale in kurzen Abständen...
-
Und so? Da stoppe ich ja jeden Timeout, bevor der neue startet.
oder eher so?
-
@codierknecht Was ist eine Verriegelungsvariable und den timeout kann ich prüfen mit falls nicht timeout?
Gruß
-
@chris777 sagte: Was ist eine Verriegelungsvariable
Die Verriegelung gegen erneuten Timerstart ist "nicht Verzögerung timeout2", also ist
timeout2
die Verriegelungsvariable.@chris777 sagte in [gelöst] Blockly schaltet zu oft:
oder eher so?
So wird nicht mehr auf false geschaltet und die Logik ist umgedreht.
Weshalb nicht so, wie hier gezeigt ("Switch" = "SG Aktiv")?
-
Ok, dann werde ich es mal so probieren.
Für mich nochmal: es starten jedes Mal Timeouts, wenn die Bedingung erfüllt ist und der Trigger auslöst? Es ist nicht wie in einer SPS, dass solange das Signal anliegt die Bedingung erfüllt ist und der Timer läuft?
Es können viele gleiche Timeouts gestartet werden?
Wenn viele Timeouts gestartet sind, kann ich nicht alle stoppen?
Kann man die Funktionen iwo nachlesen? Bei Verzögerung timeout wäre ich nie darauf gekommen, dass ich damit das aktiv-Signal vom timeout abfrageErstmal allen vielen Dank!
-
@chris777 sagte in [gelöst] Blockly schaltet zu oft:
Es ist nicht wie in einer SPS, dass solange das Signal anliegt die Bedingung erfüllt ist und der Timer läuft?
Nein - auf keinen Fall.
Es können viele gleiche Timeouts gestartet werden?
Ja!
Wenn viele Timeouts gestartet sind, kann ich nicht alle stoppen?
Wenn die einzeln per Name ansprechbar sind: Ja.
Wenn Du einen Timer mehrfach nacheinander gestartet hast: Soweit mir bekannt - Nein.Bedenke immer, dass Du hier keine nacheinander ablaufende Prozesssteuerung hast, sondern ein Ereignisgesteuertes System, bei dem Prozesse auch noch asynchron ablaufen können.
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md
-
ein Ereignisgesteuertes System, bei dem Prozesse auch noch asynchron ablaufen können.
Stichwort: https://www.google.com/search?q=nebenläufige+programmierung
-
Könnte es jetzt so funktionieren? Mir ist noch nicht klar, ob ich so SG Aktiv in true und false setzen kann oder ob es sich gegenseitig beeinflusst.
-
-
Und wie schalte ich SG Aktiv wieder auf false?