NEWS
Aktion erst nach X Sekunden erneut auslösen
-
@ltsalvatore sagte in Aktion erst nach X Sekunden erneut auslösen:
sie soll erst wieder ausgelöst werden, wenn mindestens 60 Sekunden vergangen sind.
Dann kannst Du mit einer Sperr-Variablen arbeiten. Du startest dann einen Timer, welcher diese Variable nach 60 Sekunden zurücksetzt. Dafür gibt es schon ganz viele Themen hier im Forum.
PS: Und schau mal das Video hier an, Du machst ziemlich viele unnötige Vergleiche mit wahr: https://www.youtube.com/watch?v=J9j3K0X9vlc
-
@haus-automatisierung sagte in Aktion erst nach X Sekunden erneut auslösen:
Du machst ziemlich viele unnötige Vergleiche mit wahr
@ltsalvatore
... und liest den Wert im Trigger unnötigerweise erneut ein.https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps
-
@ltsalvatore Zeitvergleich mit Variable:
natürlich musst du die Variable Zeitstempel zu beginn des Skriptes noch initialisieren. Z.Bsp. mit 0 oder dem 'aktuelle Zeit' Block. Und das was nur alle 60 sekunden stattfinden soll muss natürlich auch in den Mache Zweig - das nachzubauen war ich zu faul
A.
p.s. Beispiel hier nur weil in dem (echt hilfreichen) Post von @codierknecht kein Zeit-Beispiel enthalten ist. -
@asgothian sagte in Aktion erst nach X Sekunden erneut auslösen:
weil in dem Post von @codierknecht kein Zeit-Beispiel enthalten ist
Ich glaube, das würde an der Ecke auch zu sehr ins Detail gehen.
Vielleicht erweitere ich das ja bei Gelegenheit noch um ein paar Beispiele.Ich bin mir allerdings noch nicht sicher, welche der möglichen Varianten da effektiver (bzw. besser lesbar) ist
- bool'sche Sperrvariable und Timeout
- Berechnung der abgelaufenen Zeit seit letzter erfolgreicher Ausführung
Vielleicht sollte man da beide Möglichkeiten aufzeigen.
-
@codierknecht sagte in Aktion erst nach X Sekunden erneut auslösen:
@asgothian sagte in Aktion erst nach X Sekunden erneut auslösen:
weil in dem Post von @codierknecht kein Zeit-Beispiel enthalten ist
Ich glaube, das würde an der Ecke auch zu sehr ins Detail gehen.
Sehe ich durchaus auch so.
Vielleicht erweitere ich das ja bei Gelegenheit noch um ein paar Beispiele.
Ich bin mir allerdings noch nicht sicher, welche der möglichen Varianten da effektiver (bzw. besser lesbar) ist
- bool'sche Sperrvariable und Timeout
- Berechnung der abgelaufenen Zeit seit letzter erfolgreicher Ausführung
Ich denke beides ist was die Lesbarkeit angeht gleich verständlich / unverständlich.
Ich hab mir angewöhnt:
- Sperrvariable immer dann wenn ich sofort agieren und eine erneute Ausführung behindern will
- Timeout immer dann wenn ich erst nach Ablauf der Sperrzeit agieren will.
Warum ?
- Ressourcen: Sperrvariable braucht weniger Ressourcen als Timeout
- Lesbarkeit - ein Blick auf den Code zeigt sofort ob 'Aktion sofort' oder 'Aktion später'
So würde ich das im Zweifelsfall auch als Beispiele aufzeigen - wobei das eine Beispiel (Aktion nach Ablauf einer Sperrzeit) hast Du schon.
-
@asgothian sagte: Zeitvergleich mit Variable:
Das funktioniert so nicht, da "aktuelle Zeit in Sekunden" die Sekunden der Uhrzeit enthält.
-
@ltsalvatore sagte: soll erst wieder ausgelöst werden, wenn mindestens 60 Sekunden vergangen sind.
Einfachste Version:
-
@paul53 Stimmt.. man sollte keinen JS code in Blockly nachbauen. Ich war davon ausgegangen das
aktuelle Zeit
sich inDate.now()
übersetzt.
Genau das nutz ich auch - ich selber nutze Blockly eigentlich nicht.Dummer Fehler. sorry.
So wird ein Schuh draus - den leeren Timeout mag ich nicht.
A.
-
@asgothian sagte: den leeren Timeout mag ich nicht.
In Javascript ist er nicht leer, denn die Timer-Variable muss auf null gesetzt werden, was Blockly seit Version 7.0.5 selbst macht.
-
@asgothian sagte in Aktion erst nach X Sekunden erneut auslösen:
den leeren Timeout mag ich nicht
Pack 'nen Kommentar rein - dann ist der nicht mehr leer
-
@paul53 Ich denke wir können uns darauf einigen das wir da unterschiedliche Ansichten haben.
Ich nutz das Konstrukt mit einer Variablen und
date.now()
in JS an vielen Stellen. Das ich das im ersten Blockly versuch ungetestet falsch gepostet hab war nicht gut, ist aber passiert.Ich werd weiter keine Timeouts nutzen nur um andere Aktionen zu blockieren. Und ich halte das weiterhin auch in Blockly nicht für die Ideale Variante. Aber das bin ich - das dürfen andere gerne anders sehen.
A.
-
Hallo zusammen,
zunächst einmal vielen Dank für die rege Beteiligung – genau das zeichnet dieses Forum aus!
Letztendlich habe ich mich der Einfachheit halber für die Variante von Paul53 entschieden. Diese war für mich am verständlichsten, ließ sich am einfachsten umsetzen und hat auf Anhieb funktioniert.
Das Ganze sieht dann jetzt so aus:
Inwiefern diese Lösung im Vergleich zu anderen Varianten hinsichtlich der Systemauslastung besser oder schlechter ist, kann ich schwer beurteilen.
Nochmals herzlichen Dank an alle für die Unterstützung!
PS: Ein zusätzliches Dankeschön für die Tipps zur Script-Optimierung! Diese werde ich mir bei Gelegenheit noch einmal genauer anschauen und versuchen bei meinen bestehenden und neuen Scripts umsetzen.
Viele Grüße