Ich nutze ein Modul, dessen Autoren nicht mehr im Forum aktiv sind (Flic-Button). Mit dem Modul kann man Flic-Button drücken und in FHEM etwas auslösen. Der Button läuft über bluetooth und Port 5551. Die Buttons werden in FHEM automatisch erkannt, aber lösen (anscheinend) kein event aus - und das ist mein Problem. Wieso tun sie das nicht?
Flic läuft über das FLICSERV-Modul. Damit werden die Buttons angemeldet. Sie erscheinen dann wie folgt
defmod FLIC_a64370dae480 FLIC a64370dae480 a64370da # diverse Bluetooth-Adressen etc
attr FLIC_a64370dae480 IODev FlicServer #damit kommuniziert der Button
setstate FLIC_a64370dae480 off # diesen state will ich abfragen
setstate FLIC_a64370dae480 2017-04-29 12:42:32 BluetoothAddress 80:e4:da:70:43:a6
setstate FLIC_a64370dae480 2017-04-29 12:42:32 UUID a0192351-2d0d-0037-b039-ca31eda19595
setstate FLIC_a64370dae480 2017-04-29 22:49:52 clicktype click
setstate FLIC_a64370dae480 2017-04-29 22:49:57 connection disconnected
setstate FLIC_a64370dae480 2017-04-29 22:49:52 state off
Im Modul selber wird beim klicken ein Event ausgelöst, was man am Code erkennt
if ($opcode == 7) { # ButtonSingleOrDoubleClickOrHold
readingsBeginUpdate($hash);
if ($status == 3) {
readingsBulkUpdate($hash, "clicktype", "click", 1);
} elsif ($status == 4) {
readingsBulkUpdate($hash, "clicktype", "doubleclick", 1);
} elsif ($status == 5) {
readingsBulkUpdate($hash, "clicktype", "hold", 1);
}
readingsEndUpdate($hash, 1);
Die genannten Einträge erscheinen auch im Logilfe des Buttons, siehe hier
2017-04-29_22:49:52 FLIC_a64370dae480 connection: connected
2017-04-29_22:49:52 FLIC_a64370dae480 on
2017-04-29_22:49:52 FLIC_a64370dae480 off
2017-04-29_22:49:52 FLIC_a64370dae480 clicktype: click
2017-04-29_22:49:57 FLIC_a64370dae480 connection: disconnected
Es ist aber leider so, dass weder im Event-Monitor ein Event sichtbar ist noch mit einem notify ein Event abgefangen werden kann, also so etwas hier reagiert gar nicht:
defmod AllesAus notify FLIC_a64370dae480:state:.on set Steckdose_A on
setstate AllesAus active
setstate AllesAus 2017-04-29 22:49:44 state active
Die Steckdose schaltet nicht. Weiß jemand, wieso?
PS In der Datei eventtypes.txt erscheint der Flic-Server, nicht aber die Buttons Flic_a_usw.
Gesendet von iPad mit Tapatalk Pro
readingsBulkUpdate($hash, "clicktype", "click", 1);
Nimm mal an jeder Stelle mit readingsBulkUpdate die 1 hinten weg und das Komma vor der 1
readingsBulkUpdate($hash, "clicktype", "click");
So sollte es gehen.
Danke für die Hilfe!
Habe ich gemacht, hat aber nichts geändert (auch nach Neustart von FHEM; die API sagt aber, dass die 1 da hinten eigentlich in Ordnung sei: https://wiki.fhem.de/wiki/DevelopmentModuleAPI#readingsBulkUpdate). Es scheint so, dass diese Readings kein Event auslösen. Dabei wird die Datei FLIC.pm eindeutig geladen, sonst würde ja der FLIC-Type nicht erkannt.
Wie kann ich Schritt für Schritt nachvollziehen, wo das Event "geschluckt" wird?
Ich habe jetzt mal brute-force-mäßig attr FlicButton event-on-update-reading .* gesetzt und auf einmal taucht in der Log auf
2017.04.30 09:48:54 3: FlicServer: Unknown code 010000000b0004a643, help me!
2017.04.30 09:48:54 3: FlicServer: Unknown code 70da0101000000000b, help me!
2017.04.30 09:48:54 3: FlicServer: Unknown code 0005a64370da020100, help me!
2017.04.30 09:48:54 3: FlicServer: Unknown code 0000000b0006a64370, help me!
2017.04.30 09:48:54 3: FlicServer: Unknown code da0301000000000b00, help me!
2017.04.30 09:48:54 3: FlicServer: Unknown code 07a64370da03010000, help me!
Entferne ich event-on-update-reading, verschwinden die Logeinträge.
Heißt das, dass der Fehler nicht in FLIC.pm, sondern in FLICSERVER.pm zu suchen ist?!
Zitat von: andies am 30 April 2017, 09:54:22
Wie kann ich Schritt für Schritt nachvollziehen, wo das Event "geschluckt" wird?
https://perldoc.perl.org/perldebug.html
SCNR
Mit "Logfile des Buttons" meinst Du damit ein FileLog oder irgendwas anderes?
Ich gehe mal von FileLog aus.
Das ganze ist eigentlich ein bisschen seltsam, da ja FileLogs auch per Event geschrieben werden. Also eigentlich müsste es eher im Event monitor auftauchen und nicht im FileLog als umgekehrt.
Ich hätte mir ggf. auch mal den Rest des Codings angesehen, aber das Modul scheint nicht in der normalen FHEM-Auslieferung zu sein. Wo ist es denn her? ...oder Du hängst halt die beiden Dateien mal hier dran.
Seltsamkeiten bei Readings und Events konnte ich in "meinem" Modul dadurch lösen, dass ich die Reading-updates per InternalTimer "asynchron" mache. Dafür müsste man aber wie gesagt mal ein bisschen mehr sehen.
Gruß,
Thorsten
Die beiden Module sind aus dem Forum, https://forum.fhem.de/index.php/topic,58450.msg517990.html#msg517990
Ich habe aber gesehen, dass es ein paar Einträge höher einen anderen (auch nicht mehr aktiven) Autor gibt, der ein eigenes Modul geschrieben hat. Das habe ich jetzt ausprobiert und es klappt out-of-the-box. Dann lasse ich das mit dem aufwendigen debuggen und das sieht ja nach einigem Aufwand aus; ich muss nur einen einzigen Knopf anlernen und der soll bloß die Rollos hochfahren, fertig.
Danke trotzdem für Eure Mühe!