Appel de fonction utilisateur dans /data/php/user.function.class.php

Bonjour
Je suis débutant php, mais avec d’autres langages, il y a bien trop d’années, j’avais l’habitude de me créer des fonctions utilisateurs que je pouvais réutiliser partout dans mon code.
J’ai donc essayé de faire la mêe chose avec Jeedom en créant une première fonction dans /data/php/user.function.class.php.
J’ai un souci de passage de paramètres.
Il semble que la seule façon de passer le paramètre soit d’utiliser une variable, ou la valeur à transmettre directement. Un tag ou une valeur de commande ne fonctionne pas. Ainsi :

  • MaFonction(variable(MaVariable)) fonctionne
  • MaFonction(12345678) fonctionne
  • MaFonction(tag(MonTag)) ne fonctionne pas
  • MaFonction(#[Piece][Virtuel][Info]#) ne fonctionne pas

J’imagine que la raison pourrait en être que la valeur du paramètre n’est pas évaluée par le scénario avant d’être transmise, mais par la fonction en réception. Les variables étant globales sont acceptées, mais pas les tag ni les commandes… Si c’est bien le cas, je trouve ce fonctionnement bizarre, mais c’est peut être parce que je ne connais strictement rien à php que je découvre au fur et à mesure de mes besoins.

Est-ce que quelqu’un pourrait m’aider à pouvoir utiliser les tags pour passer des paramètres à une fonction ? Peut être quelque chose à rajouter au php, un passage de paramètre par valeur plutôt que par référence, ou que sais-je… Je dois dire que la multiplication dans Jeedom des variables publiques me dérange un peu, et l’arrivée des tags a été une bénédiction bien qu’on ne puisse pas définir leur portée (j’aimerais beaucoup pouvoir récupérer dans le scénario appelant sa valeur modifiée dans le scénario appelé…)

Merci beaucoup par avance pour vos éclairages.
Bonne journée

Hello,

Je relance le sujet car je rencontre le même problème, si je passe des commandes Jeedom (par exemple #[Ma][Commande][Jeedom]#) en paramètre de ma méthode custom, j’ai l’impression que dans la méthode on récupère l’id de la commande, un log m’affiche → #1234#

Y’a-t-il moyen de récupérer dans les méthodes custom la valeur de la commande Jeedom ?

Cordialement,

@MicaZ @phyllox
Commence ton scenario par définir un tag dans une commande action

tag montag #[Ma][Commande][Jeedom]#

puis dans un bloc code juste après

tu récupére je tag dans une variable php

$tags = $scenario->getTags(); // récupération du ou des tag du scenario dans un tableau
$MaCommandeJeedom = $tags['#montag#']; // récupération du tag montag 

il te faut ensuite modifier ta fonction pour qu’elle puisse recevoir un paramètre

function mafonction($parametre1){

la tu fait ton tripe avec ton paramètre1

return $retval;
}

puis dans la suite de ton bloc code appeler ta fonction

$retourdelafonction = mafonction($MaCommandeJeedom);

voilà métier difficile php / jeedom …

Bonjour,

Pour chacun de tes paramètres en début de fonction, tu fais :

$le_param=scenarioExpression::setTags(trim($le_param," \t\n\r\0\x0B'\""));

Avec ça tu peux passer ce que tu veux en paramètre

Bonjour,

Merci pour cette autre solution. J’appel ma méthode custom dans un virtuel, du coup c’était plus simple à mettre en place :slight_smile: