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 donner les 5 valeurs du json:
Et voici les 3 fonctions de conversion des couleurs:
<?php
/* * ***************************Includes********************************* */
require_once __DIR__ . '/../../core/php/core.inc.php';
class userFunction {
public static function hex2Blue($_arg1) {
$_rgb = hex2rgb(self::stripQuotes($_arg1));
log::add('scenario', 'info', var_export($_rgb, 1));
return isset($_rgb[2]) ? $_rgb[2] : 0;
}
public static function hex2Green($_arg1) {
$_rgb = hex2rgb(self::stripQuotes($_arg1));
return isset($_rgb[1]) ? $_rgb[1] : 0;
}
public static function hex2Red($_arg1) {
$_rgb = hex2rgb(self::stripQuotes($_arg1));
return isset($_rgb[0]) ? $_rgb[0] : 0;
}
/* INTERNAL FUNCTIONS */
static function stripQuotes($text) {
return preg_replace('/(^[\"\']|[\"\']$)/', '', $text);
}
}
Impossible donc d’utiliser ces fonctions, que ce soit via les actions ou via le scénario, le remplacement ne se fait pas, il n’évalue pas la fonction:

ici et pour le scénario j’ai dû créer un widget couleur pour mes tests.
En bloc code dans un scénario j’arrive à appeler mes fonctions, avec ce code:
$scenario->setLog('__ RGB : #[salon][Couleur][Etat couleur]# ==> '.(userFunction::hex2Red( '#[salon][Couleur][Etat couleur]#')) . '-' . (userFunction::hex2Green( '#[salon][Couleur][Etat couleur]#')) . '-' . (userFunction::hex2Blue( '#[salon][Couleur][Etat couleur]#')));
$sc->setCmd('#[salon][Ampoule2][SetRed]#', userFunction::hex2Red( "#[salon][Couleur][Etat couleur]#"));
$sc->setCmd('#[salon][Ampoule2][SetGreen]#', userFunction::hex2Green( "#[salon][Couleur][Etat couleur]#"));
$sc->setCmd('#[salon][Ampoule2][SetBlue]#', userFunction::hex2Blue( "#[salon][Couleur][Etat couleur]#"));
Voici le log du scénario, ici l’appel aux 3 fonctions a bien fonctionné, mais par contre c’est le remplacement de la couleur qui n’est pas bon: le scénario est provoqué par l’état du virtuel #[salon][Couleur][Etat couleur]# mais pourtant, quelle que soit la couleur du virtuel, le scénario fini toujours avec #28365# qu’il transforme en 40-54-5
[2021-12-22 18:50:32][SCENARIO] - /* - Execution du Bloc code n°1 - DEBUG NATIF ACTIF (php >= v7) */
[2021-12-22 18:50:32][SCENARIO] - - -
[2021-12-22 18:50:32][SCENARIO] __ RGB : #28365# ==> 40-54-5
[2021-12-22 18:50:32][SCENARIO] - Exécution d'une commande: #[salon][Ampoule2][SetRed]# de type [action]
[2021-12-22 18:50:32][SCENARIO] - Commande de sous-type: [slider] | options: ( [slider] => 40 )
[2021-12-22 18:50:32][SCENARIO] - Exécution d'une commande: #[salon][Ampoule2][SetGreen]# de type [action]
[2021-12-22 18:50:32][SCENARIO] - Commande de sous-type: [slider] | options: ( [slider] => 54 )
[2021-12-22 18:50:32][SCENARIO] - Exécution d'une commande: #[salon][Ampoule2][SetBlue]# de type [action]
[2021-12-22 18:50:32][SCENARIO] - Commande de sous-type: [slider] | options: ( [slider] => 5 )
[2021-12-22 18:50:32][SCENARIO] - - -
[2021-12-22 18:50:32][SCENARIO] - /* - Fin du Bloc code n°1 - */
[2021-12-22 18:50:32][SCENARIO] - - -
[2021-12-22 18:50:32][SCENARIO] Durée d'exécution (depuis le 1er bloc code) : 43.74 millisecondes
Il me manque quelque chose mais je ne vois pas quoi ?


