Problème lumière ruban led

Bonjour,

Je rencontre un soucis avec un ruban led zigbee de la marque livarno (lidl : Lidl HG06104A control via MQTT | Zigbee2MQTT).
Il ne conserve pas l’état de la couleur sélectionnée.
Screenshot_20231228_110146_Jeedom Connect

Je ne rencontre pas ce soucis avec une ampoule Yeealight wifi.

Exemple :
Mon paramétrage sous JC :

Le paramétrage du virtuel avec le format d’état de la couleur :

et pour comparer une ampoule yealight qui fonctionne :

on voit que l’information remontée est dans un format différent, est il possible de rendre cela compatible ?

Merci

Jeedom Core : 4.3.21
Version JC : 1.8.0.1 stable
DNS Jeedom : non
Statut Démon : Démarré - (2023-12-26 07:18:16)

Equipements :
  Kwet_JeedomConnect : v1.8.0 stable sur android [os : 34] (ws) -

A mon avis c’est juste une histoire de format de l’état de cette ampoule sous Jeedom qui n’est pas au format attendu par le plugin JC

Il faudrait que vous le convertissiez au format RGB depuis l’équipement de votre ampoule sous Jeedom

Hello,

Via une fonction php de type:

function  xyBriToRgb($x,$y,$bri)
{
    $z = 1.0 - $x - $y;
    $Y = $bri / 255.0;
    $X = ($Y / $y) * $x;
    $Z = ($Y / $y) * $z;

    $r = $X * 1.612 - $Y * 0.203 - $Z * 0.302;
    $g = ($X * -1) * 0.509 + $Y * 1.412 + $Z * 0.066;
    $b = $X * 0.026 - $Y * 0.072 + $Z * 0.962;

    $r = $r <= 0.0031308 ? 12.92 * $r : (1.0 + 0.055) * pow($r, (1.0 / 2.4)) - 0.055;
    $g = $g <= 0.0031308 ? 12.92 * $g : (1.0 + 0.055) * pow($g, (1.0 / 2.4)) - 0.055;
    $b = $b <= 0.0031308 ? 12.92 * $b : (1.0 + 0.055) * pow($b, (1.0 / 2.4)) - 0.055;

    $maxValue = max( $r , $g, $b );

    $r = $r / $maxValue;
    $g = $g / $maxValue;
    $b = $b / $maxValue;

    $r = $r * 255; if ($r < 0) $r = 255;
    $g = $g * 255; if ($g < 0) $g = 255;
    $b = $b * 255; if ($b < 0) $b = 255;

    $r = dechex(round($r));
    $g = dechex(round($g));
    $b = dechex(round($b));

    if (strlen($r) < 2)     $r = "0" + $r;
    if (strlen($g) < 2)     $g = "0" + $g;
    if (strlen($b) < 2)     $b = "0" + $b;

    return "#".$r.$g.$b;
}
print xyBriToRgb(0.5052,0.4151, 254);

Tu devrais pouvoir faire ce que tu veux

Merci je vais tester mais n’est il pas possible d’intégrer ce système ou cette conversion à JC pour le mode « lumière de couleurs » directement ?

Si l’état ne s’affiche pas sur jc c’est qu’il n’est pas correct sur ton équipement jeedom, ce n’est pas un problème jc.

Salut, cela fonctionne pourtant parfaitement avec le widget circle :

L’information est envoyée au format CIE 1931 et non au format rgb ou hexa.

je ne comprend pas l’argument… ce widget circle n’est pas un widget core.
Qu’un autre bout de code custom prenne en charge se format n’a rien de surprenant, tout est possible.

mais le core attend un code hexa, si tu fournis une commande avec une info hexa, ca fonctionnera dans jeedom core et par conséquent dans jc, si tu fournis autre chose ca ne fonctionnera pas (ca sera pareil dans tes scénarios), sauf dans ton widget custom.

CQFD : faut convertir en Hexa qui un format standard. Peut être que le.widget circle est capable de te fournir une commande en Hexa?

Norbert

Bonjour,

Serait il possible de me donner la procédure pour mettre en place cette conversion et envoyer le résultat dans un virtuel ?
Il faut créer un scénario avec un bloc code, insérer le code php et… ?
Merci

Bonjour,

J’ai essayé bricoler avec le code récupéré ici :

Code PHP

Voici le retour en log du scénario :
[2023-12-29 14:09:09][SCENARIO] **-- Start :** Scenario lance manuellement. [2023-12-29 14:09:09][SCENARIO] - Exécution du sous-élément de type [action] : action [2023-12-29 14:09:09][SCENARIO] Mise à jour du tag #x# => 0.46 [2023-12-29 14:09:09][SCENARIO] Mise à jour du tag #y# => 0.198 [2023-12-29 14:09:09][SCENARIO] Mise à jour du tag #xy# => (0.46,0.198) [2023-12-29 14:09:09][SCENARIO] Mise à jour du tag #bri# => 185 [2023-12-29 14:09:09][SCENARIO] - Exécution du sous-élément de type [action] : code [2023-12-29 14:09:09][SCENARIO] Exécution d'un bloc code [2023-12-29 14:09:09][SCENARIO] ┌─────────────────── Convertisseur xy vers Hexa [2023-12-29 14:09:09][SCENARIO] |Valeur pour x = 0.46 [2023-12-29 14:09:09][SCENARIO] |Valeur pour y = 0.198 [2023-12-29 14:09:09][SCENARIO] |Valeur pour bri = 185 [2023-12-29 14:09:09][SCENARIO] |Valeur Hexa= # [2023-12-29 14:09:09][SCENARIO] └─────────────────────────── [2023-12-29 14:09:09][SCENARIO] Fin correcte du scénario

Bloc PHP :

/////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// Convertisseur xy vers Hexa ///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////

// Variables
$scenario->setLog('┌─────────────────── Convertisseur xy vers Hexa');
$tags = $scenario->getTags(); //récupère la liste des tags
$x = $tags['#x#'];
$y = $tags['#y#'];
$bri = $tags['#bri#'];

$scenario->setLog('|Valeur pour x = ' .$x);
$scenario->setLog('|Valeur pour y = ' .$y);
$scenario->setLog('|Valeur pour bri = ' .$bri);

function xyBriToRgb($x,$y,$bri)
{
    $z = 1.0 - $x - $y;
    $Y = $bri / 255.0;
    $X = ($Y / $y) * $x;
    $Z = ($Y / $y) * $z;

    $r = $X * 1.612 - $Y * 0.203 - $Z * 0.302;
    $g = ($X * -1) * 0.509 + $Y * 1.412 + $Z * 0.066;
    $b = $X * 0.026 - $Y * 0.072 + $Z * 0.962;

    $r = $r <= 0.0031308 ? 12.92 * $r : (1.0 + 0.055) * pow($r, (1.0 / 2.4)) - 0.055;
    $g = $g <= 0.0031308 ? 12.92 * $g : (1.0 + 0.055) * pow($g, (1.0 / 2.4)) - 0.055;
    $b = $b <= 0.0031308 ? 12.92 * $b : (1.0 + 0.055) * pow($b, (1.0 / 2.4)) - 0.055;

    $maxValue = max( $r , $g, $b );

    $r = $r / $maxValue;
    $g = $g / $maxValue;
    $b = $b / $maxValue;

    $r = $r * 255; if ($r < 0) $r = 255;
    $g = $g * 255; if ($g < 0) $g = 255;
    $b = $b * 255; if ($b < 0) $b = 255;

    $r = dechex(round($r));
    $g = dechex(round($g));
    $b = dechex(round($b));

    if (strlen($r) < 2)     $r = "0" + $r;
    if (strlen($g) < 2)     $g = "0" + $g;
    if (strlen($b) < 2)     $b = "0" + $b;

    return "#".$r.$g.$b;
}
print xyBriToRgb(0.5052,0.4151, 254);


$scenario->setLog('|Valeur Hexa= #'.$r.$g.$b);
$scenario->setTags($tags);
$scenario->setLog('└───────────────────────────');

Bonjour,

J’ai pu faire autrement mon équipement permettait d’envoyer l’information directement en RGB ou Hexa :

Du coup j’ai créé un virtuel pour récupérer l’info de la couleur envoyée pour que JC puisse l’interpréter et cela fonctionne :

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