Pilotage LED RGB selon température

Réservé à la création de scénarios dans JEEDOM
Répondre
lithium73fr
Timide
Messages : 136
Inscription : 29 avr. 2016, 09:52

Pilotage LED RGB selon température

Message par lithium73fr » 27 janv. 2017, 08:59

Bonjour à tous,

Je voudrais faire évoluer la couleur de LED contrôlées par un module RGBW-101 Fibaro en fonction de la valeur d’une sonde de température. L’idée est d’avoir une couleur évoluant dans le spectre du bleu au rouge selon la température mesurée, par exemple bleu pur à -20° jusqu’au rouge à 40°.
Est-ce quelqu’un aurait des conseils pour créer un tel scénario ou est ce qu’a votre connaissance un plugin existant aurait cette fonction ?
J’ai quelques pistes mais je ne sais pas trop comment appliquer ça Jeedom http://stackoverflow.com/questions/4615 ... arm-colors

Merci d’avance pour vos conseils

Avatar de l’utilisateur
maxmen
Timide
Messages : 74
Inscription : 17 févr. 2016, 13:42
Localisation : Strasbourg

Re: Pilotage LED RGB selon température

Message par maxmen » 27 janv. 2017, 09:49

Moi je l'ai fait avec ma hue, et j'ai testé deux types de scénarios.
Le premier qui se déclenche à chaque changement de température et j'ai fixé une échelle par ex: SI temp. > 10 ET SI temp. < 20 ALORS hue color = COULEUR (bleu)

Mais je me suis dit que déclencher le scénario à chaque changement de température ça fait beaucoup de scrutations pour jeedom, alors j'ai fait un déclenchement périodique toutes les heures.


Envoyé de mon iPhone en utilisant Tapatalk

lithium73fr
Timide
Messages : 136
Inscription : 29 avr. 2016, 09:52

Re: Pilotage LED RGB selon température

Message par lithium73fr » 27 janv. 2017, 12:08

le truc c'est que je voudrais que la couleur soit ¨calculée¨ en fonction de la température, c'est a dire avec en modifiant les ratios RGB pour chaque valeur de température.

Avatar de l’utilisateur
cadavor
Actif
Messages : 920
Inscription : 21 juin 2015, 22:00
Localisation : 34

Re: Pilotage LED RGB selon température

Message par cadavor » 27 janv. 2017, 13:13

lithium73fr a écrit :le truc c'est que je voudrais que la couleur soit ¨calculée¨ en fonction de la température, c'est a dire avec en modifiant les ratios RGB pour chaque valeur de température.
Ton lien est intéressant, il va falloir faire de la conversion d'échelle en gros pour du calculé
On voit que les couleurs si codé en HSV varie pour H de 0 = rouge à 270 = bleu
Il faut faire la transformation d'échelle température mini = 270 et température max = 0
Les bornes des 2 échelles sont a déterminer pour le meilleur rendu.

Ensuite tu peux prendre la fonction décrite ici : https://gist.github.com/Jadzia626/2323023
pour transformer la couleur HSV en RGB pour l'appliquer au module Fibaro
Jeedom Stable 2.4.6
Rpi3 + SSD 120Go + Aeotec Z-Stick Gen5 + Inateck dongle BLE
Zwave FGMS-001 + FGDS-002 + FGFS-101 + FGK-101 + FGWPE-101
Orvibo AllOne + Playbulb + Miband2 + Mini-enceinte Jack (TTS)

Avatar de l’utilisateur
cadavor
Actif
Messages : 920
Inscription : 21 juin 2015, 22:00
Localisation : 34

Re: Pilotage LED RGB selon température

Message par cadavor » 27 janv. 2017, 16:59

J'ai fait le petit bout de code suivant pour répondre à ta problematique à adapter au besoin :

Pour tester, créer un virtuel comme suit :
virtuel_tempcolor.png
virtuel_tempcolor.png (53.73 Kio) Consulté 503 fois
Puis créé un scénario "Avancée avec comme déclencheur l’élément "temp" du virtuel fraichement créé.
Avec un unique bloc code contenant :

Code : Tout sélectionner

$temp_value_cmd_string = "#[Test][Test Temp to RGB][temp]#";
$RGB_value_cmd_string = "#[Test][Test Temp to RGB][color]#";

