Ausgabe beim Long-Befehl wurde zum Unterstrich (vorher Bindestrich)

Begonnen von Dr. Smag, 04 April 2015, 23:12:58

Vorheriges Thema - Nächstes Thema

Merlin1

Ich habe dann solche Ereignisse darauf, die gehen dann nach dem letzten Update nicht mehr...

define Licht_Kueche_FARB1 DOIF ([Taster2_Btn_01:state] =~ /Long.1-.*/)  (set LED2 RGB 0080ff)
define Licht_Kueche_FARB2 DOIF ([Taster2_Btn_01:state] =~ /Long.5-.*/)  (set LED2 RGB ff4800)
define Licht_Kueche_FARB3 DOIF ([Taster2_Btn_01:state] =~ /Long.10-.*/)  (set LED2 RGB ff004b)
define Licht_Kueche_FARB4 DOIF ([Taster2_Btn_01:state] =~ /Long.15-.*/)  (set LED2 RGB 0000ff)
define Licht_Kueche_FARB5 DOIF ([Taster2_Btn_01:state] =~ /Long.20-.*/)  (set LED2 RGB ff0000)
define Licht_Kueche_FARB6 DOIF ([Taster2_Btn_01:state] =~ /Long.25-.*/)  (set LED2 RGB 00ff00)


martinp876

mit doif habe ich mich noch nicht beschäftigt. Es kommen mir Performance-bedenken - nicht bei deiner Implementierung, aber wenn ich das im großen Stil nutzen will. Ausserdem ist mir nicht klar, warum du nicht doelsif nutzt. Beleibt zu hoffen, das die Implementierung hier inteligent arbeitet. Notify hat - wenn man es richtig einsetzt - performanceaspekte beachtet.

Aber das ist nicht das Thema. In deinem Trace sehe ich trigger des Device
Zitat2015-04-06_20:55:57 Taster2 Taster2_Btn_01 Long
nicht aber des Buttons. Der sollte auch kommen - tut es so bei mir. was hast du gefiltert? Es müsste ein
2015-04-06_20:55:57 Taster2_Btn_01 Long 2_3
2015-04-06_20:55:xx Taster2_Btn_01 Long 3_3
...
kommen - das ist dein trigger, nicht das Device.
mit "_" sollte es klappen - klar.

Zitatdefine Licht_Kueche_FARB1 DOIF ([Taster2_Btn_01:state] =~ /Long.1_.*/)  (set LED2 RGB 0080ff)
define Licht_Kueche_FARB2 DOIF ([Taster2_Btn_01:state] =~ /Long.5_.*/)  (set LED2 RGB ff4800)
define Licht_Kueche_FARB3 DOIF ([Taster2_Btn_01:state] =~ /Long.10_.*/)  (set LED2 RGB ff004b)
define Licht_Kueche_FARB4 DOIF ([Taster2_Btn_01:state] =~ /Long.15_.*/)  (set LED2 RGB 0000ff)
define Licht_Kueche_FARB5 DOIF ([Taster2_Btn_01:state] =~ /Long.20_.*/)  (set LED2 RGB ff0000)
define Licht_Kueche_FARB6 DOIF ([Taster2_Btn_01:state] =~ /Long.25_.*/)  (set LED2 RGB 00ff00)

Ich hätte es wohl so gebaut

define x notify Taster2_Btn_01.Long.*  {my ($a,$b) = $EVENT =~ m/(\d+).(\d+)/;;\
   if($a == 1) {fhem "set LED2 RGB 0080ff"}\
   if($a == 5) {fhem "set LED2 RGB ff4800"}\
   if($a ==10) {fhem "set LED2 RGB ff004b"}\
   if($a ==15) {fhem "set LED2 RGB 0000ff"}\
   if($a ==20) {fhem "set LED2 RGB ff0000"}\
   if($a ==25) {fhem "set LED2 RGB 00ff00"}}

den 2. Wert $b brauchst du nicht...
der Unterschied von 1 nach 5 ist nicht symetrisch - du könntest also auch
define x notify Taster2_Btn_01.Long.*  {my ($a,$b) = $EVENT =~ m/(\d+).(\d+)/;\
  if($a%5 == 1){$a=int($a/5);;\
   if($a ==0) {fhem "set LED2 RGB 0080ff"}\
   if($a ==1) {fhem "set LED2 RGB ff4800"}\
   if($a ==2) {fhem "set LED2 RGB ff004b"}\
   if($a ==3) {fhem "set LED2 RGB 0000ff"}\
   if($a ==4) {fhem "set LED2 RGB ff0000"}\
   if($a ==5) {fhem "set LED2 RGB 00ff00"}}}


Nebenbei: Du hast event-on-change-reading nicht gesetzt. Absicht?




