Logo OpenELEC Je possède un media-center sous OpenELEC 5 (Kodi 14), que je viens d’équiper d’un “récepteur” HDMI-CEC de Pulse-Eight. Cela permet beaucoup de souplesse et d’automatisation quant au contrôle, allumage et extinction des appareils, le tout avec une seule télécommande (celle de la télévision). Malgré tout, il y a quelques réglages à faire pour que tout fonctionne comme je veux. Je vais donc détailler tout cela.

Dans un premier temps, je vais rapidement détailler les réglages de contrôle mutuel de mes appareils (allumage et extinction) qui me conviennent. Dans un second temps, je vais configurer OpenELEC pour qu’il exploite au maximum les commandes provenant de la télécommande Samsung.

Articulation de ce billet :

Configuration d’allumage et d’extinction

Selon les équipements, la norme HDMI-CEC (en) permet d’allumer et d’éteindre les différents appareils indépendamment ou automatiquement.

J’ai donc une télévision Samsung UE46ES6710 connecté via un port HDMI (CEC et ARC) à un ampli Marantz NR1403. À cet ampli est aussi connecté, en HDMI, mon media-center OpenELEC.

Premier constat : pour une raison inconnue, ma télévision, ne permet pas d’allumer tous les appareils à partir de sa télécommande (le réglage en question se réinitialise à chaque extinction de la tv). Tant mieux, ce n’est pas ce que je veux faire.

Expression des besoins

Je présente ici mes besoins personnels. Les vôtres peuvent différer. Voici ce que je veux faire :

  • La télévision est indépendante. Elle s’allume sans allumer le reste des éléments, et elle s’éteint sans les éteindre ;
  • Par contre, elle est en retour contrôlée par les autres éléments. Quand j’allume le media-center, il allume l’ampli et sélectionne le media-center comme source, puis il allume la télévision (si elle est éteinte), et sélectionne la sortie HDMI vers l’ampli comme source vidéo.
  • Lorsque je veux écouter de la musique, je peux lancer une playlist, puis éteindre la télévision. La musique continuera d’être jouée sur l’ampli.
  • Lorsque j’éteins le media-center, cela éteint l’ampli, mais pas la tv. En effet, il m’arrive souvent de couper le media-center et de regarder les infos à la télé, par exemple.

Tout ceci est possible en personnalisant quelques réglages sur chacun des appareils concernés.

Réglages à modifier

Sur la télévision

Dans le Menu>Système>Anynet+ (HDMI-CEC), je met les réglages suivants :

  • Anynet+ (HDMI-CEC) : Activé (Pour activer la prise en charge générale des contrôles par HDMI-CEC) ;
  • Arrêt automatique : Non (Pour désactiver l’extinction des autres appareils à l’arrêt de la télévision) ;
  • Récepteur : Activé (je n’ai pas vu de différence en le désactivant).

Sur l’amplificateur

Dans le SETUP>Vidéo>Config. HDMI, je mets les réglages suivants :

  • HDMI Contrôle : Marche (Activation générale);
  • Désactiver cmde : Tous (pour que l’ampli puisse quand même être éteint par le média-center).

Laissez les autres paramètres par défaut.

Sur le media-center

Il faut aller dans le menu Système (Paramètres)>Système>Périphériques>Périphériques. Sélectionnez alors le périphérique nous intéressant. Pour moi il s’appelle “CEC Adapter”. Modifiez alors les options suivantes :

  • Dispositifs à démarrer au démarrage de Kodi : TV et ampli ;
  • Éteindre les dispositifs à l’arrêt de Kodi : Ampli ;
  • Quand la TV est éteinte : Ignorer.

Capture décran paramètres CEC Kodi

Et voilà, mon système réagit désormais comme je l’entends.

Réglage de la télécommande

On va maintenant chercher à lier chaque pression de bouton sur la télécommande de la télévision à une action précise dans OpenELEC. Pour savoir de quoi on parle, j’ai mis une photo de ma télécommande.

Il existe de nombreux billets et autres discussions qui traitent de ce sujet. Le présent billet ne fait que reprendre toutes ces informations en les réorganisant.

