Bonjour à tous !
Aujourd’hui je vais vous présenter ce que j’ai fait pour piloter l’Ambilight de ma télévision grâce à Gladys.
Disclaimer
Ce tuto va juste vous présenter la partie pilotage d’ambilight et pas l’installation de la solution d’ambilight (que je pourrais éventuellement vous présenter plus tard si jamais cela vous intéresse)
Mais c’est quoi Ambilight ?
Je crois que le nom est déposé par Phillips d’ailleurs, mais depuis que la technologie est sortie c’est un peu devenu un nom commun pour désigner le fait de synchroniser des lumières avec l’image affichée par sa télé (souvent par le biais de LED disposées derrière sa télévision)
Prérequis
- Une installation déjà déjà configurée d’HyperionNG Github Hyperion
- Un bouton zigbee dans mon cas : Bouton sonoff
- Ou alors NodeRed installé et une Télé Samsung avec l’OS Samsung baptisé TIZEN
C’est parti
Je vais vous présenter deux solutions.
La première consiste à activer ou désactiver l’ambilight via un bouton zigbee
La deuxième consiste à activer ou désactiver l’ambilight en fonction de l’état de la télé (allumée ou éteinte)
Première Solution
C’est tout simple. Quand on arrive sur la page d’accueil de notre instance Hyperion, on se retrouve sur le tableau de bord
Comme on peut le voir, il y a pas mal de choses d’activées, mais ce qui consomme réellement ce sont les LED et elles, sont désactivées.
Pour capturer l’image de ma télé, j’utilise une webcam grand angle placée juste devant l’écran. Cela me permet d’être multi-source (freebox, console et même youtube ou Plex en application native sur la télévision).
Le but est donc d’allumer ou d’éteindre les LEDs. Pour ce faire, Hyperion propose une API accessible directement par requête HTTP.
On doit donc d’abord récupérer un jeton d’authentification pour pouvoir communiquer avec Hyperion en HTTP
On clique sur services réseaux et dans la partie Gestions des token on ajoute une description et on clique sur créer un Token (que l’on garde bien au chaud)
De retour dans Gladys, une fois notre bouton zigbee appairé, on va créer une scène pour allumer les LEDs lors d’un clic bouton et une autre scène pour éteindre lors du double clic
Dans la scène, on ajoute un déclencheur : Au changement d’état de l’appareil
On choisit le bouton voulu et compare si son état est égal à 1 (correspondant à un clic)
On ajoute ensuite l’action : Faire une requête HTTP
Méthode : POST
URL : http://[url-de-votre-instance-hyperion]/json-rpc ou http://[ip-de-votre-instance-hyperion]:[port]/json-rpc
Header : Ajouter un Header avec comme nom Authorization et comme valeur le token généré précédemment
Body :
{
"command":"componentstate",
"componentstate":{
"component":"LEDDEVICE",
"state":true
}
}
Pour éteindre on répète les étapes précédentes en modifiant la valeur du bouton à 2 pour le double clic par exemple et on remplace dans le Body de la requête HTTP « state »:true par « state »:false.
Deuxième Solution
Je n’ai plus besoin d’utiliser le bouton pour ma part car j’ai connecté ma télévision dans NodeRED.
Dans NodeRED, j’ai installé la librairie : node-red-contrib-samsung-tv-control
Mon workflow est le suivant :
La première ligne est à exécuter une première fois pour récupérer le token de la télé et communiquer avec elle, pour ça on a un premier noeud
Le deuxième Noeud va permettre de récupérer le token, pour ce dernier il faut configurer un device
Vous entrez l’IP de votre télé, ainsi que l’adresse MAC et vous laissez vide la partie Token que vous allez récupérer par la suite.
Le troisième noeud consiste à afficher dans la console NodeRED le token pour la télé.
Une fois cette configuration faite vous pouvez exécuter votre template en vous assurant que la télé est allumée.
Sur la télé, vous allez avoir un message pour autoriser un appareil à prendre le contrôle de la télé, vous devez accepter avec votre télécommande.
Une fois le token récupéré vous pouvez mettre à jour le champ Token dans la configuration de votre device. Vous pouvez ensuite désactiver le premier noeud pour éviter de demander un token à votre télé à chaque exécution du template.
Maintenant on va retourner dans Gladys pour créer un device MQTT permettant de récupérer l’état de la télé.
On créé donc un device de type capteur avec comme valeur 0 ou 1.
On retourne dans NodeRED.
Le deuxième flux pour la télé utilise la boite SamsungTV Is Alive, pour le déclencher, on utilise un noeud de type Inject qui va s’exécuter toutes les 30 secondes pour récupérer l’état de la télé et l’envoyer sur le topic MQTT
La boîte SamsungTV Is Alive a deux sorties : une à 0 et une à 1 pour l’envoyer sur le topic MQTT il faut effectuer une petite transformation, d’où l’utilisation du noeud de type function
Ici pour la sortie 1, on effectue la même manipulation avec msg.payload = 0 pour la sortie 0.
Maintenant que l’on a récupéré l’état de notre télé dans Gladys on peut recréer une scène comme précédemment sauf qu’à la place du bouton on utilisera notre fake device mqtt comme changement d’état de l’appareil.
On veillera à bien cocher la case : Exécuter seulement lorsque le seuil est passé ( et non pas à chaque valeur envoyée )
Sinon on va envoyer une requête toutes les 30 secondes à Hyperion et cela risque de le faire crasher.
Et c’est fini, vous pouvez profiter de votre ambilight sans avoir besoin d’utiliser votre téléphone pour l’allumer ou l’éteindre.