linux usb hid input modul

Begonnen von justme1968, 13 April 2015, 23:00:21

Vorheriges Thema - Nächstes Thema

justme1968

ich habe an dem modus nichts weiter gemacht, es scheint auch bis jetzt nicht viele anwender zu geben :)

siehst du mit verbose 5 für press und release irgendwelche unterscheide?

ein event für disconnect kann ich einbauen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Schlimbo

Hier das Log mit Verbose 5 bei Betätigen der "UP" Taste (code:544):
2019.01.06 14:39:56.521 5: type:3 code:4 value:127
2019.01.06 14:39:56.522 5: type:0 code:0 value:0
2019.01.06 14:39:56.602 5: type:3 code:0 value:126
2019.01.06 14:39:56.603 5: type:0 code:0 value:0
2019.01.06 14:39:56.611 5: type:4 code:4 value:589829
2019.01.06 14:39:56.611 4: type:4 code:4 value:589829
2019.01.06 14:39:56.611 4:  (KEY_3)
2019.01.06 14:39:56.638 5: type:1 code:544 value:1
2019.01.06 14:39:56.639 4: type:1 code:544 value:1
2019.01.06 14:39:56.660 5: type:3 code:0 value:125
2019.01.06 14:39:56.661 5: type:3 code:1 value:127
2019.01.06 14:39:56.663 5: type:0 code:0 value:0
2019.01.06 14:39:56.663 5: type:3 code:0 value:126
2019.01.06 14:39:56.664 5: type:0 code:0 value:0
2019.01.06 14:39:56.665 5: type:3 code:0 value:125
2019.01.06 14:39:56.666 5: type:3 code:1 value:128
2019.01.06 14:39:56.667 5: type:0 code:0 value:0
2019.01.06 14:39:56.668 5: type:3 code:1 value:127
2019.01.06 14:39:56.669 5: type:0 code:0 value:0
2019.01.06 14:39:56.670 5: type:3 code:1 value:128
2019.01.06 14:39:56.671 5: type:0 code:0 value:0
2019.01.06 14:39:56.714 5: type:3 code:0 value:126
2019.01.06 14:39:56.715 5: type:0 code:0 value:0
2019.01.06 14:39:56.746 5: type:3 code:1 value:127
2019.01.06 14:39:56.747 5: type:3 code:4 value:128
2019.01.06 14:39:56.747 5: type:0 code:0 value:0
2019.01.06 14:39:56.760 5: type:3 code:0 value:125
2019.01.06 14:39:56.761 5: type:0 code:0 value:0
2019.01.06 14:39:56.767 5: type:3 code:4 value:127
2019.01.06 14:39:56.768 5: type:0 code:0 value:0
2019.01.06 14:39:56.781 5: type:3 code:1 value:128
2019.01.06 14:39:56.782 5: type:0 code:0 value:0
2019.01.06 14:39:56.790 5: type:3 code:1 value:127
2019.01.06 14:39:56.791 5: type:0 code:0 value:0
2019.01.06 14:39:56.804 5: type:3 code:1 value:128
2019.01.06 14:39:56.805 5: type:0 code:0 value:0
2019.01.06 14:39:56.813 5: type:3 code:0 value:126
2019.01.06 14:39:56.814 5: type:0 code:0 value:0
2019.01.06 14:39:56.827 5: type:3 code:0 value:125
2019.01.06 14:39:56.827 5: type:0 code:0 value:0
2019.01.06 14:39:56.849 5: type:4 code:4 value:589829
2019.01.06 14:39:56.850 4: type:4 code:4 value:589829
2019.01.06 14:39:56.850 4:  (KEY_3)
2019.01.06 14:39:56.870 5: type:1 code:544 value:0
2019.01.06 14:39:56.871 5: type:3 code:0 value:126
2019.01.06 14:39:56.872 5: type:3 code:4 value:128
2019.01.06 14:39:56.873 5: type:0 code:0 value:0
2019.01.06 14:39:56.873 5: type:3 code:4 value:127
2019.01.06 14:39:56.874 5: type:0 code:0 value:0
2019.01.06 14:39:56.875 5: type:3 code:4 value:128
2019.01.06 14:39:56.875 5: type:0 code:0 value:0

Sieht so aus als ist der Status bei type 1 im "value" enthalten.
Die Zeilen für type 0 und 3 erschließen sich mir noch nicht.
Und was bedeutet das "(KEY_3)" im Log? Gibt es hier intern schon ein mapping der codes?

justme1968

der type gibt an welche art von events es ist.

0 ist eine art sync
1 sind key events
3 ist EV_ABS und ist z.b. für touchscreens. es könnte sein das das deine joystick events sind. s.u.
4 ist EV_MSC. das sind events die sonst nirgendwo rein passen.

ja. press und release stecken im value. das modul ignoriert eigentlioch key events beim loslassen und sendet nur ein fhem event beim drücken. siehe zeile 502.