Les concepts sont les suivants :

  • Quand un récepteur HDMI-CEC est connecté à la TV, celle-ci lui envoie des codes à chaque pression de certains boutons sur la télécommande ;
  • Certains boutons ne génèrent aucun code HDMI-CEC, ils ne sont gérés que par la TV sans être transmis aux autres appareils ;
  • Pour chaque télécommande, de chaque marque, il faut déterminer quels sont ces codes, et à quel bouton ils correspondent ;
  • Une fois que l’on connaît tous les codes de notre télécommande, il faut éditer un fichier de configuration dans Kodi ;
  • Ce fichier de configuration permet de corriger certaines comportements par défaut qui sont erronés, et d’ajouter des actions, en fonction du contexte. Il existe un fichier de configuration par défaut, mais on en crée un deuxième qui prend le dessus pour les quelques touches que l’on modifie.

On va voir tout ça, étape par étape.

Identifier les codes

Dans un premier temps, il faut identifier les codes qui sont reçus par le media-center à chaque appui de touche. Pour ce faire, on va activer les logs de Kodi, et surveiller les événements à chaque appui de touche.

Activer les logs de Kodi

La gestion des logs de Kodi est expliquée en détail sur le wiki officiel.

On peut les activer dans l’interface (menu SYSTÈME (Paramètres)>Système>Debogage) : activer le mode debug, activer le journal spécifique aux composants, et sélectionner le composant CEC uniquement, pour avoir des logs très détaillés.

On peut aussi les activer dans la console, en se connectant en ssh au media-center, et en éditant un fichier :

vetetix@localhost:~$ ssh root@ip-du-mediacenter
kodi-salon:~ # nano /storage/.kodi/userdata/advancedsettings.xml

Dans ce fichier, ajoutez le loglevel et le debug, entre les balises globales :

<advancedsettings>
  <loglevel>1</loglevel>
  <debug>
    <extralogging>true</extralogging>
    <setextraloglevel>64,2048,32768</setextraloglevel>
    </debug>
</advancedsettings>

Enregistrez le fichier (Ctrl+x), puis redémarrez le media-center.

Lire les codes

Maintenant, reconnectez-vous au media-center, surveillez le fichier de log, et appuyez sur les touches de votre télécommandes :

XBMC-salon:~ # tail -f /storage/.kodi/temp/kodi.log

Voici ce que ça donne pour un appui sur la touche “Exit” :

12:12:24 T:140479907747584   DEBUG: CecLogMessage - >> 01:44:0d
12:12:24 T:140479907747584   DEBUG: CecLogMessage - >> TV (0) -> Recorder 1 (1): user control pressed (44)
12:12:24 T:140479907747584   DEBUG: CecLogMessage - key pressed: exit (d)
12:12:24 T:140479907747584   DEBUG: PushCecKeypress - received key d8 duration 0
12:12:24 T:140480410220416   DEBUG: OnKey: menu (0xd8) pressed, action is Back
12:12:24 T:140480410220416   DEBUG: CGUIWindowManager::PreviousWindow: Deactivate
12:12:24 T:140479907747584   DEBUG: CecLogMessage - >> 01:45
12:12:24 T:140479907747584   DEBUG: CecLogMessage - >> TV (0) -> Recorder 1 (1): user control release (45)
12:12:24 T:140479907747584   DEBUG: CecLogMessage - key released: exit (d)
12:12:24 T:140479907747584   DEBUG: PushCecKeypress - received key d8 duration 344

À la ligne 3, on voit bien que c’est la touche “exit” qui a été utilisée, et à la ligne 5 que ça a engendré l’action “Back”.

À partir de là, une recherche dans le fichier /usr/share/kodi/system/keymaps/remote.xml nous indique que c’est le code bouton “back” qui génère l’action.

On en déduit donc que la touche “Exit” de la télécommande correspond au code bouton “back” de Kodi.

Notons que chaque bouton n’a pas le même comportement (la même “action”) dans tous les contextes. En testant dans un menu, et pendant la lecture d’un film, on aura un résultat différent. Cela permet de différencier certains boutons ayant le même comportement dans un contexte précis.

De cette manière, et en me basant sur le travail de ce blogueur, j’ai édité ce tableau qui correspond à ma télécommande (boutons de gauche à droite, de haut en bas) :

