NEWS
[gelöst] Dimmer: Auf Leveländerung erst triggern, wenn sich der Wert nicht mehr ändert?
-
Hallo,
mir ist aufgefallen, dass ein Trigger, wie
on({id: "hmxxx.LEVEL", change: "ne"}, function(obj) { ... }); ````meistens zweimal triggert, wenn z.B. ein Dimmer hoch oder runter fährt. Jedenfalls suche ich eine Lösung mit dem on-Trigger, der erst auslöst, wenn der Dimmer sich nicht mehr über die Zeit ändert (seinen Einstellwert erreicht hat). Dabei ist auch zu beachten, dass ein Dimmer per Hand gesteuert werden kann. Das gleiche wäre für den Selektor interessant:
var cacheSelectorDimmer = $('channelstate.id=*.LEVEL');
cacheSelectorDimmer.on(function(obj) { ..... });Gibt es da ideen?
-
Also, die Variante mit dem on-Trigger habe ich gelöst:
on({id: "hmxxx.DIRECTION", change: "any", val: 0, logic: "and"}, function(obj) { console.log("Dimmen beendet: " + obj.newState.val); });
Aber wie baue ich die Parameter change: "any", val: 0, logic: "and" in den Selector ein. :?:
var cacheSelectorDimmer = $('channel[state.id=*.DIRECTION](functions=xxxx)'); cacheSelectorDimmer.on(function(obj) { ..... }); ````Der benutzt doch auch die on-Funktion. Ich habe aber bisher kein Beispiel gesehen, bei dem die Triggerbedingung geändert wurde. Geht das irgendwie?
-
Am Ende ist die einzige Lösung in meinen Augen die Folgende:
Man muss mit nem "Delay" arbeiten.
Also das "on" setzt einen Timeout (setTimeout) z.B. in 1 Sekunde oder welches Delay auch immer sinnvoll ist. Dann wird die eigentliche Aktion ausgeführt.
Falls ein zweiter Trigger vor ablauf des Timeouts kommt dann wird der bestehende Timeout gelöscht (clearTimeout) und wieder neu gesetzt. dann läuft es wieder los …
-
Also, die Variante mit dem on-Trigger habe ich gelöst:
on({id: "hmxxx.DIRECTION", change: "any", val: 0, logic: "and"}, function(obj) { console.log("Dimmen beendet: " + obj.newState.val); });
Aber wie baue ich die Parameter change: "any", val: 0, logic: "and" in den Selector ein. :?:
var cacheSelectorDimmer = $('channel[state.id=*.DIRECTION](functions=xxxx)'); cacheSelectorDimmer.on(function(obj) { ..... }); ````Der benutzt doch auch die on-Funktion. Ich habe aber bisher kein Beispiel gesehen, bei dem die Triggerbedingung geändert wurde. Geht das irgendwie? `
Mit RegExp geht es:
on({id: /^hm-rpc\.[.:\w\d-]+\.DIRECTION$/, change: "any", val: 0, logic: "and"}, function(obj) { console.log("Dimmen beendet: " + obj.newState.val); });
-
Danke für die Antworten.
Die Lösung von bluefox habe ich getestet und sie ist fast perfekt.
Beim Selector ist die Abfrage noch auf eine bestimmte Aufzählung in den Gewerken begrenzt:
var cacheSelectorDimmer = $('channelstate.id=*.DIRECTION');
Ist das auch in RegExp umsetzbar?
-
Habs rausgefunden :idea:
Der on-Trigger wird mit dem Parameter für das Gewerk erweitert:
on({id: /^hm-rpc\.[.:\w\d-]+\.DIRECTION$/, change: "any", val: 0, enumName: "triggerDim", logic: "and"}, function(obj) { console.log("Dimmen beendet: " + obj.newState.val); });
Meine nächste Baustelle lautet RegExp :!:
Nochmals danke !!!