NEWS
Konzeptfrage: Tastendruck-sequenz prüfen
-
Hallo zusammen,
ich habe eine konzeptionelle Frage:
Ich möchte einen einfachen Taster dazu benutzen, Sequenzen einzugeben, sowas wie doppel-Tastung oder auch komplexer wie kurz-kurz-lang gedrückt.Wie macht man das am besten mit einem Blockly?
Wie definiert man die Sequenzen flexibel?
und wie prüft man dann, wenn man ja jeweils sein script bei einem Tastendruck getriggert bekommt?
schlimmstenfalls läuft dann das Scipt ja zweimal parallel gleichzeitig ab, oder?Viele Grüße
Christoph -
@chris299 Da ich kein Blockly Freund bin, sondern meine Logik grundsätzlich über NodeRed abwickle, hier mal ein paar Grundsatzüberlegungen, die Du brauchst.
- Liefert Dir Dein Taster ein false Signal beim loslassen bzw. wie erkennst Du kurze oder langes Drücken. Beim Shelly gibts da soweit ich weiß Parameter, sodass Du das unterscheiden kannst.
- Wenn Du keine Datenpunkte für lang oder kurz bekommst, dann musst Du (false benötigst Du für das Loslassen) - einen definierten Zeitraum, um kurz oder lang zu unterscheiden.
- Sequenzen kannst Du über einen String definieren, in dem Du kurz mit 0 und lang mit 1 kodierst.
- Du kannst ja in jedem Skript ein "aktiv" Datenpunkt definieren und damit vor erneutem Abarbeiten diesen Datenpunkt abfragen.
Wie gesagt - meines Erachtens solltest Du die Fragen erst mal klären, bevor Du puzzelst.
-
@chris299 sagte: kurz-kurz-lang gedrückt.
Blockly-Beispiel (HomeMatic-Taster):
-
@mickym danke für die Hinweise. ja, das soll ein shelly liefern, insofern sollte ich einen wechsel true-false sehen, wenn er gedrückt und wieder losgelassen wird.
-
@paul53 danke für das Muster. Was genau macht denn dieses falls-nicht-timeout?
wenn ich z.b. 3 mal kurz möchte müsste ich bei jedem kurz-drücken prüfen, ob ich schon genügend im zähler zusammen habe, oder? -
auch sollte man beachten, blockly läuft auf dem server,
der tastendruck wird auf dem client wahr genommen.
daher wird es mit einer zeitmessung auf dem server schwierig.
hier scheint es eine lösung für die unterscheidung normal oder long press mit blockly zu geben
https://forum.iobroker.net/topic/36817/vis-button-long-pressich persönlich würde da eher eine lösung für den browser umsetzen, also etwas was in das script fenster von vis kommt.
man könnte dann in einem html widget einen knopf mit einem eindeutigen id erzeugen
und mit dem javascript dann auf die verschiedenen button down/button up events horchen.
auf basis der zeit könnte man dann zeiten definieren, woran short press/long press, evtl mindest pausen dawischen definieren könnte, diese sammelt und wenn dann soundsolang nix gedrückt wird erst einen datenpunkt mit der gesammelten sequenz beschreiben.
dadrauf könnte man dann wieder mit einem serverskript (js,blockly,node-red) reagieren und die aktionen ausführen. -
@chris299 sagte: Was genau macht denn dieses falls-nicht-timeout?
Es sperrt den Timeout für die Timer-Dauer nach dem ersten kurzen Tastendruck, um die Zeit für die Tasten-Folge zu begrenzen. Es soll kein zweiter Timer nach dem ersten Tastendruck loslaufen.
-
@oliverio sagte in Konzeptfrage: Tastendruck-sequenz prüfen:
der tastendruck wird auf dem client wahr genommen.
es geht nach meinem Verständnis um Taster in der Elektroinstallation und nicht in der vis (z.b.)
-
@chris299 sagte: wenn ich z.b. 3 mal kurz möchte
Ich habe es mal um mehrere "kurz" erweitert:
-
@chris299 sagte: wechsel true-false sehen, wenn er gedrückt und wieder losgelassen wird.
Dann kann man so HomeMatic-Tasten emulieren:
-
@homoran sagte in Konzeptfrage: Tastendruck-sequenz prüfen:
Taster in der Elektroinstallation
ah ok,
das latenz problem bleibt, aber in dem beispiel scheint es ja zu funktionieren
muss er halt erst mal tests machen ob das immer so funktioniert (besonders wenn man gerade mal videos über netzt/wlan schaut und das netz/router etwas mehr belastet ist wie normal. -
@chris299 sagte: wechsel true-false sehen, wenn er gedrückt und wieder losgelassen wird.
Ohne HomeMatic-Emulation
drücken - true, loslassen - false: