Langen Tastendruck bei HM-PBI-4-FM (Tasterschnittstelle 4fach) auswerten

Begonnen von Zorin, 13 Januar 2013, 23:50:01

Vorheriges Thema - Nächstes Thema

Zorin

Hallo allerseits,

ich habe inzwischen einige HM-PBI-4-FM im Einsatz. Ich würde nun gerne den langen Tastendruck auswerten.
Das Log sieht dann z.B. folgendermaßen aus:
2013-01-13_13:46:01 BZ.Schalter1 BZ.Schalter1.CH2 Long 2-8440- (to broadcast)
2013-01-13_13:46:02 BZ.Schalter1 battery: ok
2013-01-13_13:46:02 BZ.Schalter1 BZ.Schalter1.CH2 Long 3-8440- (to broadcast)
2013-01-13_13:46:02 BZ.Schalter1 battery: ok
2013-01-13_13:46:02 BZ.Schalter1 BZ.Schalter1.CH2 Long 4-8440- (to broadcast)
2013-01-13_13:46:02 BZ.Schalter1 battery: ok
2013-01-13_13:46:02 BZ.Schalter1 BZ.Schalter1.CH2 Long 5-8440- (to broadcast)
2013-01-13_13:46:02 BZ.Schalter1 battery: ok
2013-01-13_13:46:02 BZ.Schalter1 BZ.Schalter1.CH2 Long 6-8440- (to broadcast)
2013-01-13_13:46:03 BZ.Schalter1 battery: ok
2013-01-13_13:46:03 BZ.Schalter1 BZ.Schalter1.CH2 Long 7-8440- (to broadcast)

Wie kann ich den Long Tastendruck z.B. mit einem Notify auswerten ?

Vielen Dank für die Hilfe...

Grüße,

Zorin

PowerDiz

Hallo,
der Log sieht bei mir für kurze und lange Tastenbedienung so aus:

2013-01-12_16:45:53 Alarm_RC_3 Alarm_RC_3_Btn_01 Short (to HMLAN1)
2013-01-12_16:48:10 Alarm_RC_3 battery: ok
2013-01-12_16:48:10 Alarm_RC_3 Alarm_RC_3_Btn_01 Long 2-8440- (to HMLAN1)
2013-01-12_16:48:10 Alarm_RC_3 battery: ok
2013-01-12_16:48:10 Alarm_RC_3 Alarm_RC_3_Btn_01 Long 3-8440- (to HMLAN1)
2013-01-12_16:48:10 Alarm_RC_3 battery: ok
2013-01-12_16:48:10 Alarm_RC_3 Alarm_RC_3_Btn_01 Long 4-8440- (to HMLAN1)
2013-01-12_16:48:11 Alarm_RC_3 battery: ok
2013-01-12_16:48:11 Alarm_RC_3 Alarm_RC_3_Btn_01 Long 5-8440- (to HMLAN1)
2013-01-12_16:48:11 Alarm_RC_3 battery: ok
2013-01-12_16:48:11 Alarm_RC_3 Alarm_RC_3_Btn_01 LongRelease 6-A040- (to HMLAN1)

Ich werte so aus:
define Alarm_RC_3Btn_1_short notify Alarm_RC_3:Alarm_RC_3_Btn_01.* {if ("%"  =~ "Short") {AlarmanlageOn("RC3")}}
define Alarm_RC_3Btn_1_long notify Alarm_RC_3:Alarm_RC_3_Btn_01.* {if ("%"  =~ "LongRelease") {AlarmanlageOff("RC3")}}


Dabei verwende ich nur das release nach einem langen Tastenruck, weil ich keine anderen zwischen Ereignisse benötige.
Man könnte auch in deinem Fall auf die "8440" im String suchen, wenn Du mehrere Ereignisse benötigst.

Ich hoffe das hilft was weiter.

Gruß,
Dieter

Zorin

Hallo Dieter, alle,

vielen Dank, das hat mir die richtige Richtung gezeigt.
Da ich lieber "in FHEM" blieben wollte, sieht meine Lösung jetzt so aus:

define BZ.Schalter1.CH2-AllOff notify BZ.Schalter1:BZ.Schalter1.CH2.Long.* set LAMPE_1 off

Ich bekomme übrigens gar nicht den LongRelease im Log.
Ich vermute aber, das liegt daran, dass ich den Schalter nicht mit meinem HMLAN gepairt habe.

Grüße,

Zorin

snoop

Hallo zusammen,

zum Thema langen und kurzen Tastendruck würde ich mich gerne einklinken.
Ich habe auch ein Taster und eine Fernbedienung und würde gerne folgendes realisieren:

Bei einen kurzen Tastendruck, wobei nach diversen Tests meine Definition für "ein kurzer Tastendruck" wie folgt aussieht:
Ein Status zwischen: "Btn_01 Short und Btn_01 Long 3-8440"
Ein langer Tastendruck: Alles was über Btn_01 Long 3-8440 liegt.

Kann mich jemand bei der Umsetzung unterstützen. Meine erste Idee ist den Status zu splitten (falls erforderlich den wert in INT Wert konvertieren) und dann in etwa folgende Abfrage generieren:

Wenn short und Long kleiner/gleich 3 dann schalte Lampe1 on
Wenn nicht short und Long größer 3 dann schalte Lampe1,Lampe2,Lampe3;Lampe4 on

Bei mir scheitert es momentan daran, dass ich in Perl noch nicht so fit bin.

Vielen Dank für eure Rückmeldungen im Voraus.

Grüße
Arthur

snoop

Hallo zusammen,

also ich habe ein wenig experimentiert und das ist das Ergebnis:

Die Lösung für die o.g. Lösung könnte so aussehen:

.*Taster_4_1:Taster_4_1_Btn_01.* {my @@a = split(" ", $value{Taster_4_1});;if ($a[0] eq "Taster_4_1_Btn_01" && $a[1] eq "Long" && int($a[2])==3){fhem"set GA_Tor_Sw_1_01 on-for-timer 3"}}

Meine Frage ist, ist das vom Grundsatz ok?
Zweitens: bei dem o.g. code gibt es noch ein Problem.(Ich bin neu in FHEM unterwegs, seit bitte nicht streng mit mir.)
Nun zur Erklärung:
Wenn ich den Taster drücke, sendet er permanent ein Signal an die Zentrale, sobald "Long" und "Count=3" erreicht ist geht die Lampe an.
Wenn ich nun die Taste länger als 3 counts gedrückt halte geht die Lampe dennoch an -> was nicht gewollt ist.

Gibt es eine Möglichkeit dies script technisch abzufangen?
Danke.

Viele Grüße
Arthur

martinp876

Hallo Arthur
Zitat von: snoop schrieb am Mo, 14 Januar 2013 21:09Wenn ich nun die Taste länger als 3 counts gedrückt halte geht die Lampe dennoch an -> was nicht gewollt ist.

Gibt es eine Möglichkeit dies script technisch abzufangen?

denke schon. ist aber die Frage, was du willst - und es wird etwas kompliziert.
Du kannst ja auf 'Release' warten und nur schalten, wenn Release UND 3 im trigger steht.

Jetzt brauchst du also erst einmal Release, dass kommt nur, wenn dein remote-button mit einem Aktor gepeert ist (achtung Anfaengerfehler: pair ist nicht gleich peer! peers werden mit devicepair angelegt. hat nichts mit der Zentrale an sich zu tun).

Nachdem du aber nicht vor hast, deinen Aktor und den Button direkt zu peeren brauchst du also ein Plazebo. Hier wuerde  ich einen virtuellen Aktor nehmen, also eine FHEM-emulation.
Details zu den Befehlen im commandref nachlesen

1) anlegen eines Virtuellen Aktors
define va CUL_HM 200000
set va virtual 1
rename va_Btn1 vaAct1

2) peeren
set BZ.Schalter1.CH2 devicepair 0 vaAct1 single
=> config am BZ.Schalter1 ausloesen um die Kommandos abzuschicken

3) peering pruefen
set BZ.Schalter1 getconfig
=> config am BZ.Schalter1 ausloesen um die Kommandos abzuschicken
=> die readings peerList pruefen, das sollten die schalter eingebaut sein

===> jetzt sollte
- bei langem druecken ein 'release' kommen
- kein to broadcast sondern ein 'to vaAct1' kommen
- fhem den Trigger des BZ.Schalter quittieren
- ein pseudozustand des schalters in FHEM unter vaAct1 mitgefuehrt werden (readings...)

Nun sollte das parsen etwas einfacher sein, hoffe ich

Gruss
Martin




snoop

Hallo Martin,

danke für deine ausführliche Rückmeldung.
Ich denke, dass ich das vom Ansatz verstanden habe - Tests folgen.
Nein, richtig erkannt - möchte die Aktoren nicht an die Fernbedienung/Taster peeren - gut erkannt.

Eine Frage habe ich dazu: Mit welchen Einschränkungen - durch die Kaskade (nenne es einfach mal so) "virtueller Aktor" - muss ich rechnen.
Wie sieht es mit der Performance, von FHEM in verbindung mit HMLAN und FritzBox, aus?

Meine Idee ist es die 4 Tasten Fernbedienung mit möglichst vielen Funktionen auszustatten (soll natürlich noch nutzbar sein).
Das Vorhaben sieht wie folgt aus:

Btn1 (short/long aber nicht länger als 2/3 counts) = Fassadenbeleuchtung Strasse toggel
Btn2 (short/long aber nicht länger als 2/3 counts) = Fassadenbeleuchtung Eingang toggel
Btn3 (short/long aber nicht länger als 2/3 counts) = Fassadenbeleuchtung Terrasse toggel
Btn4 (short/long aber nicht länger als 2/3 counts) = Fassadenbeleuchtung Garten toggel

Btn1 (long länger als 2/3 counts) = Gesamte Fassadenbeleuchtung an
Btn2 (long länger als 2/3 counts) = Gesamte Fassadenbeleuchtung aus

Btn3 (long länger als 2/3 counts) = Fassadenbeleuchtung Terrasse an, Garagentor auf, Garagenbeleuchtung an
Btn4 (long länger als 2/3 counts) = Fassadenbeleuchtung Terrasse aus, Garagentor aus, Garagenbeleuchtung aus

Ich hoffe die Beschreibung hilft ein wenig bei der Einschätzung.

Vielen Dank.
Arthur

snoop

Hallo Martin,

ok, ich habe es getestet - das läuft soweit - jetzt habe ich aber das Thema, dass ich nicht weiss wann ein short_Release/long_Release erfolgt ist.

