# LIRC Fernbedienungstasten Zahlen zuweisen

## seyanora

Hi,

habe folgenden Wunsch:

Ich möchte mit meiner Fernbedienung (iMon PAD) möglichst viele Funktionen von KDE steuern. Insbesondere soll eine selbst programmierte Qt-Anwendung mittels Zahlentasten gesteuert werden, die über die Tastatur oder eben die Fernbedienung empfangen werden.

Nun mag ich eben den Zahlenblock der Fernbedienung quasi als zweite Tastatur nutzen, also drück ich 1 auf der Fernbedienung sollte auch z.B. auf der Konsole oder in einem Programm eine 1 geschrieben werden.

Hab mich jetz schon den ganzen Mittag durch zig HowTos mit xte usw durchgelesen, ohne Erfolg. Grundsätzlich funktioniert der LIRC Dämon, im Testprogramm der Konsole wird jeder Tastendruck quittiert und mit der Ringtaste der Fernbedienung kann ich den Mauszeiger steuern, obwohl ich das nie wissentlich wo eingestellt hab  :Cool:  KDEKick will jedoch nicht so recht, Amarok etc lässt sich nicht bedienen (is auch nicht wichtig, hauptsache die Ziffern werden wie o.g. geschrieben).

Irgendwo hängt der Wurm drin, kann mir jemand bitte ne kurze Roadmap geben wie ich da nun ansetzen soll?

lg

----------

## Schnulli

Moin

ich kenne deine FB zwar nicht.. ist es eine sogen. X10 ?? aber eig sollte viel möglich sien, allerdings nicht alles.....

Als erstes solltest du sichergehen welche Tasten von deiner FB erkannt werden....

in der Konsole " #xev  " ( emerge xev ) und fleißig Tasten drücken... Beispeil....

```

KeyPress event, serial 34, synthetic NO, window 0x4e00001,

    root 0x15a, subw 0x0, time 125104991, (-911,42), root:(307,295),

    state 0x10, keycode 10 (keysym 0x31, 1), same_screen YES,

    XLookupString gives 1 bytes: (31) "1"

    XmbLookupString gives 1 bytes: (31) "1"

    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4e00001,

    root 0x15a, subw 0x0, time 125105154, (-911,42), root:(307,295),

    state 0x10, keycode 10 (keysym 0x31, 1), same_screen YES,

    XLookupString gives 1 bytes: (31) "1"

    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4e00001,

    root 0x15a, subw 0x0, time 125106044, (-911,42), root:(307,295),

    state 0x10, keycode 11 (keysym 0x32, 2), same_screen YES,

    XLookupString gives 1 bytes: (32) "2"

    XmbLookupString gives 1 bytes: (32) "2"

    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4e00001,

    root 0x15a, subw 0x0, time 125106239, (-911,42), root:(307,295),

    state 0x10, keycode 11 (keysym 0x32, 2), same_screen YES,

    XLookupString gives 1 bytes: (32) "2"

    XFilterEvent returns: False

```

Das ist das Ergebnis durch Tippen der Zahlentasten 1 und 2  :Wink: 