$temp_min = 10; // mini echelle température en °C
$temp_max = 25; // max echelle température en °C
$temp_scale_step = 10; // nombre de point de l'échelle

$color_min = 240; // valeur H du modele HSV pour du bleu
$color_max = 0; // valeur H du modele HSV pour du rouge

// adaptation
if ($color_min > $color_max) { // inversion de l'echelle
  	$color_revert = $color_min;
	$color_min = $color_max;
  	$color_max = $color_revert;
} else {
  	$color_revert = 0;
}
$temp_min = round($temp_min * 10);
$temp_max = round($temp_max * 10);

$color_range = $color_max - $color_min;
$temp_range = $temp_max - $temp_min;
$temp_nb_points = round($temp_range / $temp_scale_step); // nombre de marche de l'echelle température
$scenario->setLog("temp_nb_points - ".$temp_nb_points);

$color_scale_step = $color_range / $temp_nb_points; // calcul la precision de l'echelle de couleur par rapport au nombre de point de l'echelle température
$scenario->setLog("color_scale_step - ".$color_scale_step);

$temp_value_cmd = cmd::byString($temp_value_cmd_string);
$temp_value = $temp_value_cmd->execCmd();
$scenario->setLog("temp_value - ".$temp_value);
$temp_value = round($temp_value * 10);
if ($temp_value < $temp_min) $temp_value = $temp_min;
if ($temp_value > $temp_max) $temp_value = $temp_max;

$value_on_color_scale = ((($temp_value - $temp_min) / $temp_scale_step) * $color_scale_step) + $color_min;
$scenario->setLog("value_on_color_scale - ".$value_on_color_scale);
$HofHSV = abs($value_on_color_scale - $color_revert);
$scenario->setLog("HofHSV - ".$HofHSV);

/*
**  Converts HSV to RGB values
** –––––––––––––––––––––––––––––––––––––––––––––––––––––
**  Reference: http://en.wikipedia.org/wiki/HSL_and_HSV
**  Purpose:   Useful for generating colours with
**             same hue-value for web designs.
**  Input:     Hue        (H) Integer 0-360
**             Saturation (S) Integer 0-100
**             Lightness  (V) Integer 0-100
**  Output:    String "R,G,B"
**             Suitable for CSS function RGB().
*/
function fGetRGB($iH, $iS, $iV) {
  if($iH < 0)   $iH = 0;   // Hue:
  if($iH > 360) $iH = 360; //   0-360
  if($iS < 0)   $iS = 0;   // Saturation:
  if($iS > 100) $iS = 100; //   0-100
  if($iV < 0)   $iV = 0;   // Lightness:
  if($iV > 100) $iV = 100; //   0-100
  $dS = $iS/100.0; // Saturation: 0.0-1.0
  $dV = $iV/100.0; // Lightness:  0.0-1.0
  $dC = $dV*$dS;   // Chroma:     0.0-1.0
  $dH = $iH/60.0;  // H-Prime:    0.0-6.0
  $dT = $dH;       // Temp variable
  while($dT >= 2.0) $dT -= 2.0; // php modulus does not work with float
  $dX = $dC*(1-abs($dT-1));     // as used in the Wikipedia link
  switch(floor($dH)) {
    case 0:
      $dR = $dC; $dG = $dX; $dB = 0.0; break;
    case 1:
      $dR = $dX; $dG = $dC; $dB = 0.0; break;
    case 2:
      $dR = 0.0; $dG = $dC; $dB = $dX; break;
    case 3:
      $dR = 0.0; $dG = $dX; $dB = $dC; break;
    case 4:
      $dR = $dX; $dG = 0.0; $dB = $dC; break;
    case 5:
      $dR = $dC; $dG = 0.0; $dB = $dX; break;
    default:
      $dR = 0.0; $dG = 0.0; $dB = 0.0; break;
  }
  $dM  = $dV - $dC;
  $dR += $dM; $dG += $dM; $dB += $dM;
  $dR *= 255; $dG *= 255; $dB *= 255;
  return array(round($dR),round($dG),round($dB));
}

$RGB_array = fGetRGB($HofHSV, 100, 100);
$RGB_value = sprintf("#%02X%02X%02X", $RGB_array[0], $RGB_array[1], $RGB_array[2]);
$scenario->setLog("RGB - ".$RGB_value);