Jaydee

Ich mag mich vertun, aber kann es sein, dass früher immer bei den Events immer noch das Device vor den Buttons stand?

Also so etwas wie:

Zitat2015-04-20 23:53:59 CUL_HM 6erTaster01 6erTaster01_Btn1 Long
2015-04-20 23:53:59 CUL_HM 6erTaster01 6erTaster01_Btn1 Long 5_98 (to VirtuellerAktor)
2015-04-20 23:53:59 CUL_HM 6erTaster01 6erTaster01_Btn1 trigger: Long_98
2015-04-20 23:53:59 CUL_HM 6erTaster01 6erTaster01_Btn1 trigger_cnt: 98
2015-04-20 23:53:59 CUL_HM 6erTaster01 battery: ok

statt dem jetzigen:
Zitat2015-04-20 23:53:59 CUL_HM 6erTaster01 6erTaster01_Btn1 Long
2015-04-20 23:53:59 CUL_HM 6erTaster01_Btn1 Long 5_98 (to VirtuellerAktor)
2015-04-20 23:53:59 CUL_HM 6erTaster01_Btn1 trigger: Long_98
2015-04-20 23:53:59 CUL_HM 6erTaster01_Btn1 trigger_cnt: 98
2015-04-20 23:53:59 CUL_HM 6erTaster01 battery: ok


Das fett gedruckte fehlt ja jetzt. Daher sind auch alle meine EVTPARTS plötzlich im eimer, weil sie natuerlich völlig falsche Sachen beinhalten.

   if($EVTPART0 eq "6erTaster01_Btn1"){
      if($EVTPART1 eq "Short"){fhem("set HUEDevice4 toggle");}
      if($EVTPART1 eq "Long"){
         if($EVTPART2 eq "1_.*"){fhem("set LED_Treppe toggle");}
      }
   }


Und auch mein FileLog  sieht aus wie das was Merlin1 gepostet hat. Da nicht mehr das Device vorangestellt wird, landet natuerlich immer nur die erste Zeile des obigen Beispiels im log und damit auch nicht mehr die Long-Counter.


martinp876

korrekt. Der Triggerzähler müssen beim Button stehen, sonst sind sie nicht in den Readings sichtbar.
Das Device zeigt den Letzten Trigger an - eigentlich auch nicht konform - aber wohl ok.
Du kannst dir natürlich alle events dr Kanäle in das Device schreiben.

Wobei dein notify funktionieren sollte

2015-04-20 23:53:59 CUL_HM 6erTaster01 6erTaster01_Btn1 Long

gibt es doch noch.

Hermann123

Hallo,

ich habe Probleme mit den Meldungen eines HM-RC-P1 und dem damit verbundenen event.

Seit ein paar Wochen haben sich die beim Tastendruck übertragenen Daten geändert!

Als Rückmeldung bei gedrückter Taste kam immer "Btn1 offLong x-nnnn-"
X waren die Sekunden die der Taster gedrückt gehalten wurde und den habe ich genutzt um nach z.B. 5 Sekunden ein Event zu triggern.

Bis zum 12.03.2015 sah das LOG des Senders immer so aus.

2015-03-12_16:37:22 HM_Notruf_1 trigger_cnt: 23
2015-03-12_16:37:22 HM_Notruf_1 trigger: Long_23
2015-03-12_16:37:22 HM_Notruf_1 battery: ok
2015-03-12_16:37:22 HM_Notruf_1 Btn1 offLong 1-8440- (to broadcast)
2015-03-12_16:37:23 HM_Notruf_1 trigger_cnt: 23
2015-03-12_16:37:23 HM_Notruf_1 trigger: Long_23
2015-03-12_16:37:23 HM_Notruf_1 battery: ok
2015-03-12_16:37:23 HM_Notruf_1 Btn1 offLong 2-8440- (to broadcast)
2015-03-12_16:37:23 HM_Notruf_1 trigger_cnt: 23
2015-03-12_16:37:23 HM_Notruf_1 trigger: Long_23
2015-03-12_16:37:23 HM_Notruf_1 battery: ok
2015-03-12_16:37:23 HM_Notruf_1 Btn1 offLong 3-8440- (to broadcast)


Jetzt fehlt die Zeile mit "offLong" komplett
Bei kurzen Tastendruck erscheint jetzt "Btn1 Short" und bei langem nur noch "Btn65 Long" und einen counter für jeden Tastendruck.

2015-04-12_12:43:59 HM_Notruf_1 battery: ok
2015-04-12_12:43:59 HM_Notruf_1 Btn65 Long
2015-04-12_12:43:59 HM_Notruf_1 trigger: Long_25
2015-04-12_12:43:59 HM_Notruf_1 trigger_cnt: 25
2015-04-12_12:44:00 HM_Notruf_1 battery: ok
2015-04-12_12:44:00 HM_Notruf_1 Btn65 Long
2015-04-12_12:44:00 HM_Notruf_1 trigger: Long_25
2015-04-12_12:44:00 HM_Notruf_1 trigger_cnt: 25


