Hallo zusammen,
Ich habe ein mysteriöses Problem mit einem HM-PB-6-WM55, welchen ich zur Steuerung eines Sonos Systems und des Lichts nutzen möchte, und zwar wird bei einem Notify auf eine Long Taste (die in der Mitte links) nichts ausgelöst. Hier zuerst die Raw Definition des Deives selber:
defmod HMTaster6 CUL_HM 4E991E
attr HMTaster6 IODev myHmUART
attr HMTaster6 autoReadReg 4_reqStatus
attr HMTaster6 expert 2_raw
attr HMTaster6 firmware 1.2
attr HMTaster6 model HM-PB-6-WM55
attr HMTaster6 room CUL_HM
attr HMTaster6 serialNr NEQ1001607
attr HMTaster6 subType remote
attr HMTaster6 webCmd getConfig:clear msgEvents
setstate HMTaster6 HMTaster66 Short
setstate HMTaster6 2017-01-29 18:20:08 .D-devInfo 060000
setstate HMTaster6 2017-01-29 18:20:08 .D-stc 40
setstate HMTaster6 2017-02-18 17:48:42 .protLastRcv 2017-02-18 17:48:42
setstate HMTaster6 2017-01-29 18:31:32 CommandAccepted yes
setstate HMTaster6 2017-01-29 18:20:08 D-firmware 1.2
setstate HMTaster6 2017-01-29 18:20:08 D-serialNr NEQ1001607
setstate HMTaster6 2017-02-17 20:26:59 PairedTo 0x31B3A1
setstate HMTaster6 2017-01-29 18:07:53 R-pairCentral 0x31B3A1
setstate HMTaster6 2017-02-17 20:26:59 RegL_00. 02:01 0A:31 0B:B3 0C:A1 18:00 00:00
setstate HMTaster6 2017-02-17 20:18:49 alive yes
setstate HMTaster6 2017-02-18 17:48:42 battery ok
setstate HMTaster6 2017-02-17 20:18:49 powerOn 2017-02-17 20:18:49
setstate HMTaster6 2017-02-17 20:18:49 recentStateType info
setstate HMTaster6 2017-02-18 17:48:42 state HMTaster66 Short
Die 6 Taster sind wie folgt benannt:
channel_01: HMTaster61
channel_02: HMTaster62
channel_03: HMTaster6ML
channel_04: HMTaster64
channel_05: HMTaster65
channel_06: HMTaster66
Dass der "HMTaster6ML" nicht ins Namenschema reinpasst kommt daher, dass ich den (weil er eben Probleme machte) zu Testzwecken umbenannte (ML = Mitte Links).
Hier die Notifies, nur mit je einem print drin (NB: ich habe bei den Long Regexe manchmal _1. mit drin und manchmal nicht, das hat nur auf das Repeat Verhalten einen Einfluss):
HMTaster61:Short.* {
printf("SNS Light Short\n");
}
HMTaster61:Long.* {
printf("SNS Light Long\n");
}
HMTaster62:Short.* {
printf("SNS Toggle\n");
}
HMTaster62:Long.1_.* {
printf("SNS Off\n");
}
HMTaster6ML:Short.* {
printf("SNS Prev Channel\n");
}
HMTaster6ML:Long.* {
printf("SNS Vol Down\n");
}
HMTaster64:Short.* {
printf("SNS Next Channel\n");
}
HMTaster64:Long.1_.* {
printf("SNS Vol Up\n");
}
HMTaster65:Short.* {
printf("SNS Prev Track\n");
}
HMTaster65:Long.1_.* {
printf("SNS Prev PL\n");
}
HMTaster66:Short.* {
printf("SNS Next track\n");
}
HMTaster66:Long.1_.* {
printf("SNS Next PL\n");
}
Wenn ich nun alle Tasten je kurz und long betätige, erhalte ich im Log File:
$ grep SNS fhem-2017-02.log
SNS Light Short
SNS Light Long
SNS Light Long
SNS Toggle
SNS Off
SNS Prev Channel
SNS Next Channel
SNS Vol Up
SNS Prev Track
SNS Prev PL
SNS Next track
SNS Next PL
(Dass "Light Long" wiederholt wird, kommt hier, weil die Taste länger gedrückt wurde und der Regex eben auf jeden reagiert)
Wie ihr seht - es fehlt "SNS Vol Down", also die Reaktion auf HMTaster6ML:Long.*. Interessanterweise klappt die auf HMTaster6ML:Short.*, was ja dieselbe Taste ist.
Das Logfile des devices zeigt aber, dass alle Signale eigentlich ankamen:
2017-02-18_18:09:38 HMTaster6 battery: ok
2017-02-18_18:09:38 HMTaster6 CMDs_done
2017-02-18_18:09:38 HMTaster6 HMTaster61 Short
2017-02-18_18:09:40 HMTaster6 battery: ok
2017-02-18_18:09:40 HMTaster6 HMTaster61 Long
2017-02-18_18:09:40 HMTaster6 battery: ok
2017-02-18_18:09:40 HMTaster6 CMDs_done
2017-02-18_18:09:40 HMTaster6 HMTaster61 LongRelease
2017-02-18_18:09:42 HMTaster6 battery: ok
2017-02-18_18:09:42 HMTaster6 CMDs_done
2017-02-18_18:09:42 HMTaster6 HMTaster62 Short
2017-02-18_18:09:44 HMTaster6 battery: ok
2017-02-18_18:09:44 HMTaster6 HMTaster62 Long
2017-02-18_18:09:44 HMTaster6 battery: ok
2017-02-18_18:09:44 HMTaster6 HMTaster62 Long
2017-02-18_18:09:44 HMTaster6 battery: ok
2017-02-18_18:09:44 HMTaster6 HMTaster62 Long
2017-02-18_18:09:44 HMTaster6 battery: ok
2017-02-18_18:09:44 HMTaster6 CMDs_done
2017-02-18_18:09:44 HMTaster6 HMTaster62 LongRelease
2017-02-18_18:09:46 HMTaster6 battery: ok
2017-02-18_18:09:46 HMTaster6 CMDs_done
2017-02-18_18:09:46 HMTaster6 HMTaster6ML Short
2017-02-18_18:09:48 HMTaster6 battery: ok
2017-02-18_18:09:48 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:48 HMTaster6 battery: ok
2017-02-18_18:09:48 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:48 HMTaster6 battery: ok
2017-02-18_18:09:48 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:49 HMTaster6 battery: ok
2017-02-18_18:09:49 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:49 HMTaster6 battery: ok
2017-02-18_18:09:49 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:49 HMTaster6 battery: ok
2017-02-18_18:09:49 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:49 HMTaster6 battery: ok
2017-02-18_18:09:49 HMTaster6 CMDs_done
2017-02-18_18:09:49 HMTaster6 HMTaster6ML LongRelease
2017-02-18_18:09:51 HMTaster6 battery: ok
2017-02-18_18:09:51 HMTaster6 CMDs_done
2017-02-18_18:09:51 HMTaster6 HMTaster64 Short
2017-02-18_18:09:53 HMTaster6 battery: ok
2017-02-18_18:09:53 HMTaster6 HMTaster64 Long
2017-02-18_18:09:53 HMTaster6 battery: ok
2017-02-18_18:09:53 HMTaster6 HMTaster64 Long
2017-02-18_18:09:53 HMTaster6 battery: ok
2017-02-18_18:09:53 HMTaster6 HMTaster64 Long
2017-02-18_18:09:53 HMTaster6 battery: ok
2017-02-18_18:09:53 HMTaster6 CMDs_done
2017-02-18_18:09:53 HMTaster6 HMTaster64 LongRelease
2017-02-18_18:09:55 HMTaster6 battery: ok
2017-02-18_18:09:55 HMTaster6 CMDs_done
2017-02-18_18:09:55 HMTaster6 HMTaster65 Short
2017-02-18_18:09:56 HMTaster6 battery: ok
2017-02-18_18:09:56 HMTaster6 HMTaster65 Long
2017-02-18_18:09:56 HMTaster6 battery: ok
2017-02-18_18:09:56 HMTaster6 HMTaster65 Long
2017-02-18_18:09:56 HMTaster6 battery: ok
2017-02-18_18:09:56 HMTaster6 HMTaster65 Long
2017-02-18_18:09:57 HMTaster6 battery: ok
2017-02-18_18:09:57 HMTaster6 CMDs_done
2017-02-18_18:09:57 HMTaster6 HMTaster65 LongRelease
2017-02-18_18:09:58 HMTaster6 battery: ok
2017-02-18_18:09:58 HMTaster6 CMDs_done
2017-02-18_18:09:58 HMTaster6 HMTaster66 Short
2017-02-18_18:09:59 HMTaster6 battery: ok
2017-02-18_18:09:59 HMTaster6 HMTaster66 Long
2017-02-18_18:10:00 HMTaster6 battery: ok
2017-02-18_18:10:00 HMTaster6 HMTaster66 Long
2017-02-18_18:10:00 HMTaster6 battery: ok
2017-02-18_18:10:00 HMTaster6 HMTaster66 Long
2017-02-18_18:10:00 HMTaster6 battery: ok
2017-02-18_18:10:00 HMTaster6 CMDs_done
2017-02-18_18:10:00 HMTaster6 HMTaster66 LongRelease
Das müsste das Notify doch anprechen? Ein Gerätedefekt schient mir auch ausgeschlosssen... übersehe ich etwas?
Die Tasten sind übrigens noch alle mit einem vccu gepeert, damit die LEDs grün werden (was auch klappt). hm configCheck hab ich auch durchgeführt, der sieht auch kein Problem.
Zur Not kann ich natürlich die fragliche Taste fürs Licht nutzen und direkt peeren, dann brauche ich dort kein Notify.... aber ich hätte eigentlich gerne eine Erklärung für das komische Verhalten...
Danke und Grüsse,
Andreas
PS: Hier noch ein grep aufs config, um sicherzustellen, dass kein anderes Notify zwischenfunkt:
$ grep notify ../fhem.cfg | grep HMTaster6
define SonosNextTrack notify HMTaster66:Short.* {\
define SonosPrevTrack notify HMTaster65:Short.* {\
define SonosVolDown notify HMTaster6ML:Long.* {\
define SonosVolUp notify HMTaster64:Long.1_.* {\
define SonosToggle notify HMTaster62:Short.* {\
define SonosOff notify HMTaster62:Long.1_.* {\
define BZ_LightShort notify HMTaster61:Short.* {\
define BZ_LightLong notify HMTaster61:Long.* {\
define SonosPrevChannel notify HMTaster6ML:Short.* {\
define SonosNextChannel notify HMTaster64:Short.* {\
define SonosPrevPlaylist notify HMTaster65:Long.1_.* {\
define SonosNextPlaylist notify HMTaster66:Long.1_.* {\
Hmm komische Sache... ich konnte es an sich lösen, indem ich einen neuen Notify definierte... im config hab ich nun:
define SonosVolDown notify HMTaster6ML:Long.* {\ 0
printf("SNS Vol Down\n");;\
return;;\
fhem("set Sonos_Bad VolumeD");;\
}
attr SonosVolDown room Badzimmer,Sonos
...
define HMTasterDebug notify HMTaster6ML:Long.* {\
printf("SNS Vol Down 2\n");;\
return;;\
fhem("set Sonos_Bad VolumeD");;\
}
attr HMTasterDebug room Badzimmer
Eigentlich identisch oder? Trotzdem sehe ich im Log nur den neuen Notify:
SNS Vol Down 2
SNS Vol Down 2
SNS Vol Down 2
SNS Vol Down 2
SNS Vol Down 2
SNS Vol Down 2
Naja, werde halt den ersten Notify löschen und den zweiten benutzen.... aber irgendwie schon komisch.
Raw Definitions sind auch identisch (bis auf das "active", das sollte aber kaum was ausmachen, oder? Ist glaub ich bei jedem neuen, noch nie getriggerten Event so):
defmod SonosVolDown notify HMTaster6ML:Long.* {\
printf("SNS Vol Down\n");;\
return;;\
fhem("set Sonos_Bad VolumeD");;\
}
attr SonosVolDown room Badzimmer,Sonos
setstate SonosVolDown active
setstate SonosVolDown 2017-02-18 17:47:19 state active
und
defmod HMTasterDebug notify HMTaster6ML:Long.* {\
printf("SNS Vol Down 2\n");;\
return;;\
fhem("set Sonos_Bad VolumeD");;\
}
attr HMTasterDebug room Badzimmer
setstate HMTasterDebug 2017-02-18 20:07:18
setstate HMTasterDebug 2017-02-18 20:06:35 state active
PS: Nach Löschen des alten und Umbenennen des neuen Events klappt jetzt alles... aber erklären kann ich mir das trotzdem nicht. Ich habe mir noch ein Backup vorher angelegt, falls es da noch was zu testen gäbe
Das Log ist uninteressant. Entscheidend ist was als Event gesendet wird. Also öffne den Eventmonitor und schaue was als tatsächlicher Event an kommt.
Hat er doch
2017-02-18_18:09:48 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:48 HMTaster6 battery: ok
2017-02-18_18:09:48 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:49 HMTaster6 battery: ok
2017-02-18_18:09:49 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:49 HMTaster6 battery: ok
2017-02-18_18:09:49 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:49 HMTaster6 battery: ok
2017-02-18_18:09:49 HMTaster6 HMTaster6ML Long
2017-02-18_18:09:49 HMTaster6 battery: ok
2017-02-18_18:09:49 HMTaster6 CMDs_done
2017-02-18_18:09:49 HMTaster6 HMTaster6ML LongRelease
Hab ich zuerst allerdings auch überlesen in dem ganzen Codewust.
Meine Vermutung, eventuell ist ein Problem in der Anweisung vor dem 'define SonosVolDown...'. Das notify selbst sieh für mich OK aus.
OK ich glaube ich habe das Problem gefunden, habe mir das alte fhem.cfg mal mit hexdump angeschaut:
00000040 69 66 79 20 48 4d 54 61 73 74 65 72 36 4d 4c 3a |ify HMTaster6ML:|
00000050 4c 6f 6e 67 2e 2a c2 a0 20 7b 5c 0a 20 20 70 72 |Long.*.. {\. pr|
Da hat sich wohl irgendwie hinters "Long.*" ein zusätzliches 0xc2 Zeichen eingeschlichen, was im Web Frontend unsichtbar war... keine Ahnung, wie das da hinkam, eventuell ein Unicode Problem oder sowas. Fiese Sache... Aber Hauptsache, es klapt jetzt.
Das ist ja mal ein interessantes Problem. Dr. Google deutet, wie du schon sagst, auf ein Unicode Problem hin. Vielleicht wolltest du nach dem Long auch nur noch irgendeine Zahl eingeben und warst geichzeitig auf der ALT Taste
ALT + 0194 -> Â (194, 0xc2, extended ASCII) ;D
Allerdings sehe ich dann das "circumflexte" A in meinem Editor und auch, wenn ich den integrierten Editor von FHEM nehmen.
Das ist in der Tat eine interessanter Fehler. Mal so gefragt, wird hier die cfg von Hand editiert oder machst du das über DEF?