DOMOTISER VOTRE VIEILLE TV ET CHAÎNE HI-FI AVEC JEEDOM + MODULE INFRAROUGE

Dans ce tuto je vous montre comment faire pour domotiser n’importe quel appareil qui utilise une télécommande infra rouge et le connecter avec Jeedom pour créer par la suite des scénarios adaptés pour faciliter le pilotage de tous les appareils.

Ici ce sera une télé LED ancienne génération et un ampli HI-FI.

Pour cela, je vous conseille d’utiliser deux Raspberry.

  • Un qui est votre principal avec votre Jeedom installé.
  • Et un qui fera office de télécommande universelle que vous placerez judicieusement face à vos appareils dans un champ le plus libre possible pour ne pas entraver le rayon IR.

Pour cela un vieux raspberry avec un dongle wifi ou un PI zero W fera l’affaire.

Il vous faut acheter un émetteur IR et Récepteur IR, je vous conseille de prendre des produits de qualité, les GROVE par exemple sont très bien.

Il va falloir sortir le fer à souder pour réaliser le montage des leds et beaucoup de patience…

Des tutos très complets existent déjà pour cela, je vais juste  essayer de compléter un très bon tuto existant en intégrant ce système dans votre domotique Jeedom.

Raspberry Pi : Dupliquer sa télécommande IR

Précision importante : il faut installer absolument Raspbian Jessie sur la « télécommande » sinon cela ne fonctionnera pas !!!

Je considère à ce niveau là que vous avez suivi le tuto ci-dessus et réussit à enregistrer plusieurs télécommandes et vous arrivez à piloter votre équipement en ligne de commande avec SSH.

Le tuto fonctionne bien, donc si vous avez des difficultés, faites moi le savoir en commentaires.

Le principe est d’installer un serveur sur le Raspberry ‘Télécommande’ pour pouvoir le piloter à distance par des requêtes envoyé par Jeedom.

On va installer Domoticz (qui fera office de ‘serveur’) sur notre télécommande pour pouvoir commander LIRC avec des boutons virtuels et recevoir des ordres de Jeedom.

Tapez la commande suivante dans votre terminal pour installer:

curl -L install.domoticz.com | sudo bash

Une fois installé, il faut affecter une IP fixe à votre raspberry « Télécommande » pour faciliter sa gestion.

Pour cela rendez vous dans l’interface de votre box et attribuez une IP fixe à vos Raspberry.

Noter bien le port utilisé par Domoticz, c’est en général le 8080

Connectez vous à l’interface Domoticz dans votre navigateur en tapant l’IP du raspi et le port Domoticz.

Allez d’abord, dans réglages et changer votre mot de passe.

Puis, dans Réglage/Matériel ajoutez un Dummy que vous nommerez VIRTUAL BOUTON par exemple :

Ensuite créer un capteur virtuel : et choisissez interrupteur, vous le nommerez du nom du bouton que vous souhaitez paramétrer.(il va falloir par la suite, créer autant de boutons que de commandes voulues.

Pour accéder à votre interrupteur, allez dans l’onglet « Interrupteur » et cliquez sur modifier :

Regarder dans « Action On »,  j’appelle un script avec un paramètre.

Je ne remplis pas OFF, c’est normal, il faut utiliser un autre bouton pour chaque commande.

Voici le squelette du script appelé que vous créerez et activez dans le bon répertoire :

home/pi/domoticz/scripts/telec_tv.sh

Je l’ai nommé telec_tv.sh

#!/bin/sh
# Envoie via IR des ordres à la TV Samsung

case $1 in

on) #lance la TV
irsend send_once SamsungTV KEY_POWER
;;
vol+) #monte le volume
irsend SEND_ONCE SamsungTV KEY_VOLUMEUP
;;
vol-) #baisse le volume
irsend SEND_ONCE SamsungTV KEY_VOLUMEDOWN
;;
###etc###

esac

Ce script va commander Lirc avec le bon paramètre. Il vous faut le personnaliser avec vos propres donnés.