Und fein mitpinseln was die Ausgabe der einzelnen Tasten ist...... ( #xev > fb_tasten_test ?? )

Dann geht es dran der lircd conf beizubringen welche Tasten es sind, das wird spaßig werden und sicher nicht langweilig ^^

Irgenwo in der VDR WIki war ein nicht schlechter Artikel dazu.....

http://lirc.sourceforge.net/remotes/imon/

----------

## seyanora

Danke erstmal,

also leider ist mein Problem doch noch bisschen anders.. xev reagiert nur auf die "Maustasten" .. und das ist jetz auch grad mein Problem, dass die Fernbedieung quasi als USB-Maus erkannt wird... ich kann lirc zwar mit irrecord anlernen aber es tut sich danach auch nichts .. ich klemm mich Samstag nochmal dahinter .. irgendwie muss das doch gehen...

----------

## Schnulli

 *seyanora wrote:*   

> Danke erstmal,
> 
> also leider ist mein Problem doch noch bisschen anders.. xev reagiert nur auf die "Maustasten" .. und das ist jetz auch grad mein Problem, dass die Fernbedieung quasi als USB-Maus erkannt wird... ich kann lirc zwar mit irrecord anlernen aber es tut sich danach auch nichts .. ich klemm mich Samstag nochmal dahinter .. irgendwie muss das doch gehen...

 

hmmmm... evtl. solltest Du mal etwas genauer erklären was genau den per FB gesteuert werden soll und vorallem welche(s) Programm(e) ... Du kannst längst nicht alles mit FB steuern, grundsätzlich muß die app mit "Funktions Tasten" zur Steuerung umgehen können ...... Wenn das app es nicht kann (die meisten).. dann wirds lustig.

Ich sagte ja schon wenn du mit lirc(d) etwas außer der Reihe willst, wirds spaßig und nicht langweilig.

Du solltest Dir auch im klaren darüber sein das Du einiges im System und mit deinen inputdevices (Tasta & Maus) durcheinander bringen kannst wenn du zwangsweise die FB zum steuern setzt..... Ich kann Dir nur dazu raten das der PC an dem du das testest einen laufen sshd hat damit Du notfalls Remote drauf zugreifen kannst  :Wink: 

Wenn Dein app mit Funktions Tasten als Steuerung umgehen kann, gut, dann nutze es und lerne Dein lirc und app an...  Wenn du aber z.B. Lircd an VDR bindest, dann wirds nichts mehr mit anderen app.... da würde dann nur ein Neustart von vdr ohne lircd Support helfen oder eine andere FB zusätzlich nutzen.....

Eine FB ist kein "Universal Werkzeug" sondern auf spezielle Anwendungen und Bereiche zugeschnitten....

Genau aus diesen Grund nutzen wir schnurlos "Mini Keyboards" die Maustasten und ein Touchpad oder Trackball haben.. Damit geht dann fast alles.... wenn Du willst.....

Ich habe vor einiger Zeit,  auf Kundenwunsch, viel Zeit investiert um eine solche Tasta, die 3 Funktionstasten Layouts hat, anzulernen.... Alleine alle Tasten  zu definieren war schon .. tja... wie soll ich sagen.. ein Krampf??.. so in etwa ^^

Wie gesagt... 3 Funktionstasten Layouts..... .. damit können dann (min.) 4 Programme gesteuert werden

Hand auf´s Herz, wenn das mit einer einfachen FB so einfach sein würde ein ultimatives Werkzeug für den (Linux) PC zu haben.. würden schon viele auf dem Markt sein........

----------

## seyanora

Also, um das mal etwas zu präzisieren was ich denn vorhab, das ganze ist teil einer Technikerarbeit und damit etwas kompliziert:

Erstmal sieht die (momentane, soll später auch durch eine "eigene" ersetzt werden) Fernbedienung so aus:

http://wiki.linuxmce.org/images/2/22/IMON_PAD_remote.jpg

In dem Projekt soll eine in Qt programmierte GUI-Anwendung programmiert werden, die 8 Relaisausgänge am LPT Port schalten kann. Dies soll sowohl über ein Touchscreen, via Ethernet und eben über die IR-Fernbedienung funktionieren. Die Oberfläche hat dazu 2x8 Schaltflächen, die man einfach mit der Maus bzw. dem Touchscreen drückt um das gewünschte Relais zu schalten. Oder man drückt auf der Tastatur 1 um Relais 1 anzuschalten und wieder 1 um es wieder auszuschalten usw.

Mit der Fernbedienung kann ich leider nur den Mauszeiger mit einer "Pad-Taste" über die Schaltflächen bewegen und mit einer weiteren Taste, die ein Mausklick simuliert, die Schaltfläche anklicken, also verhält sich im Moment die FB quasi wie eine Maus. Ist prinzipiell schon mal gut, aber ich hätte es eben gern, dass die Taste 1 auf der Fernbedienung eben auch eine 1 unter KDE erzeugt und somit das Programm ähnlich wie mit der normalen Tastatur damit bedienbar wird. Ich dachte eigentlich, dass das mit KDEKick ne Sache von 2 Minuten ist, mit der mitgelieferten Windows-Software kann ich auch jeder Fernbedienungstaste ein beliebiges Zeichen problemlos zuordnen und z.B. den Editor damit zutexten. 

Aber wenn das unter Linux so ein Act ist, hab ich mich das doch etwas unterschätzt bzw. dafür wohl den komplett falschen Ansatz gewählt. Oder ist das ganze nun doch viel einfacher, wenn ich das nun hier etwas klarer beschrieben hab?

----------

## Schnulli

 *seyanora wrote:*   

> Also, um das mal etwas zu präzisieren was ich denn vorhab, das ganze ist teil einer Technikerarbeit und damit etwas kompliziert:
> 
> Erstmal sieht die (momentane, soll später auch durch eine "eigene" ersetzt werden) Fernbedienung so aus:
> 
> http://wiki.linuxmce.org/images/2/22/IMON_PAD_remote.jpg
> ...

 

Moin seyonara,

ah ! jetzt kann ich dir folgen. Das sollte grundsätzlich gehen... ein wenig programmier (scripting Aufwand) würde es sein aber grundsätzlich sollte das umsetzbar sein.

Da sagtest da etwas von Wi**** aus Re** *schüttel* (nehm dann lieber MAC ^^)

Lass mich kurz erklären (Bildersprache) wie so etwas unter Wi** funktionieren würde.....

Wi** nutzt für so etwas dll , Treiber und weiteres um überhaupt erkennen zu können das gerade etwas passiert.... Nachdem das bemerkt wurde wird es wiedrum auf dll´s umgeleitet die möglicherweise gerade einen Treiber finden der sich dafür zuständig fühlt.... einer weiteren dll sagt das er etwas "übergeben" möchte.. und mit Glück nach vielen vielen ms Sekunden erhälts du ein Ergebnis, das aber nicht undebingt das sein muss was du ihm gesagt hast ^^ Wenn du Pech hast verschwindet aber irgendwo in dieser Kette das Signal einfach so.... Das ist halt WIndows ^^

(ok-ok.. ein wenig sehr makaber dargestellt, kommt der Realität aber SEHR nah  :Smile:  )

Linux kommuniziert DIREKT mit der Hardware..... 

Wenn auf Bus xx von der HW ID xx ein Signal xx  gesendet wird, erkennt Linux das... Jetzt geht es nur noch darum das DU Linux sagen musst was es mit diesem Signal anfangen soll.... Lic(d) ist da sicherlich ein guter Helfer.... Wenn Dein app dann damit umgehen kann.... perfekt. Ob die Eingabe dann vom Touchscreen, Tastatur, Browser oder FB kommt ist völlig egal .... das ist dann eine "& Verkettung" der möglichen (InputEvent)Eingaben. Hier mußt Du aber aufpassen das es keine Überlappungen (sich beißen) gibt.

Was mir noch ein wenig schleierhaft ist.... soll die "1" wirklich dargestellt werden auf "einem Display" oder einfach übergeben werden und dann der Zustand als "1" =gesetz , angezeigt werden? Ich bin für Variante 2... übergeben udn dann in "einer Anzeige" darstellen das "1" gesetzt (gedrückt) wurde...  Die Zahl "2" würde bei -gesetzt- übrigens auch den Status "1"=gesetzt haben ^^

Erinnert mich gerade irgendwie an SPS Steuerungen  :Wink:  ... ich hoffe das Du den Wink mit dem Zaunpfahl verstanden hast  :Wink: 

ähm.... fällt mir gerade noch dazu ein... In der Gebäudetechnik, z.B. eine einfach Rolladen Steuerung usw..... in der Sicheheitstechnik... wird das schon lange genau so gemacht... Sourceforge und das Inet sind Dein Freund, man muß das Rad nicht zweimal erfinden  :Wink: 

----------

## seyanora

Danke erstmal für die Antwort,

Also ich hatte nicht vor in meinem Programm direkt das Signal abzugreifen, das wär mir ne Nummer zu groß. Entweder ein Keypress-Event oder das Anklicken der jeweiligen Schaltfläche oder ein über den Socketport empfangenes Signal führt dazu, dass das gewünschte Relais geschaltet wird. Ich drück 1, Relais 1 schaltet. Ich drück 2, Relais 2 schaltet. Ich klick auf Button 1, Relais 1 schaltet wieder aus. Das funktioniert problemlos.

Dabei hoffte ich eben zusätzlich auf ein Tool, dass im Hintergrund läuft und die Tastendrücke der Fernbedienung in so ein Keypress-Event umleitet. Meine Anwendung muss das ja gar nicht wissen ob die 1 von Tastatur oder von der Fernbedienung empfangen wurde. Da hab ich mich wohl gründlich vertan, ich dachte ich kann in der lircd.conf Keybindings zuweisen so wie ich lustig bin: Auf Taste 3 wird 3 geschrieben, die "App Exit" Taste bekommt Alt+F4 zugewiesen usw. 

Und genau da ist mein Problem, die Fernbedienung hängt rein als /dev/input/mouse1 bzw. ir-event drin, die P+ / P- Taste dient als Scrollrad, das Pad zum Bewegen des Mauzeigers und 2 weitere Tasten der FB als Rechts- und Linksklick. Dies wurde seit der Installation des imon Kernel-Modules automatisch so konfiguriert. Was ich in lircd.conf etc reinschreib hat überhaupt keine Auswirkung, lediglich bei irrecord kann ich die Tasten einlernen und finde entsprechende Konfiguration dann in der lircd.conf, aber ohne tatsächliche Funktion.

Der Touchscreen zeigt nur 2x8 Buttons an und dient lediglich zur Bedienung. Der Benutzer drückt auf den Bildschirm wo die Oberfläche des Programms zu sehen ist, das erkennt das als Mausklick und schickt den entsprechenden hex Wert an den LPT Port um das gewünschte Relais zu schalten. Wenn das aber mit der Fernbedienung solche Schwierigkeiten macht kauf ich mir ne Funktastatur mit abnehmbaren Numpad und nehm das zur Steuerung, schade wärs halt trotzdem weil das eigentlich im Projekt so vorgegeben ist.

----------

## Schnulli

 *seyanora wrote:*   

> Danke erstmal für die Antwort,
> 
> Also ich hatte nicht vor in meinem Programm direkt das Signal abzugreifen, das wär mir ne Nummer zu groß. Entweder ein Keypress-Event oder das Anklicken der jeweiligen Schaltfläche oder ein über den Socketport empfangenes Signal führt dazu, dass das gewünschte Relais geschaltet wird. Ich drück 1, Relais 1 schaltet. Ich drück 2, Relais 2 schaltet. Ich klick auf Button 1, Relais 1 schaltet wieder aus. Das funktioniert problemlos.
> 
> Dabei hoffte ich eben zusätzlich auf ein Tool, dass im Hintergrund läuft und die Tastendrücke der Fernbedienung in so ein Keypress-Event umleitet. Meine Anwendung muss das ja gar nicht wissen ob die 1 von Tastatur oder von der Fernbedienung empfangen wurde. Da hab ich mich wohl gründlich vertan, ich dachte ich kann in der lircd.conf Keybindings zuweisen so wie ich lustig bin: Auf Taste 3 wird 3 geschrieben, die "App Exit" Taste bekommt Alt+F4 zugewiesen usw. 
> ...

 

Moin

halt halt halt.... keine Verwirrung stiften (du & ich) ^^

um die "Signale" kümmert sich Lirc(d) ...... wenn in der conf dort alles sauber eingetragen ist kannst du es auch nutzen.....

Dein app sollte grundsätzlich in der Lage sein über Tastenkombinationen oder einzelne Tasten steuerbar zu sein..... wenn Du diese Hürde genommen hast kannst du alles von lirc an dein app übergeben und es funktioniert.....

Schau Dir als Bespiel VLC... Amarok und andere Programme an die über "Tastenkombinationen"  gesteuert werden können..... Bringe es deinem app bei das zu können und du hast gewonnen....

Nein.. in der lirc conf kannst du nicht beliebig nach Lust und Laune etwas rein pinseln ^^ .. lirc kümmert sich eig. nur darum die eingaben von FB zu "vewalten" (mehr oder weniger) ... die Idee mit irrecord ist hier die richtige.....

hehe... mal langsam hier ^^ So schnell wollen wir doch wohl nicht die Flinte ins Korn werfen oder? Meinst du das eine Funk Tasta das anders macht ?? (zumindest wie die SIgnale eingehen und dann ausgewertet werden)....

Also.. soooo weit weg ist eine Tasta von einer FB nicht. Das was unterscheidet ist das sich das eine als Tasta anmeldet, das andere als FB..... Das mußt deinem app nur beibringen über Tasten EIngaben gesteuert zu werden... der Rest kommt dann fast von selbst..  

Beispiel.. laut/leise auf Tasta und FB haben ein identisches Ergebnis..... lirc empfängt.... irrecord setzt um.. zack wirds lauter/leiser

Wenn die Tasten von deiner FB die du einsetzen willst erkannt werden.... und? was fehlt?...... fb>lric>?>app>ausgabe_lpt>  :Idea:   :Wink: 

So, ist der Knoten nun geplatzt?   :Laughing: 

Die 2. Lösung ist dir ja zu Hardcore mäßig ^^ also lassen wir es ^^ Die Idee es gleich mit Mini Tasta zu machen halte ich pers. für die beste Lösung ... gehen wird beides (früher oder später) ^^

Geh mal bei Trust, Hama, Logitech usw nachsehen was die im Angeot haben  :Wink: 

Hier.. ein direkter Vergleich.. welches ist denn nu die FB? oder etwa beide?

----------

## seyanora

Soooo, melde mich mal wieder zurück

bin nun ein deutlichen Schritt weiter, ich kann Amarok etc mit der FB nun steuern und mir mit irexec auch eigene Texte auf die Konsole bringen. Lieber nicht fragen wie, aber das funzt nun.

Jetzt brauch ich aber dennoch Hilfe, ich hoffe du kannst bissel C programmieren  :Wink: 

Wie bind ich das ins Programm ein, dass es auf externe Eingaben durch lirc etwas tut? Übers Netzwerk hab ich das schon recht gut hingekriegt, mittels einfachen if-abfragen .. also "if empfange zeichen xy, then do xy"...  ich hoffe das verhält sich so ähnlich auch mit lirc, weiss aber gar nicht wie ich die abfragen soll...

Dann noch ein zweites Problem, zwar OT aber vielleicht auch son Hinweis.. ich hab ein LCD-Display an /dev/lcd0 hängen. Wenn ich da auf der Konsole echo "Hello World" >> /dev/lcd0 eingeb, erscheint hello world auf dem Display. Gibts da in C ne einfache Möglichkeit das auch anzusprechen (praktisch ein Kommando an die bash ausgeben) oder hab ich da ohne vorgegebene Funktion keine Chance?

lg  :Wink: 

EDIT: Hat sich alles erledigt. Funzt. Zwar nicht elegant, aber immerhin.

----------