So sieht die Definition aus:

define HM_Notruf_1 CUL_HM 1DED7F
attr HM_Notruf_1 IODev HMLAN1
attr HM_Notruf_1 autoReadReg 4_reqStatus
attr HM_Notruf_1 expert 2_full
attr HM_Notruf_1 firmware 1.3
attr HM_Notruf_1 model HM-RC-P1
attr HM_Notruf_1 peerIDs 00000000,
attr HM_Notruf_1 room CUL_HM
attr HM_Notruf_1 serialNr JEQ0648279
attr HM_Notruf_1 subType remote
define FileLog_HM_Notruf_1 FileLog ./log/HM_Notruf_1-%Y.log HM_Notruf_1
attr FileLog_HM_Notruf_1 logtype text
attr FileLog_HM_Notruf_1 room CUL_HM


define EV_RC1 notify HM_Notruf_1.Btn1.offLong.5\-.* { myFBCallr(......) }


Was muss ich umbauen um ein Event zu bekommen / auszulösen wenn die Taste z.B. 5 Sekunden gedrückt wird?

Vielen Dank schonmal
Hermann
RPi 4 mit HM-CFG-LAN und 30+  HM Komponenten.

martinp876


Hermann123

@martin

sorry, helf mir mal mit Deiner Frage...so tief bin ich wohl noch nicht im Thema  ;)

Alle Infos die ich habe bzw kenne sind in der Nachricht aufgelistet.....

RPi 4 mit HM-CFG-LAN und 30+  HM Komponenten.

martinp876

zum ersten rate ich wie immer dazu, duplicate trigger zu unterdrücken
attr HM_Notruf_1  event-on-change-reading .*

oder eigentlich - das führe ich in jedem restart im post-init-config aus
attr TYPE=CUL_HM                                           event-on-change-reading .*


HM_Notruf_1 Btn65 Long
das Device ist HM_Notruf_1, der Channel(Button) Btn65
Es sollte also auch trigger vom Button 65 geben - oder hast du die Kanäle nicht angelegt?
Ja, so muss es wohl sein.

Beheben werde ich den falschen Buttonnamen:
HM_Notruf_1 Btn65 Long
wird zu
HM_Notruf_1 Btn1 Long

Wenn du die Buttons alle anlegt, also ein
define HM_Notruf_1_Btn1  CUL_HM <hmId>01

werden auch die Trigger der Kanäle kommen:
HM_Notruf_1_Btn1 Long 16_16 (to xxx)
...

sowie
HM_Notruf_1_Btn1 Long 1_16 (to xxx)
HM_Notruf_1_Btn1 trigger: Long_16

wenn dann alle Buttons definiert sind
define HM_Notruf_1_Btn1  CUL_HM <hmId>01
define HM_Notruf_1_Btn2  CUL_HM <hmId>02
define HM_Notruf_1_Btn3  CUL_HM <hmId>03
...
sollte
define EV_RC1 notify HM_Notruf_1.Btn..Long.5\-.* { myFBCallr(......) }
beim 5. Trigger eines jeden Buttons auslösen
oder
define EV_RC1 notify HM_Notruf_1.Btn1.Long.5\-.* { myFBCallr(......) }
nur bei Button 1


Hermann123

Das Define für den Button war die Lösung...

define HM_Notruf_1_Btn1  CUL_HM <hmId>01

Damit kommen jetzt die Infos wie lange die Taste gedrückt wird.

2015-04-27_11:42:24 HM_Notruf_1_Btn1 Long 5_240 (to broadcast)


Hast Du ne Idee warum das Verhalten ab Zeitpunkt x sich so verändert hat? Es hat lange so funktioniert wie in meiner Anfrage geschrieben.
Dieses zusätzliche define war vorher nicht erforderlich. Und die Meldung sah auch anders aus.

Interessiert mich nur, weil ich sonst alle meine Feature und Devices durchtesten muss :-((

Auf jeden Fall many thanks für die Hilfe!!!

Hermann
RPi 4 mit HM-CFG-LAN und 30+  HM Komponenten.

martinp876

Das betrifft nur taster mit mehreren buttons. Wie oben beschrieben ist der code aufgeraeumt worden. Das haette ich schon lange machen sollen, gleich zu anfang. Sorry, dass es so spaet war.
Der code war eine seltsame variation des ueblichen. On und off waren irrefuehrend.
Will man alles in einer entity sehen, kann man das mit userreadings jederzeit tun