linux usb hid input modul

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

Vorheriges Thema - Nächstes Thema

justme1968

hallo zusammen,

im anhang gibt es die aller erste version eines fhem moduls um unter linux events von usb hid geräten in fhem zu integrieren.

mögliche anwendungen hierfür sind:

  • mit den tasten einer harmony fernbedienung events in fhem auslösen
    entweder per bluetooth oder per windows mce ir empfänger
    hier kommt auch die ursprüngliche idee Markus her. siehe: http://forum.fhem.de/index.php/topic,14163.msg284851.html#msg284851
  • eine bluetooth zehner tastatur als fernbedienung für fhem verwenden
  • oder alles andere das sich wie eine usb tastatur verhält. z.b. präsentations fernbedienungen
  • die encoder einer alten maus oder eines alten joysticks als sterung oder rückmeldung in fhem verwenden
  • ...

wie funktioniert das ganze:

  • mit cat /proc/bus/input/devices auf der kommandozeile rausfinden welche hid devices im system bekannt sind.
    der eventX eintrag in der H: zeile des gewünschen geräts ist relevant.

  • prüfen ob der zugehörige device eintrag in /dev/input/eventX für den user unter dem fhem läuft lesbar ist.
    wenn das nicht der fall ist ensprechende udev regel anlegen, fhem mit in die nötige gruppe aufnehmen oder fhem als root laufen lassen.

  • mit define hid linuxHid eventX das device in fhem anlegen.
    sobald tastendrücke erkannt werden sollte im event monitor die zugehörigen events sichtbar sein. es gibt events beim drücken, beim los lassen und beim autorepeat einer taste.
  • diese events lassen sich ganz normal mit fhem notifys weiter verarbeiten

  • alternativ zum cat kann man mit define hid linuxHid xxx erst mal ein hid device anlegen und mit get devices die vorhanden devices auflisten. mit modify kann man dann auf ein echtes device umändern
  • statt eventX kann man auch den device namen angeben (als regex, leerzeichen durch . ersetzt) oder als bus:vendor:device:version:eventTypes string (nicht relevante teile leer lassen)
    z.b.: define hid linuxHid :0x04f2:0x0402 oder define hid linuxHid .*keyboard.*
  • wenn vorhanden kann auch die mac adresse des device im define angegeben werden: define hid linuxHid 00:04:20:eb:f6:b7

ein physikalisches device kann mehrfach in der device liste auftauchen. 'moderne' tastaturen mit multimedia tasten erscheinen meist als gerät für die 'normalen' tasten und als gerät für die multimedia tasten. man kann so z.b. der normalen system tastatur die multimedia tasten klauen und exclusiv in fhem verfügbar machen und alle anderen tasten weiter auf systemebene und der konsole verwenden.

das hid device kann entweder exklusiv events an fhem liefern. das ist der default. oder die events landen zusätzlich auch noch ganz normal im betriebsystem.

wenn das device über die usb ids angelegt wird sollte es auch nach abziehen und wieder anstecken automatisch wieder gefunden werden. wenn es über eventX angelegt wurde kann sich beim abziehen und wieder anstecken der bezeichner ändern.


was fehlt noch:

  • zur zeit werden nur tastatur events verarbeitet. d.h. die oben angesprochenen maus und joystick events gehen noch nicht.
  • fast alle fhem events haben noch keine symbolischen tasten namen sondern nur key codes
  • symbolische namen für press, release und repeat
  • konfiguration ob release events erzeugt werden sollen
  • standardisieren der in fhem ausgelösten events

was ist noch denkbar:

  • im exclusiv modus events die nicht für fhem gedacht sind wieder ans system zurück weiterreichen
  • ...

gruss
  andre

edit: ergänzungen von markus eingebaut
        neues attribut ignoredTypes um festzulegen welche event types ignoriert werden sollen

edit: statt device name oder bus:verdorr:device:version:eventTypes kann man im define jetzt auch die uniq id des device angeben.

edit: es gibt hier: https://forum.fhem.de/index.php/topic,51619.msg432921.html#msg432921 ein modul mit dem man harmony tasten per netzwerk übertragen kann. d.h. im harmony fall geht es jetzt auch ohne ir oder bluetooth.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Wzut

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

justme1968

dann sind wir scheinbar jetzt schon vier :)

die anderen versionen kannte ich bis jetzt nicht. der vorteil der version hier ist glaube ich das keine externen programme oder module  gebraucht werden sondern nur das fhem modul, das die events exklusiv in fhem landen und nicht z.b. auf der konsole und das es auch auf systemen die kein by-id haben mit dem abziehen und wieder anstecken klar kommt.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Wzut

Zitat von: justme1968 am 14 April 2015, 10:46:47
der vorteil der version hier ist glaube ich das keine externen programme oder module  gebraucht werden
In der Tat , hat was von "das Bessere ist der Feind des Guten" :)
Ich werde heute Abend mal dein Modul mit der 5 € Pollin Funk Fernbedienung testen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wernieman

Geht es eigentlich auch mit "Nicht-Ascii" Vernbediehungen? Also z.B. senden viele Infrarotfernbedienungen nicht ASCII-Zeichen .... dann würde man sich den kompletten lircd "kram" sparen ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

justme1968

das geht prinzipiell mit jedem usb hid gerät das in /proc/bus/input/devices auftaucht.

manche devices senden kein key event sondern andere typen. die sind zur zeit im modul noch extra abgeschaltet. mit denen geht es aber auch. meine tastatur hier hat nur bei jeder taste auch noch zwei von diesen nicht key events erzeugt und ich war zu faul das richtig raus zu filtern.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Wernieman

Mhhh ... was müste man denn machen, um es zu aktivieren?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

justme1968

wenn es nur ums testen geht zeile 358 auskommentieren oder besser inreturn undef if( $type == EV_SYN );umändern.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Wernieman

Werde ich mir (hoffentlich) am Wochenende ansehen ;o)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Markus M.

FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

justme1968

hab es eben mit einer alten hama fernbedienung und dem zugehörigen empfänger probiert. geht problemlos.

um alle tasten zu bekommen muss man nur zwei devices einrichten weil die mediatasten wie volume,mute,... auf einem andern hid device wie die restlichen tasten liegen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Wzut

Ich habe es mit der Pollin FB und einem USB Keyboard getestet , klappt gut.
Die Ausgabe von $value können sein 0,1,2 ?
1 = key up->down, 2 = key down , 0 = key down-> up ?
Ich würde dem Modul noch ein Attribut spendieren mit dem sich festlegen lässt welche(r) dieser Werte man als Event haben möchte.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

justme1968

was value bedeutet ist vom event typ abhängig. bei key events ist 1 = press, 0 = release und 2 = repeat.

attribute um die events einzuschränken kommen noch. auch um eventuell mehrere gleiche events innerhalb kurzer zeit zu unterdrücken.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Markus M.

Alle Tasten von "Anderes Betriebssystem" des Hubs im Mapping, Key Events auf "down" beschränkt, andere Events eingebunden (Touchscreen!), disconnect Funktion.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

justme1968

hallo markus,

das set disconnect brauchen wir nicht. du kannst einfach attr disable 1 setzen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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