Mein Plan ist es zu definieren, dass nach 1-3 sek.(2/3Counts?) eine andere Aktion ausgeführt wird als bei einen Tastendruck unter den zuvor genannten Werten (also short und unter 1-3sek.(2/3Counts?).

P.S: Die Readings: state und virtActState verwirren mich auch - die Werte springen hin und her bei einem langen Tastendruck. Hatte gehofft, dass dieser bei "gedrückt" = on und beim loslassen "release" = off ist? Na,ja...

Danke
Viele Grüße
Arthur

martinp876

Hallo Arthur
Zitat von: snoop schrieb am Do, 17 Januar 2013 00:07jetzt habe ich aber das Thema, dass ich nicht weiss wann ein short_Release/long_Release erfolgt ist.
ein short-release gibt es nicht

ZitatMein Plan ist es zu definieren, dass nach 1-3 sek.(2/3Counts?) eine andere Aktion ausgeführt wird als bei einen Tastendruck unter den zuvor genannten Werten (also short und unter 1-3sek.(2/3Counts?).
Wiederholungen gibt es nur be long - klar.
die Wiederholrate ist einstellbar in der remote. Ich denke default ist 0,4sec. damit solltest du rechnen koennen.
Die Einstellungen kannst du auslesen und aendern - musst aber config druecken.
ZitatP.S: Die Readings: state und virtActState verwirren mich auch - die Werte springen hin und her bei einem langen Tastendruck. Hatte gehofft, dass dieser bei "gedrückt" = on und beim loslassen "release" = off ist? Na,ja...
Da hast du recht. War ein quick and dirty - ein bischen zu viel dirty vielleicht? Mal sehen - evtl werte ich nur den release fuer den Status aus.

Gruss
Martin

snoop

Hallo Martin,

hmmm "short_Release" gibt es nicht? Bei dem virtuellen Aktor scheinbar schon?! (Siehe Screenshot) ... aber egal.

In der Config steht das hier: RegL_00:02:01 0A:D4 0B:96 0C:B0 00:00 - ist das das richtige?

Irgendwie komme ich aber so nicht weiter, oder habe ich irgendeine Info übersehen?
Danke.

Viele Grüße
Arthur


snoop

Hmmmm überlege grade....

was ich machen könnte ist ein notify mit min. 3-5er sleep (sek.).
Ohhh je... :o(

martinp876

upps - mein Fehler. Werde ich entfernen (short_release) damit es synchron zu den remotes ist

Du hast nur die register aus liste 0 geszeigt. Interessant ist liste 1 - und evtl liste 4. Wo sind die?

Zur Lesbarkeit gibt es "get name reg all" und "get name regList" - hast du dies schon durchgesehen?

was passiert jetzt, wenn du die PBI mit deinem virtuellen Actor pairst und dann 3 sec drueckst? Die logs habe ich nicht gesehen - hast du welche? In der "release" Nachricht solltest du jeweils das loslassen des Buttons sehen und damit die Dauer. Mit longPress solltest du die Zeit einstellen koennen, die ein langer Tastendruck dauert - und damit auch die wiederholrate des long-press-trigger. Das ist ein Kanal-parameter als in der regList des Channel, nicht des Device!

Eigentlich sollte das alles in den kommandos erklaaert sein:
set getConfig
get regList
get reg all

Channel und device beachten - da ist dann alles drin
Channels sauber definieren, am besten nicht von hand sonder durch anlernen - und dem System ueberlassen.

Gruss
Martin

snoop

Hallo Martin,

scheinbar klappt das ganze nicht - habe schon einiges mit dem Bewegungsmelder gemacht - aber mit dem Taster und der Fernbedienung scheint das ganze nicht zu funktionieren.

Ich habe verstanden, dass man nach einem "getConfig" kurz die Anlerntaste betätigen soll (damit die Werte eingelesen werden). Bei "getConfig" sehe ich dass 9 cmds in der queue liegen - sobald ich die Anlerntaste kurz drücke sehe ich das die cmds abgearbeitet werden und der Status nach kurzer Zeit in "cmds done" steht, ich sehe jedoch nur reglist 0.
Habe auch schon ein reset durchgeführt und neu angelernt etc.

get regList ergibt folgendes?!?!
____________________________________
list:         register | range              | peer     | description
   0: intKeyVisib      |   0 to 1           |          | visibility of internal channel options:visib,invisib
   0: pairCentral      |   0 to 16777215    |          | pairing to central

get reg all ergibt folgendes:
____________________________________
CUL_HM_pushButton_1XXYYB:pushButton -
list:peer   register         :value
   0:         intKeyVisib      :invisib
   0:         pairCentral      :0xD496B0

:o(

Gruß
Arthur

snoop

Ach, ja channel 01 hat folgende Werte:

RegL_01:04:10 08:00 09:00 00:00

Gruß
Arthur

snoop

Hallo Martin,

kann es sein, dass der PBI und die HM-RC-4 von Readings noch nicht soweit implementiert sind wie z.B. der HM-SEC-MDIR?
Kann man das in Angriff nehmen - kann da gerne unterstützen.

Ich könnte natürlich auch versuchen was in RAW Modus zu konfigurieren mir fehlen dazu allerdings die Register bzw. kurz gesagt das KnowHow.

Viele Grüße
Arthur