$RGB_value_cmd = cmd::byString($RGB_value_cmd_string);
$RGB_value_cmd->execCmd(array('color' => $RGB_value));
Cela donne le résultat suivant sur le widget du virtuel :
A 10°C (mini)
widget_tempcolor_cool.png
widget_tempcolor_cool.png (5.68 Kio) Consulté 503 fois
A 25°C (maxi)
widget_tempcolor_hot.png
widget_tempcolor_hot.png (6.17 Kio) Consulté 503 fois
Il faudra bien sur adapter le début du code avec le nom des commandes à associer, l'échelle de température souhaitée et le nombre de pas

Code : Tout sélectionner

$temp_value_cmd_string = "#[Test][Test Temp to RGB][temp]#";
$RGB_value_cmd_string = "#[Test][Test Temp to RGB][color]#";

$temp_min = 10; // mini echelle température en °C
$temp_max = 25; // max echelle température en °C
$temp_scale_step = 10; // nombre de point de l'échelle
Jeedom Stable 2.4.6
Rpi3 + SSD 120Go + Aeotec Z-Stick Gen5 + Inateck dongle BLE
Zwave FGMS-001 + FGDS-002 + FGFS-101 + FGK-101 + FGWPE-101
Orvibo AllOne + Playbulb + Miband2 + Mini-enceinte Jack (TTS)

lithium73fr
Timide
Messages : 136
Inscription : 29 avr. 2016, 09:52

Re: Pilotage LED RGB selon température

Message par lithium73fr » 29 janv. 2017, 08:04

Un grand merci pour on aide cadavor !!
Je viens de créer le virtuel de test, ça fonctionne parfaitement. Je vais maintenant l'adapter avec mes équipements.

Avatar de l’utilisateur
cadavor
Actif
Messages : 920
Inscription : 21 juin 2015, 22:00
Localisation : 34

Re: Pilotage LED RGB selon température

Message par cadavor » 29 janv. 2017, 11:46

Avec plaisir, n'hésite pas si besoin.
Jeedom Stable 2.4.6
Rpi3 + SSD 120Go + Aeotec Z-Stick Gen5 + Inateck dongle BLE
Zwave FGMS-001 + FGDS-002 + FGFS-101 + FGK-101 + FGWPE-101
Orvibo AllOne + Playbulb + Miband2 + Mini-enceinte Jack (TTS)

epgdurand
Timide
Messages : 133
Inscription : 18 août 2016, 16:19

Re: Pilotage LED RGB selon température

Message par epgdurand » 05 févr. 2017, 21:46

Merci Cadavor

J'ai créé le virtuel et le scénario.

Ensuite je bute. Comment lier le virtuel au thermomètre et ma ma lampe couleur.
J'ai essayé dans le virtuel d'associer via la commande équipement un thermomètre mais cela ne semble pas fonctionner.

Merci pour ton aide

epgdurand
Timide
Messages : 133
Inscription : 18 août 2016, 16:19

Re: Pilotage LED RGB selon température

Message par epgdurand » 05 févr. 2017, 23:20

Ok je crois que je commence a comprendre. Je dois le faire dans le scénario.

Avatar de l’utilisateur
cadavor
Actif
Messages : 920
Inscription : 21 juin 2015, 22:00
Localisation : 34

Re: Pilotage LED RGB selon température

Message par cadavor » 06 févr. 2017, 12:04

epgdurand a écrit :Ok je crois que je commence a comprendre. Je dois le faire dans le scénario.
Oui dans le scnéario...
Le virtuel n'était là que pour la démonstration/test.
Au final tu ne devrais pas avoir besoin du virtuel.
Jeedom Stable 2.4.6
Rpi3 + SSD 120Go + Aeotec Z-Stick Gen5 + Inateck dongle BLE
Zwave FGMS-001 + FGDS-002 + FGFS-101 + FGK-101 + FGWPE-101
Orvibo AllOne + Playbulb + Miband2 + Mini-enceinte Jack (TTS)

epgdurand
Timide
Messages : 133
Inscription : 18 août 2016, 16:19

Re: Pilotage LED RGB selon température

Message par epgdurand » 06 févr. 2017, 16:56

Merci pour ta réponse. Ca fonctionne très bien.

Répondre

Revenir vers « Scénarios »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Titanium31 et 2 invités