Le code est facilement lisible, ex « KEY_POWER » correspond à une touche télécommande que j’avais au préalable enregistrer en paramétrant Lirc dans le tuto que je cite.

Voilà, normalement vous avez vos boutons installés et fonctionnels depuis votre interfaces Domoticz.

Maintenant, on va piloter le tout depuis Jeedom.

Dans Domoticz, allez dans Réglages/Paramètres et autorisez votre réseaux local à se connecter à Domoticz sans mot de passe et login.

Pour cela utilisé l’étoile jocker * pour assigner tous votre réseau local.

Ensuite, rendez vous dans votre Jeedom et installer le plugin gratuit Domoticz.

Ce plugin, vous fera remonter dans Jeedom tous vos bouton de domoticz

Vous devriez obtenir dans votre plugin quelque chose dans le genre :

Voilà, pour finir, il vous suffit de créer des boutons virtuels sous Jeedom pour piloter le tout et créer des scenarios qui vous faciliterons la life !!!!

Par exemple : switcher automatiquement en un clic entre la HI-FI et la TV, changer les sources en un clic, accéder à vos chaines préférés directement, etc…

On pourra, bien sur piloter le tout à la voix, avec IFTTT….. bref pas mal de possibilités en vue….

Enjoy !!!

Voici la vidéo de présentation qui intègre aussi la domotisation de la  Freebox et des lumières.

RETOUR D’ÉTAT DU FREEBOX PLAYER DANS JEEDOM

Le but de cette information est de savoir si le Player Freebox est allumé ou éteint, en effet, Free n’a pas prévu ce retour d’état qui peut néanmoins être très utile dans votre installation domotique pour piloter votre télé et autres médias.

Je m’explique, « il ne sert à rien d’allumer la télé si elle est déjà allumé », cela peut paraître bête dit comme çà, mais si vous  montez des scénarios domotique incluant votre télé et Freebox, vous le savez, cette info est importante pour pouvoir au final simplifier vos commandes.

L’astuce est simple, le player de Free dispose d’un serveur UPnP qui est actif uniquement quand le player est sur ON.

On le voit sous Windows dans le réseau, il disparaît quand on éteint le player.

Donc, en faisant  simplement un ping sur bon port du player, on obtient l’état du player.

Et le port à pinger sur la Freebox Révolution est le 54243 

Si il y a un retour la Freebox est allumé, si pas de retour la freebox est éteinte.

Concrètement, on peut remonter l’information de plusieurs façons, je vous propose la solution qui est la plus simple, elle nécessite d’avoir  Jeedom  et les plugins gratuit Ping , Script et Virtuel installés.

Il vous faut déjà connaitre l’adresse IP de votre player et lui en assigner une fixe.

Vous trouverez tout dans l’interface de paramétrage de la freebox. Dans le mode avancé, allez dans DHCP, puis cherchez dans les baux actifs l’IP de votre Player.

Faite un clic droit pour assigner une ip fixe et retenez bien cette IP.

Ensuite rendez vous dans Jeedom, installez le plugin PING, activez le et créez un nouvel équipement.

Donnez lui un nom, un objet parent, activez le + rendre visible et indiquez lui l’adresse IP de votre player et le port UPnP donné plus haut.

Enregistrez et c’est tout !!!

Allez dans votre interface et retrouvez votre nouvelle information d’état visible et prête à être utilisée dans vos scénarios.

Astuce pour avoir l’information rapidement : 

Naturellement, Jeedom fait un ping toutes les 60 secondes. Donc si vous appuyez sur la touche d’allumage du player  juste après que Jeedom est fait son Ping, il faudra attendre presque 60 secondes pour avoir le retour d’information, ce qui est long je trouve.

Mon truc consiste à ajouter trois commandes dès lors qu’on appuie sur la touche Power du player sur Jeedom.

Normalement, à ce stade, vous devriez avoir un bouton Power Freebox en place :

Si ce n’est pas le cas crée le avec le plugin Script de Jeedom avec la commande « HTTP » type « Action » suivante (voir photo ci-dessous)

http://hd1.freebox.fr/pub/remote_control?key=power&code= »votre code télécommande »

