linux usb hid input modul

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

Vorheriges Thema - Nächstes Thema

Gorean

Hmmm... jetzt klappt die Übergabe an FHEM einwandfrei, trotzdem löst das mein Problem (noch) nicht...

Ich habe eine Harmony Elite. Ich würde gerne folgende Tasten mit Kommandos an FHEM belegen:

- rot
- grün
- gelb
- blau
- 2x lampe
- +/-
- 2x Steckdose

Alles unterhalb und einschließlich der Farbtasten eben. Am besten noch mit long/short...

Mit einem Windows-PC scheint das aktuell nicht möglich. Hat jemand einen Tip, wie man diese Tasten ansteuern kann?

VG,
Peter


justme1968

schau dir das fakeRoku modul und den harmony tips thread an.

das heisst wenn du auch einen harmony hub hast. wenn nicht: ich würde dir sehr empfehlen einen zu kaufen. du machst dir vieles einfacher.

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

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

Gorean

Hi Andre,

das fakeRoku hatte ich im Einsatz bevor ich auf HID gewechselt bin. Grund hierfür war, dass fakeRoku nur bestimmte Tasten auf der Elite unterstützt.

Ich hatte die Hoffnung, dass ich mit HID ein beliebiges virtuelles Gerät auf der Fernbedienung konfigurieren kann und damit Zugriff die unteren Tasten der Elite bekomme.

Konkret würde ich die beiden Lichttasten gerne zur Lichtsteuerung (helles Weiss und dunkles Weiss inkl. +/- für Dimmen), die beiden Steckdosentasten zur Rolladensteuerung (hoch/runter, Stop bei Longpress) und die 4 Farbtasten zur Ansteuerung von 8 LightScenes über Long-/Shortpress verwenden.

Alle anderen Tasten werden in verschiedenen Activities vom ein oder anderen Gerät meiner Multimediasteuerung verwendet, daher wäre es toll, wenn ich die unteren Tasten ansteuern könnte.

Den von Dir angegebenen "Harmony Tips" Thread finde ich leider trotz Suche im Forum nicht. Und die Elite hat meines Wissens nach immer einen Hub dabei - ohne wäre ich sicher schon verzweifelt :)

Gruß,
Peter

justme1968

ob und welche tasten du wie belegen kannst ist unabhängig davon ob du fakeRoku oder mce oder was auch immer nimmst.

warum kannst du die farbtasten und die licht tasten nicht belegen? so viel ich weiss ist es nur bei der companion nicht möglich die licht tasten zu belegen.

der thread ist hier: https://forum.fhem.de/index.php/topic,52246.msg440073.html#msg440073

ohne hub heisst sie nur anders. ist aber das gleiche.

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

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

Gorean

Hallo Andre,

der Thread hat geholfen. Ich hatte übersehen, dass man die Tasten bei den Activities belegen kann. Danke Dir!

Gruß,
Peter

Hans Franz

Hallo,
Ich bekomme nur dann ein event, wenn ich Zeile 497
my ($sec, $usec, $type, $code, $value) = unpack('L!L!S!S!l!', $buf);
durch
my ($sec, $usec, $type, $code, $value) = unpack('L!L!S!S!S!', $buf);
ersetze.
Bug, Sonderfall oder mache ich etwas falsch?

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

justme1968

#186
was ist das für ein system? 32/64 bit? was steht im eventSize internal?
was gibt{use Config;; $Config{longsize}}
{use Config;; $Config{intsize}}
{use Config;; $Config{i16size}}
{use Config;; $Config{i32size}}


das format des events ist leider kernel abhängig. eventuell kann man es aus eventSize ableiten. bis jetzt hatte ich nur nicht genügend unterschiedliche beispiele.

schau mal ob es mit I! geht.

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

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

Hans Franz

Zitatwas ist das für ein system? 32/64 bit?
64

Zitatwas steht im eventSize internal?
24

Zitat{use Config;; $Config{longsize}}
8

Zitat{use Config;; $Config{intsize}}
4

Zitat{use Config;; $Config{i16size}}
2

Zitat{use Config;; $Config{i32size}}
4

Zitatschau mal ob es mit !I geht.
geht :)

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

justme1968

jetzt brauchen wir noch einen tester bei dem l! bisher keine probleme gemacht hat. funktioniert I! hier auch?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Falkenstein

Ich hatte auch das Modul auf einen Intel Nuc mit Ubuntu 64 Bit versucht zum laufen zu bekommen...leider ohne Erfolg.

Ich würde es gern erneut testen....denn möchte sehr gern das  usb hid input modul unter Fhem nutzen

Zitatschau mal ob es mit !I geht.

