Nachdem ich nun länger nicht mehr das Projekt "Fernbedienung" angerührt habe und es so belassen habe, wie es funktioniert hat... Habe ich mich nun mal wieder daran gewagt und bin einen sehr großen Schritt voran gekommen.
So habe ich herausgefunden, dass jede Taste der Fernbedienung eine "ID" zugewiesen bekommt. Teilweise eine Nummer, teilweise weist Kodi aber auch einen Befehl in Form von Text zu, der nicht identisch mit den definierten Begriffen beim Anlernen ist (wie z.B. KEY_BLUE für eine blaue Taste usw.).
Der Anstoß kam über ein Zufallsfundstück, als ich via SSH mit meinem FTP Programm am Pi verbunden war. Hierbei bin ich über eine Datei gestolpert, die sich "gen.xml" nennt und sich im Ordner "keymaps" befand. Diese Datei wurde vom Keymaps Editor erzeugt.
Pfad:
/storage/.kodi/userdata/keypmaps/gen.xmlDie Datei war genau so aufgebaut wie hier auf Powerpi in der Anleitung für die individuelle Zuweisung von erstellte Aktionen (z.B. zum Wechsel der Hyperion Quellen) von Befehlen der Fernbedienung. Im Programm vom Keymap Editor hatte ich bis dato exakt eine Taste definiert... Eine Rote. In der besagten Datei sah das dann so aus:
Code: Alles auswählen
<keymap>
<home>
<keyboard>
<key id="251">activatewindow(favourites)</key>
</keyboard>
</home>
</keymap>
Der Druck auf die rote Taste hat die Favoriten geöffnet und wie man sieht, hat die rote Taste vom Keymap Editor eine ID bekommen. Nach Recherchen im Netz konnte ich dann herausfinden, dass man über das Logfile von Kodi diese individuellen ID's herausfinden kann.
Also befolgte ich die Anleitung von
http://kodi.wiki/view/Log_file/Advanced eine "advancedsettings.xml" Datei an, die in den Ordner "userdata" muss.
Pfad: /storage/.kodi/userdata/advancedsettings.xml
In diese Datei habe ich diesen Inhalt eingefügt (entsprechend der Anleitung), um nur die Aktionen von Eingabegeräten aufzuzeichnen:
Code: Alles auswählen
<advancedsettings>
<loglevel>2</loglevel> <!-- Change this to "1" to hide the on-screen debug log text -->
<debug>
<extralogging>true</extralogging>
<setextraloglevel>64,2048,32768</setextraloglevel>
<showloginfo>true</showloginfo> <!-- Change this to "false" to hide the on-screen debug log text -->
</debug>
</advancedsettings>
Das Ergebnis war dann perfekt, denn im Logfile waren tatsächlich die ID's zu finden. Der Kodi Log befindet sich hier:
Pfad:
/storage/.kodi/temp/kodi.logDer Logfile hat natürlich sehr viel Text, aber wenn man ihn nach einer Eingabe der Fernbedienung öffnet, kann man ans Ende springen und findet hier dann in einer der vielen Zeilen ein Eintrag der sich "DEBUG: OnKey:" nennt. Direkt dahinter befindet sich dann die ID der gedrückten Taste wie z.B. "DEBUG: OnKey: 251 (0xfb)". Die ID lautet in diesem Fall "251". Diese ID stimmte exakt mit der ID überein, die ich in der gen.xml Datei gefunden habe für meine rote Taste (siehe weitere oben im Text). Also ein Volltreffer.
Wer mag, kann den Inhalt vom Kodi log auch einfach löschen und die leere Datei sichern. Das erspart einen dann das ständige neuladen und durchscrollen des gesamten Logfiles. Löschen sollte man die Datei hingegen nicht, sonst funktioniert das ganze nicht mehr und man muss den Pi neu starten.
Über den Log konnte ich so nun für jede Taste die eigene ID erfahren die KODI vergeben hat und damit ist es mir nun gelungen, alle Aktionen die ich mir gewünscht habe, frei zuzuweisen.
Dieser Weg ist sicherlich nicht der aller einfachste. Vielleicht kennt jemand eine bessere Lösung die ID in Erfahrung zu bringen, aber bis dahin ist dies vielleicht auch für andere eine Lösung, eine beliebige Fernbedienung im vollen Umfang zu nutzen wie man es möchte, ohne Einschränkungen.
Achja und wenn man fertig ist mir diesem Projekt, kann man die advancedsettings.xml wieder löschen. Sonst wird das Logfile die ganze Zeit weitergeführt und bläht sich immer mehr auf mit jeder Eingabe die man in Kodi macht.
Meine fertige gen.xml Datei sieht nun aktuell übrigens so aus:
Code: Alles auswählen
<keymap>
<global>
<keyboard>
<!-- ROT --><key id="251">activatewindow(favourites)</key>
<!-- GRUEN --><key id="252">XBMC.System.Exec("/storage/.kodi/userdata/hyperion_toggle.sh")</key>
<!-- GELB --><key id="253">XBMC.System.Exec("/storage/.kodi/userdata/hyperion_hue_aktivieren.sh")</key>
<!-- BLAU --><key id="254">XBMC.System.Exec("/storage/.kodi/userdata/hyperion_grabber_aktivieren.sh")</key>
</keyboard>
</global>
</keymap>
Die Infos zwischen <!-- XXX --> sind von mir selbst gesetzte Hinweise, welche Taste es ist. Sie werden nicht beachtet vom System und sind auch nicht relevant oder erforderlich. Ich denke man kann im Ordner "keymaps", wo sich die gen.xml Datei befindet, auch andere xml Dateien ablegen. Ich habe einfach aus Bequemlichkeit die vorhandene benutzt. Wer den Keymap Editor nicht installiert hat in Kodi, muss vermutlich den Ordner "keymaps" manuell anlegen.
ID's können, wie gesagt, nicht nur als Zahl existieren. So lautet z.B. eine ID "homepage" und die Taste auf der FB besitzt den Vordruck "Play/Pause". Von Kodi wurde sie auch als Play/Pause korrekt interpretiert. Die Taste "Mute" auf der FB besitzt die ID: launch_app1_pc_icon.