Convertir couleur RGB en couleurs de base

Bonjour,

J’ai créé un scénario qui permet de reporter la couleur de mes ampoules Hue sur l’anneau Led de mes interrupteurs fibaro Walli.
Pour cela j’ai créé un bloc de code dans le scénario :

$_cmd = cmd::byString("Etat de la couleur Hue#");
$_color = $_cmd->execCmd();
$_rgb = hex2rgb($_color);

if (($_rgb[0] >= $_rgb[1]) && ($_rgb[0] >= $_rgb[2]))
{
	$_cmd_walli = cmd::byId(id_de_la_commande_Z_Wave_qui_passe_l_anneau_en_rouge);
}
elseif (($_rgb[1] >= $_rgb[0]) && ($_rgb[1] >= $_rgb[2]))
{
	$_cmd_walli = cmd::byId(id_de_la_commande_Z_Wave_qui_passe_l_anneau_en_vert);
}
elseif (($_rgb[2] >= $_rgb[0]) && ($_rgb[2] >= $_rgb[1]))
{
	$_cmd_walli = cmd::byId(id_de_la_commande_Z_Wave_qui_passe_l_anneau_en_bleu);
}
else
{
	$_cmd_walli = cmd::byId(id_de_la_commande_Z_Wave_qui_passe_l_anneau_en_blanc);  
}
$_cmd_walli->execCmd();

Mon problème :
Les interrupteurs Walli sont capable d’afficher les couleurs suivantes :

  • Rouge (FF0000)
  • Vert (00FF00)
  • Bleu (0000FF)
  • Cyan (00FFFF)
  • Magenta (FF00FF)
  • Jaune (FFFF00)
  • Blanc (FFFFFF)

Mon code est donc trop simple, car il ne prend pas en compte les combinaisons des 3 couleurs primaires.
Je cherche donc à faire évoluer mon code pour afficher les 3 combinaisons (cyan, magenta et jaune) mais avec une certaine tolérance dans les valeurs de chaque composante.

Merci pour vos suggestions et votre aide

Salut,

Juste une idée en passant, peut être bête et non testé…

tu pourrais recomposer une couleur en mettant un seuil et puis tu fait un select case dessus pour lancer tes commandes (ou si tu peux passer directement une couleur à ton walli → connais pas ).

$_cmd = cmd::byString("Etat de la couleur Hue#");
$_color = $_cmd->execCmd();
$_rgb = hex2rgb($_color);

$threshold = 125;

$R=($_rgb[0] > $threshold)? 'FF':'00';
$G=($_rgb[1] > $threshold)? 'FF':'00';
$B=($_rgb[2] > $threshold)? 'FF':'00';

$color=$R.$G.$B

switch ($color) {
    case 'FF0000':
        => cmd Red
        break;
    case '00FF00':
        => cmd Green
        break;
    Etc....
}

Excellente idée !
Je teste ça ce soir et vous fait un retour pour valider votre réponse.

Merci beaucoup

Edit : J’ai testé hier soir, l’idée est la bonne.
Merci à Bben

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.