linux usb hid input modul

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

Vorheriges Thema - Nächstes Thema

Frini

#150
Soooo nach 4 Std. herumprobieren habe ich es jetzt tatsächlich geschafft, die Tasten im Eventmonitor anzuzeigen.
Hab jetzt teilweise das Problem, dass bei einem Tastendruck bis zu vier Befehle erscheinen. Vornehmlich bei den Pfeiltasten die laut Beschriftung auf der Fernbedienung ebenfalls als 4ghi benutzt werden können.
Jetzt versuch ich erstmal das Teil irgendwie mit dem Hub zu paaren.

als Beispiel mal vier Tasten. Bei Druck vier Tasten kommt zu jeder Taste:

Taste 1
2015-11-15 16:29:08 linuxHid hid.ug.kn.hub EV_KEY: KEY_LEFTCTRL
2015-11-15 16:29:08 linuxHid hid.ug.kn.hub EV_KEY: KEY_LEFTALT
2015-11-15 16:29:08 linuxHid hid.ug.kn.hub EV_KEY: KEY_A
2015-11-15 16:29:08 linuxHid hid.ug.kn.hub EV_KEY: KEY_1
2015-11-15 16:29:08 linuxHid hid.ug.kn.hub EV_KEY: KEY_F1
Taste 2
2015-11-15 16:29:09 linuxHid hid.ug.kn.hub EV_KEY: KEY_LEFTCTRL
2015-11-15 16:29:09 linuxHid hid.ug.kn.hub EV_KEY: KEY_LEFTALT
2015-11-15 16:29:09 linuxHid hid.ug.kn.hub EV_KEY: KEY_B
2015-11-15 16:29:09 linuxHid hid.ug.kn.hub EV_KEY: KEY_2
2015-11-15 16:29:09 linuxHid hid.ug.kn.hub EV_KEY: KEY_F2
Taste 3
2015-11-15 16:29:10 linuxHid hid.ug.kn.hub EV_KEY: KEY_LEFTCTRL
2015-11-15 16:29:10 linuxHid hid.ug.kn.hub EV_KEY: KEY_LEFTALT
2015-11-15 16:29:10 linuxHid hid.ug.kn.hub EV_KEY: KEY_C
2015-11-15 16:29:10 linuxHid hid.ug.kn.hub EV_KEY: KEY_3
2015-11-15 16:29:10 linuxHid hid.ug.kn.hub EV_KEY: KEY_F3
Taste 4
2015-11-15 16:29:11 linuxHid hid.ug.kn.hub EV_KEY: KEY_LEFTCTRL
2015-11-15 16:29:11 linuxHid hid.ug.kn.hub EV_KEY: KEY_LEFTALT
2015-11-15 16:29:11 linuxHid hid.ug.kn.hub EV_KEY: KEY_D
2015-11-15 16:29:11 linuxHid hid.ug.kn.hub EV_KEY: KEY_4
2015-11-15 16:29:11 linuxHid hid.ug.kn.hub EV_KEY: KEY_F4

Habt Ihr eine Idee, wie ich damit verfahren kann?

Ich benötige gut 15 Tasten um KODI ebenfalls mit der Fernbedienung zu steuern. Ich hab mir jetzt 12 Tasten rausgesucht, die nur ein Signal senden. Mir fehlen also noch drei. Und da werd ich wohl auf eine von den Mehrfachbelegten Tasten ausweichen müssen.

Frini

#151
So ich melde mal kurz den Zwischenstand:
Meine Vorgehensweise:
In der PC-Software vom Hub habe ich ein Dummy-Gerät erstellt. MediaCenterPC aus der Liste. Da ich so eine BilligFernbedienung samt IR-Empfänger vom großen A habe, bin ich nicht drum rum gekommen alle 34 Tasten einzeln anzu lernen.
Ich habe mir zwei Excel Sheets erstellt, in einer Liste stehen die Befehle aus dem Eventmonitor von FHEM, die pro Tastendruck erscheinen und in der anderen Tabelle stehen die Befehle die im EventMonitor erscheinen, wenn ich den Befehl übers Hub sende. Hier klappen nämlich nicht alle Tasten.
Im hub habe ich die Befehle der einfachheithalber beim anlernen einfach stupide durchnummeriert.

