Créer une commande à partir d'une concaténation

Bonjour à tous,

Grosso modo, je souhaite utiliser un scénario avec un paramètre en entrée; paramètre qui serait utilisé pour récupérer l’état d’une variable d’un virtuel.

CONTEXTE
J’ai 17 vannes thermostatiques, et souhaite programer un « bloc de scénario standard » qui permettrai de faire une « ouverture-fermeture » de la vanne.
Comme je ne souhaite pas progammer 17 fois la même chose, je souhaite pouvoir envoyer le « nom du virtuel » lors de l’appel du scénario.

Le bloc standard est prêt, mais je cale sur un point…

Comme un dessin vaut bien mieux qu’un long discours, voilà mon bloc de test (qui, bien entendu, me pose problème…) :

« InputParam01 » est ici créé pour les besoin du test.
In fine, ce sera ce paramètre que je passerai à l’appel du scénario.

Voilà ce que me crache le bloc de test :

Ce que je voudrais, c’est que le deuxième « LocalParam01 » contienne bien la « valeur de l’état du virtuel » (c’est à dire « Chauffage » comme dans l’appel précédent); et non pas le "texte contenu dans la variable « LocalParam01 »

Etant débutant sur Jeedom, je teste des trucs sur base de mes connaissances dans d’autre domaines…
Je m’y prend peut-être mal pour réaliser ce que souhaite faire, et vous aurez peut-être une autre idée pour la réaliser. Je suis bien entendu preneur de toute alternative !

Merci par avance.

Djé

Bonjour,

L’erreur est bien visible : ligne 5, il ne faut pas de # dans les variables.
Mais je n’arrive pas à vous corriger, car je ne comprend pas ce que vous voulez :wink:
Vous parlez de virtuel et la, je suis perdu ! (car les virtuels existent bien, mais j’en vois pas là)

Bonjour @Fabrice,

Meric pour le retour, mais ce n’est pas ça…

En gros, je voudrais que la ligne 3 et la ligne 5 aie le même résultat.
(que la variable « LocalParam01 » récupère la valeur de « #[Bureau][V_RadTH_Bureau][Mode Actuel :]# » ([V_RadTH_Bureau] est le virtuel d’un thermostat )

Avec ta proposition, dans la 5ème ligne, « LocalParam01 » prend la valeur (string) « [Bureau][V_RadTH_Bureau][Mode Actuel :] » au lieu de « #[Bureau][V_RadTH_Bureau][Mode Actuel :]# » dans mon cas initial…

Slt…
Et dans OUTILS Testeur d'expression cela te donnes quoi ?

Hello,

si j’ai bien compris, je fais qlq chose d’un peu similaire mais avec un bloc code :

$tags = $scenario->getTags();
$volet = $tags['#volet#'];

$tags['#valeurVolet#'] = cmd::byString('#[Virtuel][vEtatVolets]['.$volet.']#')->execCmd();

$scenario->setTags($tags);
1 « J'aime »

Si tu cherche de l’inspiration celui-la joue avec des tag en entrée et en sortie
utilise les tag pour que ton bloc code ne soit pas lier a tel ou tel nom de commande
dans un bloc si le nom de ta commande change il ne sera pas mis a jour et tu devra réecrir ton bloc …

merci pour le partage @olive !
perso mon bout de cote me convient, comme tu vois j’utilise déjà une partie des tag, et je sais que le reste ne changera pas (dans mon cas) :wink:

Merci @tomitomas.

Avec encore un peu d’aide, je vais y arriver !

Il y a toujours qqch que je ne capte pas…

Voilà ce que je fais :

Avec appel du scénario de cette manière :

Et voilà ce que je reçois :

Je ne comprends pas pourquoi…
Le Tag passé en appel de scénario est bien reçu (« InputTag01 »).
Mails le bloc de code ne semble rien faire…
Il y a sans doute qqch que je ne sais pas sur l’utilisation des Tags… :sob:

change tes message en log ca permettra d’avoir les infos dans la log du scenario

dans le bloc code ajoute également des log :

$tags = $scenario->getTags();
$LocalTag02= $tags['#InputTag01#'];
$scenario->setLog('valeur tag 01/02 : ' . $LocalTag02);
$tags['#LocalTag03#'] = cmd::byString('#['.$LocalTag02.'][Mode Actuel :]#')->execCmd();
$scenario->setLog('valeur tag  03 : ' . $tags['#LocalTag03#'] );
$scenario->setTags($tags);

ré-execute ton scenario, puis regarde les logs du scénario pour voir ce que ca dit !

1 « J'aime »

profites en aussi pour nous montrer une copie écran de la configuration de ton virtuel
[Bureau][V_RadTH_Bureau][Mode Actuel :]

Merci @tomitomas !!!

Les logs m’ont sauvés !
(Le debug, y a que ça de vrais !)

La bonne commande était donc (et c’est logique…) :

//$tags['#LocalTag03#'] = cmd::byString('#'.$LocalTag02.'[Mode Actuel :]#')->execCmd();

« # » et pas « #[ » à concaténer !

Au passage, j’ai été encore plus concis (on est puriste ou on l’est pas :stuck_out_tongue:) :

$tags = $scenario->getTags();

$tags['#LocalTag03#'] = cmd::byString('#'.$tags['#InputTag01#'].'[Mode Actuel :]#')->execCmd();

$scenario->setTags($tags);

Encore un super merci !

De rien ! :smiley:

En general on fait des tests avant d utiliser une info, d ou le passage par une variable :wink:

N’oublies pas de mettre en resolu

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