2018-07-06

De jolies couleurs aléatoires avec Jeedom et Philips Hue

Créer de jolies couleurs aléatoires avec jeedom et des leds Phlips Hue














Le bandeau de leds Philips Hue LightStrip Plus :

Un bandeau de leds Philips Hue autour du comptoir de la cuisine, ça coûte une blinde, ça ne sert à rien, mais c'est joli !

Il se produit un splendide halo lumineux sous le bar, dont tu peux modifier la couleur et l'intensité à l'envi.

Youpi !

Sauf qu'assez rapidement, tu n'as plus du tout envie de choisir la couleur à chaque fois. Et tu préfèrerais que le bandeau prenne tout seul une jolie couleur aléatoire et qu'il en change, toujours tout seul, tous les quarts d'heures, pour d'autres jolies couleurs aléatoires.

Jeedom :

Tu te dis que Jeedom est fait pour ça : contrôler tous ces bidules et objets connectés de l'Internet Of Things.
Effectivement, il suffit d'utiliser le plugin "Philips Hue" de Jeedom. Et voilà : tu peux contrôler tes leds depuis Jeedom, soit depuis l'interface web de Jeedom, soit en inventant des scénarios automatiques, ingénieux et variés.


Contrôler la couleur :

Pour contrôler la couleur des leds par scénario, il te faut aller voir dans la configuration du plugin Philips de Jeedom :

Tu cliques sur ton objet Hue.
Puis tu cliques sur l'onglet "Commandes".
Et là tu vois qu'il existe une commande nommée "Couleur" qui permet de modifier ... la couleur :


Une couleur aléatoire :

Pour donner une couleur aléatoire à tes leds, tu peux utiliser, dans tes scénarios, la fonction interne de Jeedom nommée "randomColor()".

La documentation de Jeedom indique :
"randomColor(min,max) : Donne une couleur aléatoire comprise entre 2 bornes ( 0 => rouge, 50 => vert, 100 => bleu)."

Youpi ?

Moui ... sauf que ... ça donne des résultats ... "tout moyens".

L'un des problèmes des couleurs aléatoires, c'est qu'en moyenne, tu obtiens souvent un genre de marron fade légèrement teinté.
Statistiquement, la couleur aléatoire moyenne, elle n'est pas jolie. Malheureusement.

Pour t'en rendre compte, il te suffit de vérifier sur une palette de couleurs.

Si tu cherches "color picker" dans Google, tu obtiens ceci :


Tu vois bien qu'une couleur qui serait choisie aléatoirement dans ce grand rectangle de sélection a toutes les chances d'être très moche.

Une jolie couleur aléatoire :

Dans ce "color picker", si tu regardes bien les paramètres "Hue", "Saturation" et "Value" (paramètres H, S, et V), tu te dis que pour obtenir une jolie couleur aléatoire, il te faudrait choisir uniquement parmi certaines bornes de valeurs pour chaque paramètre.
  • "Hue" peut varier de 0 à 360 (degrés). C'est la "teinte".
  • "Saturation" peut varier de 0% à 100% (soit de 0 à 1). Si S est proche de 0%, la couleur est très fade, presque inexistante. On parle parfois d'image désaturée (Noir et Blanc). Si, au contraire, S est proche de 100%, la couleur est très présente, très marquée.
  • "Value" peut varier de 0% à 100% (soit de 0 à 1). Si V est proche de 0%, la couleur est proche du noir. Si, au contraire, V est proche de 100%, la couleur est très marquée.

Donc en résumé, tu cherches à obtenir une couleur aléatoire dont :
  • "Hue" est choisie aléatoirement entre 0 et 360 (degrés). La teinte est complètement aléatoire.
  • "Saturation" est choisie aléatoirement entre 60% et 100%.
  • "Value" est choisie aléatoirement entre 70% et 85%.


Voilà, dans ce plus petit rectangle de sélection, la couleur sera toujours aléatoire, et elle sera jolie.

Le script perl :

Tu peux utiliser le script perl ci-dessous pour générer une jolie couleur aléatoire et la faire prendre en compte par Jeedom, qui modifiera la couleur de tes leds Philips Hue LightStrip Plus, ou bien celle de tout autre bidule dont on peut régler la couleur.


#!/usr/bin/perl -w

use strict;
use warnings;
use POSIX;

my $apikey = 'b067f02ab65b8b370af85525593218f5d878f78be3902f3e5dd70e26aff8c2b0';
my $id_hue = '889';
my $s_min = 0.60;
my $v_min = 0.70;
my $v_max = 0.85;

