NEWS
hochzählen solange trigger auf wahr, zurücksetzen wenn false
-
Hallo zusammen,
ich möchte die Dauer wie lange eine Variable "Test" auf true ist in eine Variable "Dauer Takten erkannt" schreiben. Sobald die Variable "Test" false wird, soll die Variable "Dauer Takten erkannt" wieder zurückgesetzt werden:
Sobald die Variable "Test" auf "true" gestellt wird, wird die Variable "Dauer Takten erkannt" hochgezählt. Bei "false" wird die Variable "Dauer Takten erkannt" zunächst zurückgesetzt, jedoch wird im Anschluss weiter inkrementiert (vom zuletzt bekannten Wert bevor zurückgesetzt wurde).
Wieso läuft der erste Trigger obwohl die Variable Test auf false steht? -
@passuff sagte:
Wieso läuft der erste Trigger obwohl die Variable Test auf false steht?
Der Zeitplan läuft weiter, weil er nicht gestoppt wird. Verwende besser ein Intervall und nur einen Trigger.
-
@paul53
Diese Intervall Blöcke sind mir suspekt. Ich habe es inzwischen so versucht:
Das zurücksetzen muss allerdings mehrmals laufen bis es funktioniert... Ich teste mal deine Variante. Danke Dir!EDIT: Deine Variante funktioniert wirklich sauber. Habe ich übernommen.
Danke Dir! -
@passuff sagte in hochzählen solange trigger auf wahr, zurücksetzen wenn false:
Diese Intervall Blöcke sind mir suspekt. Ich habe es inzwischen so versucht:
Das dieses nicht funktioniert wundert mich nicht. Ich weiss nicht wie gut der ioBroker damit umgehen kann wenn der identische JS Code mehrfach parallel aufgerufen wird. Genau das kann aber passieren (Alternativ, wenn der ioBroker das erkennt und Blockiert wird auf weitere Trigger nicht reagiert)
Das Problem an diesem Code ist das du "synchron" die Abarbeitung des Triggers so lange verzögerst bis der Wert sich wieder geaendert hat. Wenn du den Taster also lange genug fest hältst wird die Schleife nie beendet werden. Der "Pause" Baustein sorgt nicht dafür das das ganze asynchron bearbeitet wird, er sorgt nur dafür das die Abarbeitung pausiert. Dennoch kommt der Aufruf der den Trigger startet nicht zurück.
Genau das ist aber was der ioBroker benötigt. Die einzelnen Funktionen die durch einen Trigger aufgerufen werden sollten so schnell wie möglich zurück kommen. Wenn in einer Funktion ein "Intervall" gestartet wird, dann ist das "asynchron", sprich die Abarbeitung wird nur angestossen und die Funktion kommt sofort zurück.
Warum schreibe ich das so ausführlich ? Dein Blockly ist ein extrem gutes Beispiel wie man es NICHT machen sollte. @paul53 hat davor schon die "saubere" Variante gepostet, die letztendlich genau das gleiche macht was du auch mit deiner Variante versucht hast, nur halt "asynchron" anstatt "synchron".
A.