Langen Tastendruck auswerten

Begonnen von Kiter192, 12 Mai 2013, 16:06:11

Vorheriges Thema - Nächstes Thema

Kiter192

Hallo zusammen,

ich habe einen HM-PB-WM55 neu gekauft (2fach Taster).
Nun möchte ich einen langen Tastendruck auswerten.
Ich habe einen Virtuellen Aktor angelegt um ein ack. an den Taster senden zu können.

Mein Log beim betätigen des Tasters:

2013-05-12 16:00:44 CUL_HM Taster_AQ1 Long 2-8440- (to VT_Quitt)
2013-05-12 16:00:44 CUL_HM Taster_AQ1 trigger: Long_196
2013-05-12 16:00:44 CUL_HM VT_Quitt_Btn1 OFF
2013-05-12 16:00:44 CUL_HM VT_Quitt_Btn1 virtActState: OFF
2013-05-12 16:00:44 CUL_HM VT_Quitt_Btn1 virtActTrigger: Taster_AQ1
2013-05-12 16:00:44 CUL_HM VT_Quitt_Btn1 virtActTrigType: long
2013-05-12 16:00:44 CUL_HM VT_Quitt_Btn1 virtActTrigRpt: 1
2013-05-12 16:00:44 CUL_HM VT_Quitt_Btn1 virtActTrigNo: 196
2013-05-12 16:00:44 CUL_HM Taster_AQ battery: ok
2013-05-12 16:00:44 CUL_HM Taster_AQ Taster_AQ1 Long 2-8440- (to VT_Quitt)
2013-05-12 16:00:44 CUL_HM Taster_AQ1 Long 3-8440- (to VT_Quitt)
2013-05-12 16:00:44 CUL_HM Taster_AQ1 trigger: Long_196
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 OFF
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActState: OFF
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActTrigger: Taster_AQ1
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActTrigType: long
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActTrigRpt: 2
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActTrigNo: 196
2013-05-12 16:00:45 CUL_HM Taster_AQ battery: ok
2013-05-12 16:00:45 CUL_HM Taster_AQ Taster_AQ1 Long 3-8440- (to VT_Quitt)
2013-05-12 16:00:45 CUL_HM Taster_AQ1 LongRelease 4-A040- (to VT_Quitt)
2013-05-12 16:00:45 CUL_HM Taster_AQ1 trigger: Long_196
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 OFF
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActState: OFF
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActTrigger: Taster_AQ1
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActTrigType: long_Release
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActTrigRpt: 3
2013-05-12 16:00:45 CUL_HM VT_Quitt_Btn1 virtActTrigNo: 196
2013-05-12 16:00:45 CUL_HM Taster_AQ battery: ok
2013-05-12 16:00:45 CUL_HM Taster_AQ Taster_AQ1 LongRelease 4-A040- (to VT_Quitt)

Mein funktionierender Code:

define Mail_test notify Taster_AQ:Taster_AQ1.* {if ("%" =~ "LongRelease 5") {prowl("Taster%%20lang%%20gedrückt","Taster","1")}}
 
==> ABER: der funktioniert nur bei einer Punktlandung, sprich genau 5 Sekunden Tastendruck.

Meine nächste Idee:

define Mail_test notify Taster_AQ1:LongRelease {if ("%" < 5) {prowl("Taster%%20lang%%20gedrückt","Taster","1")}}


Ergebnis im Log.

Argument "LongRelease 11-A040- (to VT_Quitt)" isn't numeric in numeric lt (<) at (eval 8230) line 1.
2013.05.12 15:19:14 1: prowl returned: -1



Kann mir jemand sagen wie man die Zahl "2013-05-12 15:30:55 CUL_HM Taster_AQ Taster_AQ2 Long 2-8440- (to VT_Quitt)" selektiert und vergleichen kann?


Kiter192


martinp876

Hi Kiter192,

Du solltest erst einmal entscheiden auf was du reagieren willst. Wenn du nur taster 1 willst nimm den also Entity

define Mail_test notify Taster_AQ1  # reagiert bei allen meldungen in Sachen Taste 1
Alternativ bei allen Long (auch LongRelease)
define Mail_test notify Taster_AQ1:Long.*  # reagiert bei allen Long

Jetzt musst du das Long eliminieren um an die Zahl zu kommen - etwas kompliziert:
$dur = %;
$dur =~ s/-.*//;#alles nach dem '-' abschneiden
$dur =~ s/.* //;# alles vor dem blank weg

$dur ist jetzt eine Zahl.

Alternativ liefert auch
get Taster_AQ1 param BNOCNT
den Wert zurueck.

einfach wird es wenn du nur reagieren willst,
define Mail_test notify Taster_AQ1:LongRelease.* { }#einmal je langer Tastendruck
define Mail_test notify Taster_AQ1:Long.* {if ("%" =~ "Long.* 5")} # tastendruck bei der 5. itteration (nach 2 sec)
define Mail_test notify Taster_AQ1:Long.*5-.* {} # tastendruck bei der 5. und 15. und 25. itteration

Gruss
Martin


Kiter192

Hallo,

vielen Dank für Deine Antwort.

Der Befehl "get Taster_AQ1 param BNOCNT" liefert tatsächlich den Wert.

Die Code Schnipsel:
$dur = %;
$dur =~ s/-.*//;#alles nach dem '-' abschneiden
$dur =~ s/.* //;# alles vor dem blank weg

$dur ist jetzt eine Zahl.

sind mir jetzt verständlich.

Leider bin ich Perl Neueinsteiger und die Bücher die ich bisher gelesen habe, lassen sich kaum auf FHEM anwenden.
Mein Problem ist nun also oben erhaltene Informationen in einen Programmcode einzubinden.
Sprich wie baue ich in mein notify "get Taster_AQ1 param BNOCNT" ein bzw "$dur = %;
$dur =~ s/-.*//;#alles nach dem '-' abschneiden
$dur =~ s/.* //;# alles vor dem blank weg

$dur ist jetzt eine Zahl. " um letztendlich diesen Wert vergleichen zu können?

Ich hoffe das Du bzw Ihr mir da noch unter die Arme helfen könnt.

Meine Idee war:

define dumm dumy

define Mail_test notify Taster_AQ:Taster_AQ1.* {$dur = %;$dur =~ s/-.*//;$dur =~ s/.* //;{if ("$dur" < 5") {"set dumy ein"}}}

==> heht natürlich nicht. :(

martinp876

probiere mal
define dumy dummy
define Mail_test notify Taster_AQ1.*Long.* {my $dur = $EVENT;;$dur =~ s/-.*//;;$dur =~ s/.* //;;if ($dur < 5) {fhem "set dumy ein"}}

Kiter192

Hallo,

vielen Dank.

Ich habe noch etwas gebastelt:

define Mail_test notify VT_Quitt_Btn1.*virtActTrigRpt.* {my $dur = $EVENT;;$dur =~ s/-.*//;;$dur =~ s/.* //;;if ($dur > 5) {fhem "set dumy ein"}}

und so funktioniert es.

Wo liegt eigentlich der Unterschied zwischen = $EVENT und = "%" ??

Nochmals vielen Dank!!!

snoop

Hi,
hier mehr Infos zu $EVENT.
Gruß
Arthur