Transitiontime sur Philips Hue via Deconz/Phoscon

Bonjour à tous,
Je suis en train de tester la gestion d’une ampoule Philips Hue via Deconz/Phoscon.
Là où je bloque, c’est la transition.
La fonction « transitiontime » sous Philips Hue semble être connu sous Phoscon via « Fading time ».
image

J’ai tenté de créer une commande avec transitiontime « 0b::transitiontime::300 », mais cela ne fonctionne pas.

Erreur lors de la requete : 127.0.0.1:8484/api/F4BBFXXXX/lights/3/state(PUT), data : {"transitiontime":300} erreur : 5 => missing parameter to set light state

J’ai également tenté via un bloc code dans un scénario, mais rien ne fonctionne, même pas l’allumage de la lumière.

$url_Deconz = 'http://192.168.1.XX';
$cle_API_deCONZ = 'XXXXXX';
$light = 3;
$url = $url_Deconz."/api/".$cle_API_deCONZ."/light/".$light."/action";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
        'on' => true,
        'bri' => 254,
        'xy' => [40.947, 35.445],
        'transitiontime' => 300
    )));
curl_exec($ch);
curl_close($ch);

Comment utiliser la fonction transitiontime sous Jeedom soit bien une commande, soit via un bloc code?

L’appel semble être dispo du côté de Deconz: https://dresden-elektronik.github.io/deconz-rest-doc/lights/

Merci.
Mathieu

1 « J'aime »

Petit ajout, je viens de trouver en passant par un bloc code dans un scénario et cela fonctionne.
Du coup, je me demande comment l’intégrer via une commande.

$url_Deconz = 'http://127.0.0.1:XXXX';
$cle_deCONZ = 'F4BBXXXXXX';
$light = 3;
$url = $url_Deconz."/api/".$cle_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(
        'on' => true,
        'bri' => 254,
        'xy' => [0.5603,0.4069],
        'transitiontime' => 600
    )));
curl_exec($ch);
curl_close($ch);

Créer un scénario
Ajouter un bloc et code

Excuse-moi, je n’ai pas compris ta réponse.
Comment intégrer « transitiontime » dans une commande, comme ici ?

Je viens d’essayer, il suffirait de créer une commande action et mettre dans logical id
0b.transitiontime::#slider#
Mais il faut passer également la luminosité (car la transition semble une option)
data : {« transitiontime »:25} erreur : 5 => missing parameter to set light state
Et là, je bloque

Je viens de faire le test avec
0b.alert::select

Trigger a temporary alert effect:

  • none - light is not performing an alert
  • select - light is blinking a short time
  • lselect - light is blinking a longer time

Ça fonctionne, donc je comprends pas

Oui, mais « alert » est comme une scène si je ne me trompe pas.

En effet « transitiontime »: est une option de « bri»
Si tu souhaites que cette valeur soit fixe tu peux écrire : 0b.bri::#slider#;transitiontime::50 dans le Logical ID de la commande Luminosité 0b (attention, transitiontime ne fonctionne pas avec les commandes Off 0b et On 0b)
Tu ne peux pas le modifier via un slider directement dans le Logical ID, il faudra passer par un scénario/script et virtuel je pense.

Tu as aussi le choix de créer de nouvelles commandes avec des transitiontime différents…

Merci @alexp pour tes informations.
J’ai créé une commande « 0b.bri::254;xy::#ffa325;transitiontime::300 », lumière déjà allumée, celle-ci va s’éteindre :frowning:
Je comprends pas…

Sinon, avec ce scénario (et respectant cet ordre), et avec comme commande « Transition 0b 300 » ==> 0b.bri::254;transitiontime::300 ça fonctionne.

Mathieu

Je crois qu’il ne faut pas mettre « bri » dans la commande si elle contient le paramètre ‹ xy › car c’est la fonction « convertRGBToXY » dans deconz.class.php qui fait le calcul.
Je pense que le problème de vient du caractère « # » dans « Logical ID » qui doit être mal interprété par le plugin et met tout en vrac.
Il faut étudier le code pour comprendre d’où vient le soucis.

En fait je crois qu’il n’est pas possible en l’état de rentrer directement la couleur dans le « logical ID », on doit forcement passer par par le paramètre #color#.
Il faudrait modifier le code de deconz…

edit :
Dans la fonction execute, il faut ajouter la partie "else if($key ==‹ rgb ›){ "

    }else if($key =='xy'){
      list($r, $g, $b) = str_split(str_replace('#', '', $_options['color']), 2);
      $color = self::convertRGBToXY(hexdec($r), hexdec($g), hexdec($b));
      $parameters['xy'] = array($color['x'],$color['y']);
      $parameters['on'] = ($color['x'] != 0 || $color['y'] != 0);
      $parameters['bri'] = $color['bri'];
    }else if($key =='rgb'){
      list($r, $g, $b) = str_split(str_replace('#', '', $parameters[$key]), 2);
      $color = self::convertRGBToXY(hexdec($r), hexdec($g), hexdec($b));
      $parameters['xy'] = array($color['x'],$color['y']);
      $parameters['on'] = ($color['x'] != 0 || $color['y'] != 0);
      $parameters['bri'] = $color['bri'];
      unset($parameters['rgb']);
    }

et tu pourras construire un logical ID du type « 0b.rgb::#fe0000;transitiontime::0 »

C’est pas très propre mais ça fonctionne !

1 « J'aime »

Peut-être demander l’intégration de ton code dans le plugin ?