NEWS
[Gelöst] Doppelter Tastendruck
-
Hi, ich versuche auch ein Doppelter Tastendruck zu fangen, dieses Mal von einem Ikea Tradfri Taster. Ich habe versucht es vie hier zu machen Doppelter Tastendruck innerhalb 3 Sekunden [gelöst] aber das funktioniert bei mir leider nicht. Ich kriege immer nur "Function 1" als Ausgabe. Hier mein Blockly:
Und das JavaScript:
var timeout; on({id: 'deconz.0.sensors.ec1bbdfffeaac1cb.buttons.1.release_press', val: true}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (timeout) { (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})(); console.log('Function 1'); } else { timeout = setTimeout(function () { timeout = null; console.log('Function 2'); }, 1000); } });
Das Problem ist dass anscheinend das Tastendrücken auf dem Ikea Tradfri Schalter automatisch 2 mal das Wert auf "true" setzt, direkt nacheinander innerhalb 10-20 ms. Das hier ist was geloggt wird wenn ich einmal drauf drücke:
val ack from Timestamp Last change false true deconz.0 2020-09-18 13:34:01.813 false true deconz.0 2020-09-18 13:34:01.804 true true deconz.0 2020-09-18 13:34:01.657 true true deconz.0 2020-09-18 13:34:01.646
Hat jemand eine Idee wie man so was lösen kann, bzw. wie ich einen Doppelclick abfangen kann?
Danke! -
@mrFenyx ich kenne Deconz nicht.
Kannst du nicht die Zeitdifferenz von der jetzigen Statusänderun/aktualisierung mit der letzten Statusänderung/aktualisierung berechnen. und wenn diese kleiner x msec ist ist das ein Doppelklick? -
Hi @Homoran , zu Deconz, das ist eigentlich nur ein Adapter für meine Zigbee Geräte.
Zum eigentlichen Problem, ich bin mir nicht sicher dass ich verstehe was du meinst. Das Problem scheint zu sein dass wenn ich 1x auf mein Taster drücke, gleich 2x das Wert des Objektes auf "true" gesetzt wird und das Skript es automatisch als Doppelklick sieht. Wenn ich z.B. mein Timeout auf 1ms setze dann wird immer nur das "Function 2" getriggered weil das "automatische" Doppelklick etwa 10ms braucht. Ich müsste also irgendwie im Trigger von der "on" Funktion neben "val: true" auch irgendwas in der Richtung "ts > oldTs + 50ms" -
@mrFenyx sagte:
on({id: 'deconz.0.sensors.ec1bbdfffeaac1cb.buttons.1.release_press', val: true},
Ist "release_press" der richtige Datenpunkt ? Welche werden noch angeboten ?
-
Ja, das sollte der richtige sein. Hier die anderen DPs:
-
@mrFenyx
Trigger mal auf "ist größer als letztes" anstelle von "ist wahr". -
Scheint so zu funktionieren! Es gibt ein anderes Problem jetzt aber das ist wahrscheinlich eine Hardware Beschränkung dass zu schnelles 2x Klick nicht erkannt wird (muss mindestens um die 300-400ms zwischen den Klicks warten). Danke @paul53 !