Wo und wie genau muss ich das "!I" eintragen??

Gruß,
Falkes

chr2k

Nabend Leute,

irgendwie ist mir das Rätselhaft:
Auf meiner alten FHEM Konfiguration, lief das linuxhid Modul in Verbindung mit einer X10 Funkfernbedienung und diversen notifys einwandfrei.
Nun habe ich nach dem Wiki und meiner alten fhem.cfg den X10 Empfänger bei meinem neuen FHEM-System eingerichtet. EIn notify erstellt. Die Taste wird erkannt und löst die Aktion laut notify aus.
Soweit so gut.
Jedoch wird ein einziger kurzer Tastendruck auf der Fernbedienung 2x im Event Monitor angezeigt. Das ist bei jeder Taste so. Somit würd die Aktion die laut notify getriggert wird, doppelt hintereinander ausgeführt. Das ist doof.

Ich weiß leider nicht mehr, ob das beim alten FHEM bereits auch schon so war. Auf jendefall gab es aber nicht das doppelte ausführen der Aktion des notifys.
Weitere Attribute (wie bspw. event-min-interval) hatte ich für die betreffenden Devices auch nicht gesetzt.
Daher ist das für mich kurios warum 1. der Tastendruck 2x erkannt wird und 2. es beim vorherigen FHEM womöglich auch so war, dort dem notify aber egal war.

Hat jemand ne Idee dazu?

Danke.

Gruß
Christian

chr2k

Nabend Leute,

ich fage mich gerade, ob es möglich ist ohne groß Schnickschnack oder dummy Devices anlegen eine Funktion zu erstellen, die es mir ermöglicht erst ein Event auszulösen wenn ich bspw zwei Tasten der Fernbedienung direkt hintereinander gedrückt habe. So wäre dann ein unbeabsichtigtes Schalten einer Funktion sicherer.

Hat jemand Ideen für eine Umsetzung?

justme1968

dafür gibt es das sequence modul.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

chr2k


Schlimbo

#194
Hallo zusammen,
auf der Suche nach einer Möglichkeit einen PlayStation 3 Controller über Bluetooth in FHEM einzubinden bin ich auf dieses Modul gestoßen. Vielen Dank erst mal hierfür an Andre.

Ist die Version im ersten Beitrag noch die aktuellste? Und wird dieses Modul noch weiter entwickelt?
Zitat von: justme1968 am 13 April 2015, 23:00:21
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
  • ...

Zum Verbinden eines PS3 Controllers an den Raspberry Pi gibt es im Netz einige Beschreibungen (Stichwort: "sixpair").
Eingebunden in FHEM habe ihn dann mit:
defmod PS3controller linuxHid PLAYSTATION.*Controller
attr PS3controller ignoredTypes EV_SYN,EV_ABS


Bis auf die Joystick Events könnte ich alle Tasten in FHEM einbinden, etwas Probleme macht mir noch die Erkennung der Release-events, da dieser den gleichen Wert, wie das drücken der Taste liefert:

2019-01-05 22:34:18.599 linuxHid PS3controller EV_MSC: 4 589829
2019-01-05 22:34:18.620 linuxHid PS3controller EV_KEY: KEY_544
2019-01-05 22:34:21.614 linuxHid PS3controller EV_MSC: 4 589829


Über ein Sub in der myUtils setze ich mir jetzt ein Reading beim ersten EV_MSC Event auf "1" und beim zweiten wieder auf "0", so habe ich für jede Taste ein Reading mit dem Zustand, ob eine Taste gedrückt ist:

sub PS3controller($$) {
my ($name,$EVENT) = @_;
$EVENT =~ s/://g;
my @tmp = split / /, $EVENT, 2;
my $EVTPART0 = $tmp[0];
my $EVTPART1 = $tmp[1];


#Log 3, ("PS3controller: $EVENT, $EVTPART0, $EVTPART1");

if ($EVTPART0 eq "EV_KEY") {
   my $keys = {
      'KEY_307'  => 'KEY_TRIANGLE',
      'KEY_305'  => 'KEY_CIRCLE',
      'KEY_308'  => 'KEY_SQUARE',
      'KEY_304'  => 'KEY_X',
      'KEY_316'  => 'KEY_PS',
      'KEY_546'  => 'KEY_LEFT',
      'KEY_547'  => 'KEY_RIGHT',
      'KEY_544'  => 'KEY_UP',
      'KEY_545'  => 'KEY_DOWN',
      'KEY_311'  => 'KEY_R1',
      'KEY_313'  => 'KEY_R2',
      'KEY_310'  => 'KEY_L1',
      'KEY_312'  => 'KEY_L2',
      'KEY_314'  => 'KEY_SELECT',
      'KEY_315'  => 'KEY_START',
      'KEY_318'  => 'KEY_JOYSTICK_R_PUSH',
      'KEY_317'  => 'KEY_JOYSTICK_L_PUSH'
   };
   $EVTPART1 = $keys->{$EVTPART1} if (defined($keys->{$EVTPART1}));
   readingsSingleUpdate($defs{$name}, "KEY", $EVTPART1, 1);
   my $value = ReadingsNum($name,"$EVTPART1",0);
   if ($value == 0){
     readingsSingleUpdate($defs{$name}, $EVTPART1, 1, 1)
   }
}

elsif ($EVTPART0 eq "EV_MSC") {
    my $mscs = {
      '4 589837'  => 'KEY_TRIANGLE',
      '4 589838'  => 'KEY_CIRCLE',
      '4 589840'  => 'KEY_SQUARE',
      '4 589839'  => 'KEY_X',
      '4 589841'  => 'KEY_PS',
      '4 589832'  => 'KEY_LEFT',
      '4 589830'  => 'KEY_RIGHT',
      '4 589829'  => 'KEY_UP',
      '4 589831'  => 'KEY_DOWN',
      '4 589836'  => 'KEY_R1',
      '4 589834'  => 'KEY_R2',
      '4 589835'  => 'KEY_L1',
      '4 589833'  => 'KEY_L2',
      '4 589825'  => 'KEY_SELECT',
      '4 589828'  => 'KEY_START',
      '4 589827'  => 'KEY_JOYSTICK_R_PUSH',
      '4 589826'  => 'KEY_JOYSTICK_L_PUSH'
    };

    my $EVTPART1 = $mscs->{$EVTPART1} if (defined( $mscs->{$EVTPART1}));
    my $value = ReadingsNum($name,"$EVTPART1",0);
    if ($value == 0){
     readingsSingleUpdate($defs{$name}, $EVTPART1, 1, 1)
    }
    else {
     readingsSingleUpdate($defs{$name}, $EVTPART1, 0, 1)
    }
}

elsif ($EVENT =~ m/connect/ ){
   my $hash=$defs{$name};
   my $readings = $hash->{READINGS};
   foreach my $reading(keys %{$readings}){
    if (ReadingsNum($name,$reading,0) == 1){
     readingsSingleUpdate($defs{$name}, $reading, 0, 1)
    }
   }
}

return undef
}


Dies wird über ein notify des linuxHid Devices getriggert:
defmod PS3controller_notify notify PS3controller:.* {PS3controller($NAME,$EVENT)}
Da diese Lösung natürlich nicht optimal ist und unter Umständen einen falschen Status darstellen könnte wäre es super, wenn für den release einer Taste das Modul ein eindeutige EVENT ausgeben könnte.
@Andre: siehst du hierfür eine Möglichkeit?

Wenn der PS3 Controller ausgeschaltet ist erkennt das Modul dies korrekt und zeigt im Internal STATE
"Disconnected" an, ich würde auf diese Änderung gerne in FHEM reagieren jedoch gibt es hier kein EVENT.
Wäre es möglich hierfür noch einen EVENT zur Verfügung zu stellen?

Das automatische connecten, wenn der Controller wieder eingeschaltet wird, funktionierte durch das Modul noch nicht. Abhilfe schaffte hier eine udev Regel:
(/etc/udev/rules.d/99-dualshock3.rules)
ACTION=="add", KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="PLAYSTATION(R)3 Controller", GROUP="input", MODE="0660", RUN+="/opt/fhem/PS3connected.sh"
PS3connected.sh:
#!/bin/bash
perl /opt/fhem/fhem.pl 7072 "set PS3controller connect"
exit 0


Da der Akku des PS3 Controller bei einer dauerhaften Verbindung recht schnell entladen wird, trenne ich die Bluetooth Verbindung bei nichtgebrauch nach 5 Minuten durch FHEM:
defmod di_PS3controller DOIF ([PS3controller]) ({system('(echo "disconnect 00:24:33:4A:61:22 \n quit" | bluetoothctl) &')})
attr di_PS3controller do resetwait
attr di_PS3controller wait 300

Durch einen Druck auf die PS Taste am Controller, wacht dieser wieder auf und verbindet sich durch die udev Regel automatisch mit FHEM.
Nutze meinen PS3 Controller jetzt für die manuelle Steuern meines Staubsauger Roboters :)

Hoffe dies Anleitung ist für einige hilfreich und würde mich freuen wenn das Modul noch etwas weiter entwickelt wird und es noch in das offizielle FHEM Update schafft.

Beste Grüße Schlimbo