Eigentlich würden mir drei Befehle ersteinmal reichen:
1. Play
2. Pause
3. Stop
Das sind alles Befehle, die ich als Trigger für die Lichtsteuerung im Kino brauche.
Jedoch habe ich keinen IR-Empfänger am HTPC, sodass ich um KODI komfortabel mit der Harmony steuern zu können noch weitere Trigger-Dummies.
In summe komme ich so auf knapp 15 Triggerbefehle, die ich mit notifys mit den entsprechenden KODI-FHEM Befehle verknüpfe.

Erste Tests waren positiv. Allerdings befürchte ich, dass durch meinen "Billigkauf" die IR-Einheiten doch recht minderwertig sind. Mal kommt ein Befehl durch, mal wieder nicht.
Ich hab allerdings zwei Probleme, bei denen ich kurz nen Rat bräuchte.
1. Wie oben beschrieben gibt es Tasten, wo mit einem mal bis zu 5 Befehle gesendet werden. Wenn ich jetzt mit nem notify einfach einen KEY-Befehl herauspicke und die anderen ignoriere müsste das doch funktionieren oder?
2. Ich hab Tasten dabei, da sende ich nach schneller Tipfrequenz unterschiedliche Befehle. Eigentlich genauso wie bei einer Handytastatur, wenn man in schneller Tipfolge die Taste drückt. Erster druck 4, schnell noch mal gedrückt ist g, schnell noch mal gedrückt ist h usw. Das wirklich komische ist, dass ich dieses Verhalten auch habe, wenn ich den Befehl über das Hub mit Harmony sende. Ich hab extra darauf geachtet, beim Anlernen nur einmal kurz zu drücken, damit ich nur den ersten Befehl anlerne.

Habt Ihr vielleicht einen Rat für mich? Oder wäre es besser das IR-Geraffel zur Seite zu legen und etwas "namhaftes höherwertiges" zu kaufen?

Hierm al meine notifys zur Info. Vielleicht für den einen oder anderen interessant:

define not.ug.kn.hid.play notify hid.ug.kn.hub:.*KEY_VOLUMEUP.* if ([hub.ug.kn:currentActivity] eq "FilmKODI") {fhem "set ug.kn.KODI play} else {fhem "set hub.ug.kn. command play"}
define not.ug.kn.hid.pause notify hid.ug.kn.hub:.*KEY_VOLUMEDOWN.* if ([hub.ug.kn:currentActivity] eq "FilmKODI") {fhem "set ug.kn.KODI pause} else {fhem "set hub.ug.kn. command pause"}
define not.ug.kn.hid.stop notify hid.ug.kn.hub:.*KEY_MUTE.* if ([hub.ug.kn:currentActivity] eq "FilmKODI") {fhem "set ug.kn.KODI stop} else {fhem "set hub.ug.kn. command stop"}

define not.ug.kn.hidKODI.left notify hid.ug.kn.hub:.*KEY_155.* set ug.kn.KODI left
define not.ug.kn.hidKODI.right notify hid.ug.kn.hub:.*KEY_HOMEPAGE.* set ug.kn.KODI right
define not.ug.kn.hidKODI.up notify hid.ug.kn.hub:.*KEY_PREVIOUSSONG.* set ug.kn.KODI up
define not.ug.kn.hidKODI.down notify hid.ug.kn.hub:.*KEY_NEXTSONG.* set ug.kn.KODI down
define not.ug.kn.hidKODI.select notify hid.ug.kn.hub:.*KEY_PLAYPAUSE.* set ug.kn.KODI select
define not.ug.kn.hidKODI.home notify hid.ug.kn.hub:.*KEY_STOPCD.* set ug.kn.KODI home
define not.ug.kn.hidKODI.info notify hid.ug.kn.hub:.*KEY_COMMA.* set ug.kn.KODI info
define not.ug.kn.hidKODI.contextmenu notify hid.ug.kn.hub:.*KEY_PAGEUP.* set ug.kn.KODI contextmenu
define not.ug.kn.hidKODI.back notify hid.ug.kn.hub:.*KEY_PAGEDOWN.* set ug.kn.KODI back



justme1968

schau dir mal den flirc empfänger an. ich vermute für deine anwendung (bzw. zumindest für den kodi teil) ist das deutlich einfacher als alles über fhem laufen zu lassen.

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

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

Frini

Hallo,
du meinst den Flirc empfänger dann in den HTPC stecken um KODI dann via IR übers Hub zu steuern?
Hast Du vielleicht ne Empfehlung? Möchte da nicht noch mal ins Fettnäpfchen treten.


justme1968

ja. genau. ich würde die geräte steuerung immer vom hub zum gerät machen und fhem nur für kompfort funktionen wie zeit abhängige regelung oder das einbinden von zusätzlichen devices im haus verwenden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Frini

Das wird wohl Sinn machen.
Ich hab mal etwas gegooglet und werde dann wohl über kurz oder lang auf einen IR-Empfänger mit RC6 Protokoll gehen. Das wird als MCE-Keyboard vom Hub erkannt. Damit muss ich bei KODI keine Kompromisse machen.
Ich habe trotzdem weiter mit dem Empfänger gespielt, und jetzt 13 funktionierende notifys vorbereitet. KODI reagiert ebenfalls ohne Verzögerung. Ich bin wirklich begeistert. Danke für das Modul. Wieder ein großer Schritt zum richtigen Kino zu Hause.

alexmetz

#156
Hallo zusammen,

danke für das großartige Modul.
Ich habe leider mehrere Probleme:

Zunächst mein System:
Harmony Hub
Harmony Ultimate
Raspberry Pi mit Raspbian und Bluetooth-Empfänger
Fhem auf dem Raspberry


Ich bin gestern nach der Anleitung hier vorgegangen: http://forum.fhem.de/index.php/topic,36257.msg328517.html#msg328517
Ich habe mit der Harmony-App ein neues Gerät angelegt (MacPC) und in Fhem das hid-Device angelegt (mit event0)
Danach hat es im Prinzip funktioniert. Aber:

1. (kleines) Problem:
Wenn ich den Raspberry als OtherPC anlege, gibt es keinerlei Befehle in meiner Harmony, die ich den Tasten der Ultimate zuweisen könnte.
Daher hab ich MacPC genommen. WindowsPC war mir zu unübersichtlich.
Ich habe aber keine Ahnung was (außer der Tastenbelegung) die Auswahl eigentlich verändert. Evtl. hat das mit dem 3. Problem was zu tun (s.u.).

2. (kleines) Problem:
Die Stop-Taste der Ultimate sendet laut Harmony-Einstellungen ein STOP, die Playtaste ein PLAY und die Pausetaste ein PAUSE.
Auf dem Fhem kommt aber bei allen drei Tasten KEY_PLAYPAUSE an.

3. (großes) Problem:
Wie gesagt: gestern hat alles funktioniert. Heute allerdings steht in Fhem ein "disconnected" im hid-device.

Wenn ich nun cat /proc/bus/input/devices eingebe, ist auch kein event0 vorhanden.

Das device ist aber bekannt:
bluez-simple-agent hci0 00:04:20:F3:B5:06
root@raspberrypi:/dev/input# bluez-simple-agent hci0 00:04:20:F3:B5:06
Creating device failed: org.bluez.Error.AlreadyExists: Already Exists


Ich weiß jetzt auch nicht, wie ich die BT-Verbindung wiederherstelle.

UPDATE:
anscheinend hat sich mein Bluetooth-Stick ausgeschaltet. Jedenfalls hat
hcitool scan
hcitool dev

keine devices gefunden. Neustart des Rasperry brachte nix. Erst nach ein-/ausstecken des BT-Sticks gings wieder.
Wieso passiert sowas und wie verhindere ich es?



Vielen Dank schon mal,

Alex.

FHEM auf RaspberryPi 4
Homematic

Gary

Hi alexmetz,

du scheinst die gleiche Konfiguration zu haben und auf das gleiche Problem gestoßen zu sein, wie ich anfänglich auch: Wenn der Harmony Hub die BT Verbindung zum Raspberry beendet (Gründe dafür gibt es einige), dann wird der Hub nicht automatisch wieder als Input Device connected. Im Grunde wäre es nötig, im Augenblick, wenn der Hub die Verbindung wieder herstellen möchte, ein "sudo bluez-test-input connect" zu machen.

Die einzige Möglichkeit, die ich gefunden habe, ist ein Script, das am Raspberry im Hintergrund ständig läuft und - sollte das Device nicht vorhanden sein - einen Verbindungsversuch macht. Funktioniert so:

sudo nano /etc/harmony.sh

Folgenden Code eingeben (mit der MAC Adresse deines Hubs):

#! /bin/bash

address1="00:04:20:EB:F6:B7"

shopt -s nocasematch;

while (sleep 2)
do
connected=`sudo cat /proc/bus/input/devices` > /dev/null
if [[ ! $connected =~ .*${address1}.* ]] ; then
  sudo sudo bluez-test-input connect ${address1} > /dev/null 2>&1
fi
done


Und nun im Hintergrund laufen lassen:

sudo nano /etc/init.d/harmony

Mit diesem Script:

#!/bin/bash
#
# /etc/init.d/harmony -- startup script for harmony reconnects
#
### BEGIN INIT INFO
# Provides: harmony-bt-connect
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Harmony Bluetooth Connect
# Description: Start script for reconnecting Harmony Bluetooth Devices
### END INIT INFO

/etc/harmony.sh &

exit 0


Beide Scripts ausführbar machen und bei Boot ausführen:

sudo chmod +x /etc/harmony.sh
sudo chmod +x /etc/init.d/harmony
sudo update-rc.d harmony defaults


Raspberry neu starten und prüfen.

Zu deinem anderen Problem mit den Tasten vielleicht hilft dir Folgendes: Ich habe Windows PC als Gerät verwendet und die Pfeiltasten belegt. Aber vor allem habe ich auf der Ultimate für jede Aktion Menueinträge angelegt wie "Licht ein", "Licht aus", "Licht dimmed" und diese führen die Tasten als Makro aus.

Liebe Grüße

alexmetz

Zitat von: Gary am 04 Dezember 2015, 19:48:36
Zu deinem anderen Problem mit den Tasten vielleicht hilft dir Folgendes: Ich habe Windows PC als Gerät verwendet und die Pfeiltasten belegt. Aber vor allem habe ich auf der Ultimate für jede Aktion Menueinträge angelegt wie "Licht ein", "Licht aus", "Licht dimmed" und diese führen die Tasten als Makro aus.
Das hab ich auch so gemacht, nur hab ich laut/leise und kanal hoch/runter benutzt - is aber ja egal.

Hinsichtlich deines scripts: gute Lösung, aber wäre es evtl. noch eleganter, das script nicht selbst im Hintergrund laufen zu lassen, sondern mittels eines cronjobs aufzurufen?

VG
Alex.
FHEM auf RaspberryPi 4
Homematic

Gary

Bzgl. Tasten: Ja stimmt, ist egal welche. Wollte nur sicherheitshalber auf die Möglichkeit der Menueinträge durch die Definition von Sequenzen in MyHarmony hinweisen, und dass es sinnvoll ist Tasten zu wählen,  die man z.B. auch über die App schalten kann.

Zur Verbindungsthematik: Ich fürchte beim Cronjob wäre das Problem, dass das kleinste Aufrufintervall eine Minute ist. Ich weiß nicht genau wie lange das Timeout des Hubs ist für den Verbindungsaufbau ist, aber ich denke viel kürzer. Von den CPU-Ressourcen her ist es wohl egal ob cronjob oder service mit sleep - ich war froh, dass es geht und hab es einfach so belassen. Vielleicht gibt es eine bessere Lösung aber die läge wohl eher darin, dass das System selbst erkennt, wenn ein trusted Gerät die Verbindung erneut aufbauen möchte.

Mietzi67

Hallo zusammen,

ich habe eine Harmony Ultimate über Bluetooth an einen RPi gekoppelt, auf dem Raspbian mit XBMC und auch ein FHEM läuft.
Definition der Harmony im linuxHid Modul erfolgt über event6.

Nun stolpere ich über folgendes (Zitat von Seite 1):
Zitatdas 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.

Stoppe ich den XBMC Service, landen die EV_KEY Events im FHEM Event Log. Soweit so gut, wenn der XBMC aber läuft, passiert das leider nicht.
Der XBMC wird bisher über einen IR Empfänger gesteuert (event0). Seit Kopplung der Harmony allerdings auch über den Bluetooth Empfänger (event6).

Wie kann ich es steuern, dass die event6 Signale exklusiv im FHEM und nicht im XBMC ankommen?

Gruß & vielen Dank,
Mietzi

Mietzi67

Hallo zusammen,

mein Problem besteht weiterhin, sowohl per Bluetooth als auch mit dem FLIRC Empfänger.
Wenn FHEM allein auf dem RPi läuft, funktioniert das linuxHid Modul wie es soll.
Sobald der XBMC/Kodi Medienserver aber startet, gehen die Inputs ausschließlich dort hin und im FHEM kommt nichts mehr an (Status des FHEM hid Gerätes ist weiterhin "connected".) Wenn ich XBMC/Kodi stoppe, bekommt FHEM die Signale wieder.
Wie kann man dem Medienserver beibringen, die Signale ans Betriessystem / FHEM weiterzuleiten?

Wäre über etwas Hilfe sehr dankbar.

Gruß & vielen Dank,
Mietzi

ectomorph

Hallo Zusammen,

erstmal vielen Dank für das Modul, leider bekomme ich es aber bei mir nicht richtig zum laufen. Ich habe nun noch folgende Probleme.

Im Hub habe ich einen Computer als otherDevice angelegt
per Bluetooth mit fhem (IntelNuc Ubuntu 14 Server) gepaart

danach konnte ich leider den Hub nur als Maus benutzen. Konnte aber temporär Events beim streichen am Touchscreen des Smartphone im FHEM-Eventmonitor sehen aber nur im Touchmodus

Das Verbundene Device sieht in  /proc/bus/input/devices so aus:
I: Bus=0005 Vendor=0000 Product=0000 Version=0000
N: Name="Harmony Keyboard"
P: Phys=80:86:f2:95:b0:95
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.0/bluetooth/hci0/hci0:256/input8
U: Uniq=00:04:20:f4:49:db
H: Handlers=sysrq kbd mouse0 event4
B: PROP=0
B: EV=10001f
B: KEY=4837fff072ff32d bf54444600000000 ffff0001 30f908b17c007 ffff7bfad9415fff febeffdfffefffff fffffffffffffffe
B: REL=1c3
B: ABS=70100000000
B: MSC=10


Um das Berechtigungsproblem dauerhaft zu zu lösen habe ich folgede Datei mit diesem Inhalt angelegt angelegt:
/etc/udev/rules.d/80-persistent-hub.rules
ATTRS{Uniq}=="80:86:f2:95:b0:95", ACTION=="add", MODE="0644"
Dies scheind aber nicht zu funktionieren

Weiterhin hab ich nun probiert einen Computer als Windows PC oder MAC PC zu verbinden hierbei bekomme ich nun aber keinerlei Events mehr in FHEM angezeigt. Der connect und Disconnect des Devices (Hub) funktioniert aber noch.

Ich hoffe mir kann hier jemand helfen, das ich mit meiner neuen Harmony auch Geräte über FHEM steuern kann.


JoergOstertag

#163
Ich hab für meine X10 Fernbedienung mal ein paar Anpassungen am Modul gemacht.
- KonfigurationignoredValues da zu gemacht, denn die X10 hat immer value=0 (KEY_UP)
- Weitere KEY-Symbole dazugefügt
- Logging der Events angepasst/erweitert (Auch ausgeben der symbolischen Namen), weniger Zeilen -dafür alle Informationen- pro Event
- das Space aus den EventNamen bei den DoTrigger entfernt, damit man für das definieren eines Events keine Regex mit "." mehr braucht.
- undefined warnings umgangen durch einfügen von ||=0

Ausserdem habe ich im Wiki eine rudimentäre Seite zu dem Modul angelegt.
http://www.fhemwiki.de/wiki/LinuxHid

igami

Hi,

ich würde gernen meine MediaCenter Fernbedienung mittels des Moduls in FHEM einbinden.
Habe dafür aktuell 2 devices, mit event1 und event2. Dies würde ich gerne wie hier beschrieben
Zitat von: justme1968 am 13 April 2015, 23:00:21
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)
vereinfachen. Ein define mittels

define mcRemote linuxHid 0x0003:0x05a4
oder
define mcRemote linuxHid HID.05a4:9881

steht zwar auf connected, ich erhalte a0x05a4ber keine Events.

Hier die ausgabe von get devices

$VAR1 = [
          {
            'keys' => '100000 0 0 0',
            'eventTypesStr' => 'EV_SYN,EV_KEY,EV_REL',
            'id' => {
                      'bus' => '0x0019',
                      'version' => '0x0100',
                      'product' => '0x0001',
                      'vendor' => '0x0001'
                    },
            'handler' => 'event0',
            'uniq' => '',
            'eventTypes' => '0x7',
            'name' => 'axp20-supplyer'
          },
          {
            'handler' => 'event3',
            'eventTypes' => '0x3',
            'uniq' => '',
            'name' => 'sunxi-ir',
            'eventTypesStr' => 'EV_SYN,EV_KEY',
            'id' => {
                      'vendor' => '0x0001',
                      'bus' => '0x0019',
                      'product' => '0x0001',
                      'version' => '0x0100'
                    },
            'keys' => 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe'
          },
          {
            'eventTypesStr' => 'EV_SYN,EV_KEY,EV_MSC,EV_LED,EV_REP',
            'id' => {
                      'vendor' => '0x05a4',
                      'bus' => '0x0003',
                      'product' => '0x9881',
                      'version' => '0x0110'
                    },
            'keys' => 'e080ffdf 1cfffff ffffffff fffffffe',
            'handler' => 'event1',
            'uniq' => '',
            'eventTypes' => '0x120013',
            'name' => 'HID 05a4:9881'
          },
          {
            'eventTypesStr' => 'EV_SYN,EV_KEY,EV_REL,EV_MSC',
            'id' => {
                      'vendor' => '0x05a4',
                      'product' => '0x9881',
                      'version' => '0x0110',
                      'bus' => '0x0003'
                    },
            'keys' => '1f0000 0 2020000 3878 d801d001 1e0000 0 0 0',
            'eventTypes' => '0x17',
            'uniq' => '',
            'handler' => 'event2',
            'name' => 'HID 05a4:9881'
          }
        ];


Kann mir jemand auf die Sprünge helfen?

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED