OUARZA
Avril 12, 2022, 11:31
1
Bonjour à tous,
Je cherche désespérément un convertisseur hexa vers xy pour pouvoir gérer la couleur de mes lampes via un bloc code.
Il y a bien un site Red / #ff0000 hex color (#f00) mais les valeurs xy ne sont pas celles que je trouve en interrogeant Phoscon via API.
Par exemple, le rouge #FF0000 c’est « xy »: [0.7006,0.2993] alors que sur le site c’est 0.64, 0.33.
Pourriez-vous m’aider à comprendre ?
Merci par avance.
Mathieu
Hello, en ligne ou en un langage spécifique ?
Je viens de faire une recherche rapide, j’ai pas trouvé en ligne, mais j’ai trouvé un code python qui le fait.
def rgb_to_xy(reg,green,blue):
r = ((red + 0.055) / (1.0 + 0.055))**2.4 if (red > 0.04045) else (red / 12.92)
g = ((green + 0.055) / (1.0 + 0.055))**2.4 if (green > 0.04045) else (green / 12.92)
b = ((blue + 0.055) / (1.0 + 0.055))**2.4 if (blue > 0.04045) else (blue / 12.92)
X = r * 0.664511 + g * 0.154324 + b * 0.162028
Y = r * 0.283881 + g * 0.668433 + b * 0.047685
Z = r * 0.000088 + g * 0.072310 + b * 0.986039
cx = 0
cy = 0
if (X + Y + Z) != 0:
cx = X / (X + Y + Z)
cy = Y / (X + Y + Z)
return (cx, cy)
1 « J'aime »
Hello @HugoVal11 ,
Je pensais plutôt en ligne.
Comment mettre en pratique ton code sous jeedom ?
Mathieu
Ce n’est que du calcul, ce code peut être facilement transposé en PHP et mis dans userfunction.
Hello @Jeandhom ,
Alors si ce n’est que du calcul, je peux faire un fichier excel
Mathieu
HugoVal11:
reg
Tu as une faute de frappe.
Merci pour votre aide.
Mathieu
1 « J'aime »
pifou
Avril 12, 2022, 4:45
9
J’ai fait des fonctions php qu’on peut mettre dans le fichier « userfonction » de jeedom :
Bonjour,
Je n’arrive pas à faire fonctionner mes userFonctions ni directement dans mes commandes, ni dans le bloc code scénario… malgré la doc que j’ai bien suivie ça ne marche pas
Mon but est de gérer une ampoule z-wave via mqtt, la couleur à lui envoyer est au format json - je n’ai pas réussi à lui donner directement le code couleur hexa.
{"warmWhite":255,"coldWhite":255,"red":40,"green":54,"blue":5}
Donc, pour modifier la couleur, sur la commande je vais rajouter 5 actions pour donn…
note : faut pas mettre de chiffres dans les noms de fonction, sinon elles ne sont pas reconnues.
1 « J'aime »
Tu cherches à faire quoi ?
Car y’as déjà des fonctions dans jeedom pour convertir les couleurs, suffit sans doute de les appeler dans ton bloc code.
OUARZA
Avril 12, 2022, 5:35
12
Hello @sagitaz ,
Je cherche à connaitre la valeur xy d’une couleur pour l’intégrer à mon bloc code.
$url_Deconz = 'http://127.0.0.1:8484';
$cle_API_deCONZ = 'XXXXXXXXXXXX';
$light = 7; // Cuisine
$url = $url_Deconz."/api/".$cle_API_deCONZ."/lights/".$light."/state";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
//Détente 100
'on' => true,
'xy' => [0.5002,0.4143],
'bri' => 255,
'transitiontime' => 50, //5 secondes (1*5*10)
)));
curl_exec($ch);
curl_close($ch);
Dans jeedom tu as une fonction dans le core pour HEX->RGB.
Avec une autre qui fait RGB->XY, tu devrais avoir ce qu’il faut :
$hex = "FF0000"; //ta couleur à convertir au format Hex
//La fonction de convertion RGB vers XY
function rgb2xy($r, $g, $b) {
$normalizedToOne['red'] = $r / 255;
$normalizedToOne['green'] = $g / 255;
$normalizedToOne['blue'] = $b / 255;
foreach ($normalizedToOne as $key => $normalized) {
if ($normalized > 0.04045) {
$color[$key] = pow(($normalized + 0.055) / (1.0 + 0.055), 2.4);
} else {
$color[$key] = $normalized / 12.92;
}
}
$xyz['x'] = $color['red'] * 0.664511 + $color['green'] * 0.154324 + $color['blue'] * 0.162028;
$xyz['y'] = $color['red'] * 0.283881 + $color['green'] * 0.668433 + $color['blue'] * 0.047685;
$xyz['z'] = $color['red'] * 0.000000 + $color['green'] * 0.072310 + $color['blue'] * 0.986039;
if (array_sum($xyz) == 0) {
$x = 0;
$y = 0;
} else {
$x = $xyz['x'] / array_sum($xyz);
$y = $xyz['y'] / array_sum($xyz);
}
return array(
'x' => $x,
'y' => $y,
'bri' => round($xyz['y'] * 255),
);
}
// Convertion de HEX vers RGB avec la fonction du core
$rgb = hex2rgb($hex);
$r = $rgb[0];
$g = $rgb[1];
$b = $rgb[2];
// conversion de RGB vers XY
$xy = rgb2xy($r, $g, $b);
// arrondi à 5 chiffres
$x = round($xy['x'],5);
$y = round($xy['y'],5);
$bri = $xy['bri'];
$scenario->setLog($hex);
$scenario->setLog('rouge :' . $r . ', vert :' . $g . ', bleu :' . $b);
$scenario->setLog('x :' . $x . ', y :' . $y . ', bri :' . $bri);
3 « J'aime »
OUARZA
Avril 15, 2022, 7:34
15
Merci énormément @sagitaz
Je l’ai intégré à mon code et ça marche très bien.
1 « J'aime »
system
A fermé ce sujet ()
Avril 16, 2022, 7:35
16
Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.