das modul erkennt 'normale' tastaturen und die verwendeten keycodes. manche anderen input devices verwenden die gleichen codes obwohl es eigentlich ganz andere tasten sind. der KEY_3 wird aber fälschlicherweise ausgegeben weil das event gar kein key events ist. die Ausgabe müsste man in diesem fall unterdrücken.

brauchst du wirklich press und release?
wenn press reicht solltest du besser die KEY events auswerten statt der EV_MSC. EV_MSC scheint device spezifisch zu sein und liefert scheinbar bei dir nur einen trigger das sich etwas geändert hat. nicht ob press oder release.

wenn du wirklich release auch brauchst würde ich vorschlagen im modul für EV_KEY auch bei release ein event zu triggern. wie wäre es mit EV_RELEASE statt EV_KEY? und das ganze per attribut zu aktivieren.


wenn 3 dein joystick ist wäre code vermutlich die achse 0=x und 1=y oder umgekehrt und value der wert 0-255 mit 127 die mitte. die werte von 126-128 wären minimale wackler um die mitte.

ich kann leider selber schlecht weiter nachschauen da ich aktuell keinen linux rechner mit einer tastatur laufen habe.

doku zum protokoll findest du z.b. hier: https://www.kernel.org/doc/Documentation/input/event-codes.txt
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Schlimbo

#198
Danke für deine Antwort.
Die release Events sind für einen Controller schon sehr wichtig, da die Tasten in der Regel gehalten werden. (Beispiel: Vorwärtsbewegung des Roboters soll solange erfolgen bis die UP-Taste wieder losgelassen wird)
Ein "EV_RELEASE" Event wäre hier super.

Mit den Joystick Events liegst du auch richtig:
-Linker Joystick: code 0 = X-Achse, code 1 = Y-Achse
-Rechter Joystick: code 3 = X-Achse, code 4 = Y-Achse
-Wertebereich X-Achse: 0-255  (0= links)
-Wertebereich Y-Achse: 0-255  (0= oben)

Da die Joystick Events im bis zu 10ms Abstand eintreffen wäre es gut wenn das Modul auch noch die Event-Attribute (event-aggregator, event-min-interval, event-on-change-reading und event-on-update-reading) unterstützten würde.
Ach Mist, die Event-Attribute beziehen sich ja nur auf Readings. Gibt es sonst noch eine Möglichkeit die EV_ABS Events etwas zu verringern?

Schlimbo

Hallo Andre,
hattest du schon mal Zeit dir die nötigen Anpassungen für release und disconnect Events anzusehen?
Zitat von: justme1968 am 06 Januar 2019, 13:30:30
ein event für disconnect kann ich einbauen.
Zitat von: justme1968 am 06 Januar 2019, 20:30:35
wenn du wirklich release auch brauchst würde ich vorschlagen im modul für EV_KEY auch bei release ein event zu triggern. wie wäre es mit EV_RELEASE statt EV_KEY? und das ganze per attribut zu aktivieren.

Und siehst du eine Möglichkeit die EV_ABS Events zu begrenzen?
Zitat von: Schlimbo am 06 Januar 2019, 22:40:02
Da die Joystick Events im bis zu 10ms Abstand eintreffen wäre es gut wenn das Modul auch noch die Event-Attribute (event-aggregator, event-min-interval, event-on-change-reading und event-on-update-reading) unterstützten würde.
Ach Mist, die Event-Attribute beziehen sich ja nur auf Readings. Gibt es sonst noch eine Möglichkeit die EV_ABS Events etwas zu verringern?

Gruß
Schlimbo

justme1968

nein. ich bin noch nicht dazu gekommen. sorry.

nerv mich weiter wenn ichat passiert.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Wzut

