GÉNÉRATION DE COULEURS ALÉATOIRES SUR LA XIAOMI GATEWAY

Voici un petit article rapide sur la généreration de couleurs aléatoires et l’affichage en continue sur la Gateway Xiaomi avec des variantes de fréquence, de durée, d’intensité, etc…  le tout pour créer une ambiance de lumière.

Le principe devrait s’adapter facilement à d’autres lumières que l’on peut piloter en leur donnant une couleur dans Jeedom.

Je suis parti sur un scénario Jeedom, qui va générer 6 nombres hexadécimaux aléatoires avec une fonction php, pour ensuite, les enregistrer dans 6 variables (a, b, c, d, e et f).

Avec ces 6 variables, je forme un code couleur lisible en les assemblant dans une nouvelle variable (color), qui sera elle utilisée pour afficher la couleur.

Après il suffit de paramétrer votre scénario pour que les lumières  s’enclenchent avec la rapidité  et le timing que vous souhaitez.

Vous pouvez ajouter un bouton virtuel pour enclencher le tout manuellement (ou vocalement…)

Et voilà c’est tout !!!

Voici mon scénario en image, ce sera plus simple :

Une boucle qui indique le nombre de répétition du scénario que vous souhaitez.

DecHex(mt_rand(0,15))    :  convertit en Hexadecimal un chiffre aléatoire entre 0 et 15

Variable(a)Variable(b)Variable(c)Variable(d)Variable(e)Variable(f)  : assemble les résultat  des 6 « loteries » dans une variable pour former un code couleur hexadecimal.

#Variable(color)  : affiche la couleur obtenue avec un # devant pour compléter le code couleur.

Sleep : fait une pause entre chaque affichage.

Et la vidéo de présentation :

C’est assez bluffant, on voit sur le dashboard les codes couleurs et les couleurs s’afficher en live  !!! Par contre sur ma vidéo le jaune ressort en blanc, mais c’est bien du jaune à l’oeil !!

Par la suite, on peut imaginer plein de variantes en programmant par exemple un allumage graduel de la lumière pour simuler l’aube au réveil ou plein d’autres choses, regardez l’exemple dans la vidéo suivante :

 

Enjoy !!

 

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 :

+++

 

REMPLACEMENT CLAVIER ASUS UX32V RETRO-ECLAIRE

 

L’ASUS UX32V est un notebook de bonne qualité générale, sur lequel certaines de mes touches ne fonctionnaient plus.

Dans cette vidéo vous trouverez la façon dont le clavier a été changé.

Munissez vous de tournevis de précision et de beaucoup de sang froid.

Suivez bien les étapes, à un moment il faut casser les rivets en plastique qui maintiennent l’ancien clavier pour déposer celui-ci.
Le nouveau à été collé avec de la super-glue déposée par goutte à la place des anciens rivets pour maintenir le nouveau clavier.

C’est une méthode non-officiel, vous le remarquerez…


Si vous avez besoin de détails complémentaires, envoyer moi un message.

 

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