Sauvegardez et cliquez ensuite sur les 3 engrenages (à gauche du bouton tester)

Puis allez dans configuration et ajoutez trois commandes :

C’est à dire que lorsque qu’on appui sur le bouton Power de la télécommande virtuel Free, vous actionnez aussi les 3 commandes suivantes :

  1. Commander un ping manuel de votre équipement crée auparavant
  2. Faire remonter l’état à Jeedom
  3. Rafraîchir l’affichage de votre bouton d’état du player (bouton virtuel d’information du retour de l’état du player que vous avez crée au début)

Attention : dans l’exemple,  les noms des équipements correspondent à ceux que je leurs ai donné. Vous aurez sans doute choisi d’autres noms.

Voici le résultat final dans Jeedom :

+++

 

MISE A JOUR COMPLETE DU RASPBERRY

Pour être sur d’avoir les derniers paquets installés sur votre système, voici les commandes à rentrer dans votre terminal pour mettre à jour votre raspberry Pi sur Raspbian.

Sur un terminal de commande taper les commandes suivantes l’une après l’autre :

sudo apt-get update

sudo apt-get upgrade -y

sudo apt-get dist-upgrade -y

sudo apt-get install software-properties-common -y

sudo rpi-update

sudo apt autoremove -y

systemctl daemon-reload

sudo apt-get update

sudo reboot

Et voilà votre système est à jour et les tous les paquets aussi !!!!

Je vous conseil de le faire avant chaque installation.

PILOTER VOTRE MUSIQUE A LA VOIX

Dans cet article, je vous indique ma façon de piloter sa musique avec le logiciel médiacenter KODI installé sur un raspberry PI 3 (Stretch), mis à jour dans mon exemple.

Je pars du principe que KODI est installé et fonctionnel. Il faut simplement paramétrer KODI pour qu’il puisse être commandé de l’extérieur dans les réglages de KODI. Choisissez un port, le nom de user et le mot de passe.

Le principe est le suivant :

Google Assistant active une requête HTTP qui pilote KODI.

Pour cela, j’utilise l’appli IFTTT sur mon téléphone car je n’ai pas de Google Home.

Dans l’appli IFTTT, créer une nouvelle applet
Pour IF : choisissez Google Now : entrer une phrase de commande simple : ex : Mute le son
Pour THEN : choisissez  Webhooks : coller la requête http qui correspond à mute le son que je vous expliquerai ci-dessous.

Ces requêtes sont un travail de recherche qui m’a pris quelques heures pour récupérer toutes les commandes utiles de KODI. J’espère qu’elles vous plairons.

 

Pour comprendre, voici un exemple générique de requête :

http://user_kodi:mot_de_passe_kodi@ip:port_ecouté/jsonrpc?request={« jsonrpc »: »2.0?, »method »: »Xxxxx.XxxxXxx », « params »:{« xx »: »xx », »xx »:x}, »id »:1}

Toutes les requêtes doivent contenir ces informations et être correctement écrite pour fonctionner !!!

Dans toutes les requêtes suivantes, j’ai coupé le début pour éviter la répétition. De plus, une fois bien paramétré, avec le bon user,mdp,ip et port, vous pouvez faire un copier-coller pour les utiliser facilement.

Dans KODI, Il y a deux lecteurs pour le son 0 ou 1 à modifier suivant le lecteur utilisé.

Lecteur 0 : Commande de musique venant directement de m’interface
Lecteur 1 : Commande musique venant de l’externe.

Pour connaitre le lecteur actif, coller la requête, suivante, une fois complété de la 1ere partie dans votre navigateur:

{« jsonrpc »: « 2.0 », « method »: « Player.GetActivePlayers », « id »: 1}

Réponse : playerid:1 ou playerid:0

Voici la liste des commandes raccourcies :

STOP
{« jsonrpc »: »2.0?, »id »:1, »method »: »Player.Stop », »params »:{« playerid »:1}}

PLAY/PAUSE
{« jsonrpc »: « 2.0 », « method »: « Player.PlayPause », « params »: { « playerid »: 0 }, « id »: 1}

VOLUME+
{« jsonrpc »: »2.0?, »id »:1, »method »: »Application.SetVolume », »params »:{« volume »: »increment »}, »id »:1}

VOLUME-
{« jsonrpc »: »2.0?, »id »:1, »method »: »Application.SetVolume », »params »:{« volume »: »decrement »}, »id »:1}

MUTE
{« jsonrpc »: « 2.0 », « method »: « Application.SetMute », « params »: {« mute »: »toggle »}, « id »: 1}

MET LE SON A 10
{« jsonrpc »: « 2.0 », « method »: « Application.SetVolume », « params »: {« volume »:10}, « id »: 1}

RETOUR 30s
{« jsonrpc »: « 2.0 », « method »: « Player.Seek », « params »: [1, »smallbackward »], »id »:1}

AVANCE 30s
{« jsonrpc »: « 2.0 », « method »: « Player.Seek », « params »: [1, »smallforward »], »id »:1}

CLEAN MEDIATHEQUE
{« jsonrpc »: »2.0?, »method »: »AudioLibrary.Clean », »params »:[true], »id »:1}

SCAN LIBRAIRIE
{« jsonrpc »: »2.0?, »method »: »AudioLibrary.Scan », »params »:{« showdialogs »:true}, »id »:1}

ALEATOIRE ON
{« jsonrpc »: »2.0?, »method »: »Player.SetShuffle », »params »:{« playerid »:0, »shuffle »:true}, »id »:1}

ALEATOIRE OFF

