Piloter Kodi avec sa Google Home

Qu’on l’apprécie ou pas, force est de reconnaître que les Google Home s’incrustent de plus en plus dans notre quotidien (et notre vie privée..). Elle reste un gadget pour certaines personnes qui ont pu être déçues par ses fonctionnalités qui peuvent sembler amusantes mais assez gadget au final.

Par contre, dans le monde de la domotique, elle a vraiment apporté une vraie avancée. Les solutions précédentes étant beaucoup moins performantes au niveau de la reconnaissance vocale, c’est devenu un réel phénomène et beaucoup ont finalement craqué à cause de ses nombreuses possibilités dans le domaine, malgré les réticences du tout-connecté et du méchant Google.

Pour ma part, je l’utilise pour la radio ou la musique en fond sonore. Mais aussi et surtout avec Jeedom, en complément de mes scénarios automatiques. Mes volets s’ouvrent et se ferment donc automatiquement tous les jours selon des critères dynamiques qui me correspondent mais je me sers de mes Google Home pour un besoin spontané de fermer ou ouvrir mes volets. Elles me sont utiles aussi pour annoncer que je me couche (« OK Google, je me couche » : je suis alors prévenu si des fenêtres ou portes (gérées par le plugin Xiaomi Home) sont restées ouvertes, mes lumières (plugin Hue) s’éteignent et j’enclenche mon alarme(passage au mode Nuit du plugin Mode). Je pense ajouter une demande de lancement de radio ou musique sur Spotify pour une durée déterminée, en répondant une question posée par la Google Home bien sûr, à l’aide de la fonction Ask de Jeedom et du plugin Google Cast pour le traitement de la réponse).

Le matin, au réveil, à l’aide du plugin google Cast, la belle voix de ma Google Home m’annonce la météo du jour, la circulation (à partir du plugin Jeedom Waze) et me souhaite une bonne journée. Elle lance ensuite la radio dans toute la maison (sur toutes les Google Home, avec un volume adapté pour chacune).

Et de nombreuses autres actions dont principalement la partie multimédia. Par exemple, un « OK Google, soirée cinéma » ferme mes volets, passe la lumière du salon en lumière tamisée et éteint les autres lumières, lance le vidéo-projecteur, descend l’écran et affiche KODI. Il ne reste plus qu’à sélectionner un bon film à partir de la télécommande Logitech (plugin Harmony Hub) qui contrôle la navigation dans KODI, le volume de l’ampli et la possibilité de changer d’activité (regarder la télé, jouer sur XBox, ..)

Il ne manquait plus qu’à se passer de la télécommande en pilotant KODI à la voix à l’aide de la Google Home. C’est ce que nous allons découvrir dans cet article !

J’ai donc eu l’idée d’écrire un scénario après avoir découvert l’article suivant décrivant comment piloter KODI par une Google Home de façon « autonome ». En étudiant cette solution, j’ai vu qu’il y avait moyen d’intégrer cette solution dans Jeedom.

https://github.com/OmerTu/GoogleHomeKodi

Avantages :

  • On le verra plus tard, cette solution nécessite de passer par IFTTT, ce qui impose d’ouvrir un accès extérieur au serveur implémenté. Accédant à Jeedom depuis l’extérieur, je n’aurai donc pas besoin d’en ouvrir un supplémentaire.
  • La demande effectuée à KODI passant par Jeedom, je pourrai intercepter l’action demandée et effectuer des traitements supplémentaires en fonction de cette demande (« OK Google, kodi lance le film ‘Seul sur Mars' » : j’éteins les lumières car le film va démarrer, puis je transmets la demande à KODI. « OK google, kodi pause » : j’allume la lumière tamisée du salon, puis je transmets à KODI, etc..)

Et maintenant, passons au concret. Voilà actuellement, les différentes possibilités développées par mon scénario :

  • OK Google, Kodi lance le film ‘Seul sur Mars’ : lance le film donc
  • OK Google, Kodi pause
  • OK Google, Kodi reprise (ou OK Google, Kodi lecture) : reprise du film après une pause
  • OK Google, Kodi stop : arrêt du film
  • OK Google, Kodi coupe le son
  • OK Google, Kodi baisse le son / OK Google, Kodi monte le son
  • OK Google, Kodi relance le film ‘Seul sur Mars’ (reprise du film le lendemain, au moment où il a été arrêté)
  • OK Google, Kodi info film : affiche les infos du film en cours de lecture à l’écran
  • OK Google, Kodi OK, OK Google, Kodi retour, OK Google, Kodi monte, OK Google, Kodi descend : actions de navigations dans le menu Kodi
  • OK Google, Kodi Netflix : lance Netflix si l’extension Netflix a été installée
  • OK Google, Kodi destination salon : possibilité de préciser sur quel Kodi les demandes à suivre seront effectuées. Utile seulement si plusieurs Kodi sont installées dans la maison.
  • D’autres commandes pourront être ajoutées en fonction des tests à venir (lancer un film au hasard, lancer un film au hasard du genre ‘Comédie’, lancer un film au hasard de 2010, gérer des playlist musicales..)

Le principe de fonctionnement sera le suivant :

  • Construction des applets IFTTT pour la construction des phrases autorisées pour les demandes à Google Home
  • Réception des requêtes provenant de IFTTT par un scénario Jeedom
  • Traitement de ces requêtes par le scénario Jeedom pour l’envoi d’une nouvelle requête adaptée pour le serveur GoogleHomeKodi
  • Traitement de cette requête par le serveur pour envoi à Kodi

Préparation du paramétrage :

  • Depuis Kodi, aller dans le menu « Paramètres » / « Services », menu « Contrôle », section « Serveur Web », sélectionnez « Autoriser le contrôle à distance via HTTP » et « Autoriser le contrôle à distance par des programme sur ce système« . Entrer un nom d’utilisateur (‘kodi’ par défaut), un mot de passe et le port (8080 par défaut).
  • Installer le serveur de la solution GoogleHomeKodi sur un Raspberry Pi que vous utilisez déjà par exemple (Pour ma part, j’utilise celui de mon Magic Mirror). Je vous laisse suivre le détail de l’installation expliquée sur la page du lien donnée précédemment (paragraphe « How to setup », B.2)
    • Après installation de Node.js (si pas déjà installé), se positionner dans le répertoire où on souhaite installer le serveur
    • exécuter git clone https://github.com/OmerTu/GoogleHomeKodi.git
    • cd GoogleHomeKodi
    • npm install
    • Dans le répertoire GoogleHomeKodi, recopier et renommer le fichier kodi-hosts.config.js.dist en kodi-hosts.config.js
    • Modifier le contenu de ce fichier en fonction de votre Kodi :
      • Pour exports.kodiConfig, renseigner l’adresse IP de Kodi (depuis Kodi, aller dans le menu « Paramètres » / « Infos sur le système », menu « Résumé »), l’utilisateur et le mot de passe saisis précédemment.
      • Pour exports.globalConfig, renseigner le token IFTTT utilisée dans les applets IFTTT (authToken), le port de l’application (8099 par défaut) et la clé Youtube (optionnel).
      • Pour utiliser plusieurs Kodi, refaire le même paramétrage pour les autres configurations Kodi souhaitées (un exemple est présent en commentaire dans le fichier)
      • Pour commencer par vos tests, lancer la commande node server.js dans le répertoire d’installation.
      • Suivre les instructions du lien d’installation pour créer un démon permettant le lancement automatique du serveur au démarrage du Raspberry Pi (création du fichier /etc/systemd/system/kodiassistant.service en adaptant votre lien du fichier server.js, exécution de l’instruction sudo systemctl enable kodiassistant.service puis sudo reboot pour redémarrer le Raspberry Pi)
  • Remarque :
    • Bizarrement, pour que le serveur se lance sans erreur, j’ai dû commenter les lignes suivantes du fichier server.js :

//try {
        let userRequest = request.query ? request.query.q : '';
        Helper.kodiShowError(request, response, userRequest + ': ' + publicError);
//} catch {
        // swallow early error handling error
//}

Vous pouvez valider que l’installation du serveur est correcte depuis son url : http://192.168.0.123:8099/ pour moi. Il suffit alors de tester avec le bouton « Execute! ». Vous pourrez ensuite tester les différents mots-clés pour les actions disponibles du serveur en remplaçant « /koditestconnexion » par « /playpause par exemple.

Votre serveur est prêt à recevoir les demandes effectuées par Jeedom et à les envoyer aux Kodi paramétrés dans le fichier de configuration détaillé précédemment. Nous allons donc passer à l’écriture du scénario Jeedom.

  • Il faut donc créer un scénario avec une simple action CODE en insérant le code récupéré ici : jeedomKodiActions.php
  • Modifier le code :
    • $kodiIds = array(‘chambre‘,’salon‘); // lister la liste de vos Kodi correspondant à celle paramétrée dans le fichier de configuration du serveur (voir plus haut : kodi-hosts.config.js)
    • $tags[‘#urlServer#’] = « http://192.168.0.123:8099« ; // Url du serveur GoogleHomeKodi
    • ‘token’ => ‘MyAuthTokenSharedWith_IFTTT_Applet‘ // saisir le token du fichier de configuration du serveur
  • Récupérer la valeur de l’Id du scénario (utile pour la configuration des applets IFTTT)

Il reste maintenant à créer les applets IFTTT qui permettront de créer les demandes vocales aux Google Home.

La construction de ces applets est basée sur le principe suivant :

  • Sélectionner « My Applets », puis « New Applet »
  • Créer l’applet sous la forme IF « Google Assistant » then « Web Request »

Le paramétrage de ces applets est basée sur les principes suivants :

Phrase sans paramètre (ex : Pause)

  • Google Assistant (this)
    • choose trigger « Say a simple phrase« 
    • What do you want to say? Kodi pause
    • What do you want the Assistant to say in response? ok
    • Language : French
    • Create trigger
  • Webhooks (that)
    • Choose action service « Webhooks« 
    • Choose action « Make a web request » : https://urlExterneJeedom/core/api/jeeApi.php
    • Method : POST
    • Content Type : x-www-form-urlencoded
    • Body : apikey=jeedomApiKey&type=scenario&id=123&action=start&tags=action:playpause
    • Create action
  • Finish : Avant de finaliser, vous pouvez modifier le contenu de la description de l’applet (« If You say .. » à remplacer par simplement l’action par exemple) et désélectionner « Receive notifications when this Applet runs »

Phrase avec un paramètre (texte ou chiffre)

  • Il faut reprendre la phrase sans paramètre avec les différences suivantes ($ correspond au paramètre)
    • choose trigger « Say a phrase with a text ingredient« 
    • What do you want to say? Kodi Lance le film $ (texte) ou Kodi descend # (chiffre)
    • What do you want the Assistant to say in response? ok ou ok pour le lancement du film $ (si vous souhaitez une réponse de la Google Home contenant le paramètre)
    • Body (pour du texte) : apikey=jeedomApiKey&type=scenario&id=123&action=start&&tags=action%3Dplaymovie%20param1%3D »{{TextField}} »&utf8=1
    • Body (pour un chiffre, ici navigation vers le bas de x cases) : apikey=jeedomApiKey&type=scenario&id=123&action=start&tags=action%3Dnavdown%20param1%3D{{NumberField}}

Phrase avec deux paramètres (texte + chiffre)

  • Les différences sont les suivantes
    • choose trigger « Say a phrase with both a number and a text ingredient« 
    • What do you want to say? Kodi demarre le film $ a # minutes
    • Body : apikey=jeedomApiKey&type=scenario&id=123&action=start&tags=action%3Dstartmovie%20param1%3D »{{TextField}} »%20param2%3D{{NumberField}}&utf8=1

Les différentes applets actuellement possibles sont les suivantes (il faut reprendre les exemples ci-dessus pour les créer en remplaçant le nom des actions playpause, playmovie, navdown ou startmovie en fonction les paramètres nécessaires) :

  • Kodi lance le film $ : action=playmovie
  • Kodi pause (What’s another way=lecture, reprise) : action=playpause
  • Kodi stop : action=stop
  • Kodi coupe le son : action=mute
  • Kodi baisse le son : action=volumedown
  • Kodi monte le son : action=volumeup
  • Kodi relance le film $ : action=resumemovie
  • Kodi demarre le film $ a # minutes : action=startmovie
  • Kodi info film : action=displayinfo
  • Kodi retour : action=navback
  • Kodi ok : action=navselect
  • Kodi netflix : action=netflix (attention, penser à installer le plugin Netflix pour Kodi)
  • Kodi destination $ : action=kodiid
3 exemples type d’Applet IFTTT

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*