Hallo Andre, ich bin mit meinem Medion X10 Stick + Fernbedienung vom RasPi auf einen HP T610 Thin Client unter Debian Stretch umgezogen.
Zuerst habe ich keine Events gesehen, dafür jede Menge Stacktrace Enträge im Log :(
Das Problem liegt bei
my ($sec, $usec, $type, $code, $value) = unpack('L!L!S!S!l!', $buf);
$value ist immer undef, ich habe als Notlösung nun
$value = 1 if (!defined($value));
darunter gepackt, damit ich überhaupt die KEY Events bekomme. Natürlich habe habe ich nun bei gedrückter Taste Dauerfeuer, da press und release
nicht mehr unterschieden wird  ( naja immerhin besser als gar nichts ) 
Was könnte der Grund sein ? bzw was kann ich tun um der Ursache näher zu kommen ?
anbei Log und Event für eine gedrückte und gehaltene Taste:
2019.06.29 18:19:28 5 : type:4 code:4 value:1
2019.06.29 18:19:28 5 : type:1 code:113 value:1
2019.06.29 18:19:28 4 : type:1 code:113 value:1
2019.06.29 18:19:28 4 : (KEY_MUTE)
2019-06-29 18:19:28 linuxHid myremote EV_KEY: KEY_MUTE
2019.06.29 18:19:28 5 : type:0 code:0 value:1
2019.06.29 18:19:28 5 : type:1 code:113 value:1
2019.06.29 18:19:28 4 : type:1 code:113 value:1
2019.06.29 18:19:28 4 : (KEY_MUTE)
2019-06-29 18:19:28 linuxHid myremote EV_KEY: KEY_MUTE
2019.06.29 18:19:28 5 : type:0 code:0 value:1
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

chr2k

Nabend Leute,

hat jemand zu meinem Problem eine Idee:

Ich nutze das Modul schon länger auf einem RPi mit raspbian.

Nun möchte ich eine baugleiche Fernbedienung an einem anderen RPi auf dem OSMC läuft nutzen.

Nun greift sich aber OSMC (eigentlich Kodi) die Tastendrücke der Fernbedienung weg und sie kommen in FHEM nicht an. Wie kann ich OSMC/kodi verbieten meine X10 Fernbeidenung zu "belauschen"?

Danke.

Gruß
Christian


hexenmeister

Man könnte probieren, dem Benutzer, unter dem Kodi läuft, die Rechte, auf das Device zuzugreifen, weg zu nehmen.

justme1968

wenn ich mich richtig erinnere können mehrere gleichzeitig die events lesen.

bist du sicher das fhem auch die nötigen rechte hat?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

chr2k

Zitat von: hexenmeister am 16 April 2020, 21:27:15
Man könnte probieren, dem Benutzer, unter dem Kodi läuft, die Rechte, auf das Device zuzugreifen, weg zu nehmen.

Danke für deine Ideenanstoß. Das Problem lag jetzt seit Ostern flach.
Ich habe jetzt nach Möglichkeiten gesucht.

Der Benutzer "osmc" unter dem Kodi läuft ist nicht in der Gruppe "input".

root@osmc:~# id osmc
uid=1000(osmc) gid=1000(osmc) groups=1000(osmc),4(adm),6(disk),7(lp),20(dialout),24(cdrom),29(audio),44(video)


Die Dateien /dev/input/event* "gehören" nach jedem Neustart des RPi wie folgt:

root@osmc:~# ls -l /dev/input/event*
crw-rw---- 1 root osmc 13, 64 Dec 29 22:26 /dev/input/event0
crw-rw---- 1 root osmc 13, 65 Dec 29 22:26 /dev/input/event1
crw-rw---- 1 root osmc 13, 66 Dec 29 22:26 /dev/input/event2



Daher bin ich hier schon am Ende meiner Ideen oder Möglichkeiten weiter zu suchen.
Ich bin auf UDEV Regeln gestoßen, die mir evtl weiter helfen könnten. Jedoch sind das für mich böhmische Dörfer.

chr2k

Zitat von: justme1968 am 17 April 2020, 19:46:08
wenn ich mich richtig erinnere können mehrere gleichzeitig die events lesen.

bist du sicher das fhem auch die nötigen rechte hat?

Hi Andre,

siehe meinen vorherigen Post in dem ich auf Hexenmeister's Nachricht eingehe.

Ich bin mir momentan tatsächlich nicht ganz sicher ob der Benutzer "fhem" unter dem FHEM läuft die korrekten Rechte hat. Wenn ich diese jedoch setze (zumindest bin ich der Meinung, dass ich diese richtig setze) bekomme FHEM nach wie vor nichts mitx Kodi jedoch schon.

Ich surfe mal weiter...

chr2k

So, ich habs wohl...

Ich habe einige UDEV Regeln in /lib/udev/rules.d/ von OSMC gelöscht die "irgendwas" mit Input Devices zu tun haben.

Nun wurde im Kodi die X10 Fernbedienung nicht mehr erkannt.

Danach habe ich User und Group der /dev/input/event* Ordner auf fhem:input gewechselt. Und nun erkennt FHEM die Tastendrücke.

Vielleicht habe ich von hinten durchs Bein ins Auge geschossen, aber es funktioniert.

Wenn jemand einen besseren Vorschalg/Lösungsweg hat, inmmer her damit.

Danke.

Gruß
Christian



RomanticBoy83

Hallo Leute,
ich wollte mir auch eine Tastatur anschließen!

Um das ganze ersteinmal auszuversuchen hatte ich mir das Modul auf meinen Rechner in meine Entwicklungsumgebung gezogen. Fazit: Es läuft nix im Eventmonitor! Auffällig war, das im Log unter value: die Variable immer unbelegt war!

Lange Rede kurzer Sinn:
Das Auslesen des $buf von dem /dev/eventx läuft auf dem Kernel hier anders.
Kernel: 5.4.0 welche ich habe benötigt das format
unpack('l!l!S!S!i!', $buf);

Quelle:
https://github.com/torvalds/linux/blob/v5.0-rc1/include/uapi/linux/input.h#L28

RomanticBoy83

Ich habe mir gerade meinen kleinen Pi angesehen:
Kernel: 4.19
Dort sollte das Format auch wie von mir angegeben stimmen.

Keine Ahnung ob ich jetzt falsch liege oder der Code wirklich überarbeitet werden muss?! :-\

Quelle:
https://github.com/torvalds/linux/blob/v4.19/include/uapi/linux/input.h#L28