my $url = 'https://localhost:443/core/api/jeeApi.php';

my $cmd = '/usr/bin/curl -s -k -m 15 -X POST --data-urlencode "request={\"jsonrpc\":\"2.0\"}" --data-urlencode "apikey=' . $apikey . '" --data-urlencode "type=cmd" --data-urlencode "id=' . $id_hue . '" --data-urlencode "color=#';

my $h = int(rand(360));
my $s = $s_min + rand(1.0 - $s_min);
my $v = $v_min + rand($v_max - $v_min);

my ($red, $green, $blue) = &hsv2rgb($h, $s, $v);
$red =  int($red * 255);
$green = int($green * 255);
$blue =  int($blue * 255);

my $str_color = sprintf("%02x%02x%02x", $red, $green, $blue);

$cmd .= $str_color . '" ' . $url;

system($cmd);

sub hsv2rgb {
 my ( $h, $s, $v ) = @_;

 if ( $s == 0 ) {
  return($v, $v, $v);
 }

 $h = ($h % 360) / 60;
 my $i = floor( $h );
 my $f = $h - $i;
 my $p = $v * ( 1 - $s );
 my $q = $v * ( 1 - $s * $f );
 my $t = $v * ( 1 - $s * ( 1 - $f ) );

 if ( $i == 0 ) {
  return($v, $t, $p);
 } elsif ( $i == 1 ) {
  return($q, $v, $p);
 } elsif ( $i == 2 ) {
  return($p, $v, $t);
 } elsif ( $i == 3 ) {
  return($p, $q, $v);
 } elsif ( $i == 4 ) {
  return($t, $p, $v);
 } else {
  return($v, $p, $q);
 }
}

Tu dois déposer ce script perl à l'emplacement suivant sur ton Jeedom :

/var/www/html/plugins/script/core/ressources/torglut_change_color.pl

Il te faut aussi rendre ce script exécutable, à l'aide d'une commande du type :

chmod 755 /var/www/html/plugins/script/core/ressources/torglut_change_color.pl

Tu dois aussi modifier les 2 variables suivantes, dans ce script, pour que leurs valeurs correspondent à ta propre installation de Jeedom ($apikey et $id_hue) :

my $apikey = 'b067f02ab65b8b370af85525593218f5d878f78be3902f3e5dd70e26aff8c2b0';

Tu dois remplacer cette valeur par la valeur "apikey" de ton Jeedom. C'est à conserver un peu comme un mot de passe (non, ce n'est pas ma vraie clef API dans cet exemple). Pour trouver la valeur pour ton propre Jeedom, tu cliques sur la roue crantée en haut à droite de la page principale de Jeedom, puis "Configuration", puis l'onglet "API", et la valeur se trouve au niveau de la ligne "Clef API".


my $id_hue = '889';

Tu dois remplacer cette valeur $id_hue par l'identifiant (ID) de la commande "Couleur" de ton objet "Hue" dans Jeedom. Tu trouves cet identifiant en cliquant sur la petite roue crantée, au niveau de la ligne "Couleur" dans l'onglet "Commandes" de la configuration de ton objet "Hue" :




Ce script perl utilise aussi une fonction "hsv2rgb()" pour transformer les paramètres H, S, et V en paramètres R, G, et B, car c'est une valeur RGB qui est attendue par le plugin "Philips" de Jeedom, et non pas une valeur HSV. Peu importe.

Utiliser le script perl dans Jeedom :

Pour utiliser ce script perl dans Jeedom, tu crées un objet de type "Script", à l'aide du plugin "Script" de Jeedom.

  • Tu crées un nouvel objet de type "Script", puis tu cliques dessus, puis tu vas dans l'onglet "Commandes" de ce nouvel objet, puis tu cliques sur le bouton vert "Ajouter une commande de script".
  • Tu nommes cette nouvelle commande "change_color", par exemple.
  • Dans la case "Type", tu choisis "Action".
  • Dans la case "Requête", tu définis le chemin vers le script perl : "/var/www/html/plugins/script/core/ressources/torglut_change_color.pl"
Et voilà :


À partir de là, lorsque tu veux que tes leds prennent une jolie couleur aléatoire, il te suffit, dans tes scénarios Jeedom, d'appeler la fonction "change_color" de ton nouvel objet Script.



Aucun commentaire:

Enregistrer un commentaire