Photo telecommande

Touche Transmis Code
Alim Non
Source Non
HDMI Non
1 Oui one
2 Oui two
3 Oui three
4 Oui four
5 Oui five
6 Oui six
7 Oui seven
8 Oui eight
9 Oui nine
TTX/MIX Non
0 Oui zero
PRE-CH Oui teletext
Vol+ Oui Non exploitable
MUTE Oui Non exploitable
Prog+ Oui pageplus
Vol- Oui Non exploitable
CH LIST Oui livetv
Prog- Oui pageminus
MENU Non
SMART Non
GUIDE Oui guide
TOOLS Non
UP Oui up
INFO Non
LEFT Oui left
ENTER Oui select
RIGHT Oui right
RETURN Oui title
DOWN Oui down
EXIT Oui back
A Oui red
B Oui green
C Oui yellow
D Oui blue
Family Story Non
SEARCH Non
3D Non
SUPPORT Non
P.SIZE Non
AD/SUBT Non
RW Oui reverse
PAUSE Oui pause
FF Oui forward
REC Oui record
PLAY Oui play
STOP Oui stop

S’il manque une touche

J’ai fait ce travail avec une TV Samsung, mais les TV d’autres constructeurs peuvent envoyer des codes différents. Il faut parfois faire quelques essais pour trouver la correspondance touche/code.

Par exemple, la touche CH LIST pouvait correspondre à livetv ou mytv. J’ai dû modifier l’action liée à ces deux codes pour les différencier et trouver le bon (voir section suivante).

Ce post dans le forum de Kodi explique comment on peut retrouver le code d’à peu près toutes les touches (il mentionne le fichier ButtonTranslator.cpp.

Associer chaque touche à une action appropriée

On va désormais modifier le fichier remote.xml pour le corriger et le personnaliser. Il ne faut pas toucher au fichier initial, mais en créer un second dans le dossier .kodi/userdata/keymaps/, dont le contenu complétera celui du premier, tout en ayant priorité dessus.

On peut en créer un vierge, mais je préfère partir d’un fichier complet et virer ce qui ne m’est pas utile. Cela permet de voir ce qui est configuré par défaut, de le corriger, et de découvrir certaines actions utiles mais liées à un bouton non exploité.

XBMC-salon:~ # cp /usr/share/kodi/system/keymaps/remote.xml /storage/.kodi/userdata/keymaps/remote.xml

Maintenant, il ne reste plus qu’à éditer le fichier, soit en ligne de commande avec nano, soit avec un éditeur “graphique” en allant le chercher via l’accès samba (chez moi ça se trouve à l’adresse “smb://kodi-salon/userdata/keymaps”).

La chose la plus problématique est le fait que le bouton “Exit” (code “back”) joue le rôle du bouton “Back” (code “title”), et que celui-ci ouvre un menu contextuel. Dans un premier temps, je dois donc systématiquement commenter les actions de “title” et remplacer <back>Action</back> par <title>Action</title>.

Ensuite, il ne reste plus qu’à étudier la configuration existante, et à modifier ou ajouter des règles. On connait les codes, et les actions disponibles sont listées ici.

Personnellement, j’ai voulu configurer les actions suivantes :

  • Un lien pour montrer le panneau des favoris (ActivateWindow(Favourites)) ;
  • Un lien vers la sélection (grâce à une playlist) des films et séries en français (ActivateWindow(VideoLibrary,special://profile/playlists/video/FR.xsp)) ;
  • Un lien pour lancer le “Party Mode” (PlayerControl(PartyMode))
  • En lecture, des liens rapides pour chercher les sous-titres (ActivateWindow(SubtitleSearch)), passer de l’un à l’autre (NextSubtitle), ou la même chose pour la langue de l’audio (AudioNextLanguage).

Le fichier complet est disponible ici. Regardez-le pour le comprendre en détails. Pour chaque section du fichier, qui correspond à un environnement dans l’interface de Kodi, il faut configurer chaque touche (ou les laisser par défaut, ce qui est souvent suffisant). Internet regorge d’autres exemples, je vous laisse les trouver (le canard est ton ami).

Redémarrez, et profitez de votre télécommande, confortablement installés dans votre canapé.

Ressources :