NEWS
[gelöst]Geänderter Wert soll erst nach 2 Minuten wieder ausgewertet werden
-
Hallo,
ich bräuchte mal Eure Hilfe zu einem Blockly Script.
Ein Helligkeitssensor an einem Node-MCU liefert bei einem bestimmten Helligkeitsschwellenwert "true für hell" und "false für dunkel". Das Problem ist nun, dass der Schwellenwert in einer undefinierbaren Zeit um true und false schwankt. Letztlich soll false eine Lampe schalten. Da aber true und false im Stakkato kommen (es wird ja nicht schlagartig dunkel) und nicht abzusehen ist, wie lange es dauert bis der Wechsel zwischen true und false zum Ende kommt möchte ich nach dem ersten Wechsel von true auf false zwei Minuten warten, bevor das Objekt erneut betrachtet wird. Das bekomme ich aber nicht hin, da ja der Wechsel des Helligkeitsschwellenwertes (true oder false) der Trigger ist. Hat jemand eine Idee, wie das gehen könnte?
Besten dank für den Input
Jo
-
Suche im Forum nach "https://forum.iobroker.net/viewtopic.php?f=21&t=15442&p=162221#p162221".
-
Hallo Paul, danke für den Hinweis, mir fehlte tatsächlich der richtige Suchbegriff…
-
Nochmal hallo @Paul,
mir ist in Deinem Beispiel nicht ganz klar, ob es für meinen Zweck dienlich ist. In dem Beispiel wird ja nur einmal geöffnet, also auch nur einmal getriggert. In meiner Frage ist aber der Trigger der Zustand des Helligkeitswertes, der in einer unbekannten Zeit unbekannte Anzahl von Änderungen von true auf false aufweist. Mit jeder Änderung würde doch das Skript erneut getriggert und abgearbeitet. Es soll ja nur einmal durch den Trigger gestartet in den nächsten zwei Minuten nicht erneut getriggert werden.
Oder verstehe ich Dein Skript nicht richtig?
-
Mit jeder Änderung würde doch das Skript erneut getriggert und abgearbeitet. Es soll ja nur einmal durch den Trigger gestartet in den nächsten zwei Minuten nicht erneut getriggert werden. `
Das mit dem Triggern ist richtig, aber die Aktion auf den Trigger wird nur beim ersten Mal ausgeführt und weitere Aktionen werden während der Entprelldauer gesperrt.Per Javascript geht es auch so:
var timer = null; on(idTrigger, function(dp) { // triggert bei Wertänderung if(!timer) { // Aktion timer = setTimeout(function() { timer = null; }, 120000); // 2 Minuten } });
-
Hallo Paul,
ich habe keinen Zweifel daran, dass es so funktionieren wird, denn es ist ja erprobt. Werde also versuchen, das in mein Skript einzubauen.
Aber um es mit JWvG zu sagen: "…allein mir fehlt der Glaube"... oder will sagen, ich würde gerne verstehen, warum es so reagiert und nicht beim nächsten ändern des Wertes vom Objekt erneut getriggert wird.
Vielen Dank für Deine Erklärung
Jo
PS: Beim Einbau in mein Skript hat es mir dann auch eingeleuchtet. Es wird natürlich bei jeder Änderung des Wertes getriggert, arbeitet den dann folgenden Code aber erst dann wieder ab, wenn die Hilfsvariable nach der Zeit zurück gesetzt wurde. Geradezu gruselig einfach...
Somit gelöst