Appelle fonction perso à partir d'une commande info virtuel --> nombre mal interprété

Bonjour,

Pour info ma config Jeedom :
Version : 4.2.13
Source : default
Branche : V4-stable
Système : freeboxDelta

Voici mon pb : dans un virtuel j’ai une commande info qui me retourne un nombre sur 4 positions max.
J’ai fait une fonction perso dans « userFunction » pour traiter une mise en forme perso de ce nombre dans un autre virtuel:
Le pb que je rencontre :

Ma fonction très simple elle fait un substr de la variable
public static function perso_MEF($NB) {
return $NB.’ '.substr($NB,1,4);
}

Je souhaite utiliser cette fonction dans une commande info virtuel.
Si j’appel cette fonction en passant un nombre en direct
perso_MEF(‹ 5000 ›) Résultat de la commande info: ‹ 5000 › 5000  OK

Si j’appel la commande avec une autre info virtuel en paramètre ça ne marche pas :
#[Sécurité][Test_fonction_perso][num]# contient 5000
Je crée une commande info virtuel
perso_MEF(#[Sécurité][Test_fonction_perso][num]#) Résultat de la commande info: 5000 3276  KO

Je ne comprends pas comment il peut trouver 3276 au lieu de 5000

Salut,

Ce ne serait pas l’id de la commande #[Sécurité][Test_fonction_perso][num]# par hasard ?

Tu ne passes pas la valeur de la commande en paramètre mais son id.

Oui effectivement 3276 c’est bien l’ID de la commande.
Je ne comprends pas pourquoi c’est ID qui est traité par le substr alors que en retournant la variable sans substr on a bien la valeur soit 5000.
Merci pour ton aide je sais au moins d’où vient le 3276, mais je ne sais pas comment faire pour recupèrer la valeur avec le substr?

Salut,

Essai avec cette fonction $NB = cmd::byString($NB)->execCmd();

1 « J'aime »

Super un grand merci pour ton aide

Bonsoir,
au retour de la variable :
return $NB. ' ' .substr($NB,1,4);
return #3276#. ' ' .substr(#3276#,1,4);
return #3276#. ' ' .3276;
#3276# est interpréter par jeedom comme une commande, il te remplace donc l’id par la valeur a l’affichage, soit :
5000 3276

Si ta fonction est destiné exclusivement a recevoir une commande de type #macomande#, la solution de bison est adapté ou celle-ci :
$NB = scenarioExpression::value($NB);

sinon il te faudra vérifier avant si c’est une commande jeedom :
if (strpos($NB, '#') !== false) $NB = scenarioExpression::value($NB);

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