{« jsonrpc »: »2.0?, »method »: »Player.SetShuffle », »params »:{« playerid »:0, »shuffle »:false}, »id »:1

REPEAT ALL
{« jsonrpc »: « 2.0 », « method »: « Player.SetRepeat », « params »: { « playerid »: 1, « repeat »: « all » }, « id »: 1} — repeat all

REPEAT OFF
{« jsonrpc »: « 2.0 », « method »: « Player.SetRepeat », « params »: { « playerid »: 1, « repeat »: « off » }, « id »: 1} — repeat off

CHANSON SUIVANTE
{« jsonrpc »: « 2.0 », « method »: « Player.GoTo », »params »:{« playerid »:0, »to »: »next »}, »id »:1}

CHANSON PRECEDENTE
{« jsonrpc »: « 2.0 », « method »: « Player.GoTo », »params »:{« playerid »:0, »to »: »previous »}, »id »:1}

LANCER UNE PLAYLIST NOMINATIVE + OPTION REPEAT ALL
{« jsonrpc »: »2.0?, »id »:1, »method »: »Player.Open », »params »:{« item »:{« file »: »special://profile/playlists/music/reggae.m3u »}, »options »:{« repeat »: »all »}}}

PLAYLIST PARTY MODE
{« jsonrpc »: »2.0?, »id »:1, »method »: »Player.Open », »params »:{« item »:{« partymode »: »music »}}} »

LANCER RADIO (ex url de NOVA)
{« jsonrpc »: »2.0?, »id »:1, »method »: »Player.Open », »params »:{« item »:{« file »: »http://statslive.infomaniak.ch/playlist/radionova/radionova-high.mp3/playlist.m3u »}}}

CLEAR PLAYLIST LECTEUR 0
{« jsonrpc »: »2.0?, »method »: »Playlist.Clear », »params »:{« playlistid »:0}, »id »:1}

NAVIGUEZ DIRECT A MUSIC
{« jsonrpc »: »2.0?, »method »: »GUI.ActivateWindow », »params »:{« window »: »music », »parameters »:[« musicdb »]}, »id »: »1?}

VUE DIRECT MUSIQUE/ALBUMS
{« jsonrpc »: « 2.0 », »id »:1, « method »: « GUI.ActivateWindow », « params »: { « window »: « music », « parameters »: [ « Albums » ] }, « id »: 1 }

VUE DIRECT MUSIQUE/GENRES
{« jsonrpc »: « 2.0 », »id »:1, « method »: « GUI.ActivateWindow », « params »: { « window »: « music », « parameters »: [ « Genres » ] }, « id »: 1 }

NAVIGUER DIRECT A GENRES ELECTRO (3)
{« jsonrpc »: »2.0?, »method »: »GUI.ActivateWindow », »params »:{« window »: »music », »parameters »:[« musicdb://genres/3?]}, »id »: »1?}

NAVIGUEZ DIRECT A GENRE 4 /HIP HOP/RAP chez moi
{« jsonrpc »: »2.0?, »method »: »GUI.ActivateWindow », »params »:{« window »: »music », »parameters »:[« musicdb://genres/4?]}, »id »: »1?}

# LE NUMÉRO APRES « GENRES/x » EST A TESTER AU CAS PAR CAS POUR VOIR A QUOI IL CORRESPOND, JE NE SAIS PAS COMMENT C’EST ATTRIBUE PAR KODI.

VUE DIRECT A ARTISTE n°57
http://kodi:azerty@192.168.0.9:8383/jsonrpc?request={« jsonrpc »: »2.0?, »method »: »GUI.ActivateWindow », »params »:{« window »: »music », »parameters »:[« musicdb://artists/57?]}, »id »: »1?}

INFO thumbnail
http://kodi:azerty@192.168.0.9:8383/jsonrpc?request={« jsonrpc »: »2.0?, »method »: »Player.GetItem », »params »:{« properties »:[« thumbnail », « fanart »], »playerid »:0}, »id »: »AudioGetItem »}

INFO LECTURE EN COURS
http://kodi:azerty@192.168.0.9:8383/jsonrpc?request={« jsonrpc »: « 2.0 », « method »: « Player.GetItem », « params »: { « properties »: [« title », « album », « artist », « duration », « thumbnail », »fanart », « streamdetails »], « playerid »: 0 }, « id »: « VideoGetItem »}

INFO VOLUME SON
http://kodi:azerty@192.168.0.9:8383/jsonrpc?request={« jsonrpc »: « 2.0 », « method »: « Application.GetProperties », « params »: {« properties »: [« volume »]}, « id »: 1}

PLAYSLIST LECTEUR 1 INFO SUR LE CONTENU
« jsonrpc »: « 2.0 », « method »: « Playlist.GetItems », « params »: { « properties »: [« title », « album », « artist », « duration »], « playlistid »: 1 }, « id »: 1}

INFO SUR LE MEDIA EN COURS
« jsonrpc »: « 2.0 », « method »: « Player.GetItem », « params »: { « properties »: [« title », « album », « artist », « season », « episode », « duration », « showtitle », « tvshowid », « thumbnail », « file », « fanart », « streamdetails »], « playerid »: 1 }, « id »: « VideoGetItem »}

INFO PLAYLIST
« jsonrpc »: « 2.0 », « id »: 1, « method »: « Playlist.GetPlaylists »}

FLÈCHE DROITE
« jsonrpc »: « 2.0 », »method »: »Input.Right », »id »:1}

FLÈCHE HAUT
« jsonrpc »: « 2.0 », »method »: »Input.Up », »id »:1}

ACCUEIL PAGE
jsonrpc »: »2.0?, »method »: »Input.Home », »id »:1}

OK/VALIDER
jsonrpc »: »2.0?, »method »: »Input.Select », »id »:1}

RETOUR
jsonrpc »: »2.0?, »method »: »Input.Back », »id »:1}

CONTEXT MENU
jsonrpc »: »2.0?, »method »: »Input.ContextMenu », »id »:1}

Voilà, après bien sur il existe encore d’autres commandes et variantes, mais avec celles-ci on a les plus importantes.

Après cela, j’ai crée des scénario dans Jeedom afin de créer des commandes complexes qui n’existe pas nativement.

De nombreux tuto traitent des scénarios dans Jeedom, je ne l’expliquerais pas ici.

Regardez la vidéo qui suit pour voir le résultat, c’est un peu flou, mais on entend/voit bien les commandes.

Références :

http://kodi.wiki/view/JSON-RPC_API