Plugin Virtuel - Commande type "Liste" - Comment récupérer les valeurs de la liste

Bonjour,
Après avoir créé une commande de type liste, comment puis-je récupérer les deux valeurs actives de la liste pour les utiliser ensuite dans un scénario.

Exemple :
Virtuel - Commande de type Liste : Mode - Valeurs : (0|Arrêt;1|Marche;2|Veille)
Après avoir sélectionné 2, l’info Mode vaut 2 et je voudrais pouvoir récupérer le mot « Veille » (pour l’afficher ou envoyer par message par exemple).

J’ai un peu cherché mais je ne vois pas …
Si quelqu’un pouvait m’aider ?
D’avance merci.

Pour avoir le nom il suffit de mettre le nom dans la liste et pas un numéro

Voilà un exemple d’un virtuel avec select, et une info liée

L’info est updatée par le select

Et tu peux donc tester la commande info correspondante

Bonjour Nemeraud et merci,
Oui c’est vrai.
Mais j’ai oublié de préciser dans ma question que je souhaitais avoir dans la liste chaque cas sous la forme (numéro|description).
Par construction de ma configuration Jeedom déja existante.

Bonjour Kiboost,
Merci pour ta réponse.
Comme j’ai oublié de préciser dans ma question que je souhaitais avoir dans la liste chaque cas sous la forme (numéro|description), il me semble que ta suggestion ne répond pas à mon besoin ou alors, pardon d’avance, je n’ai pas bien compris ton exemple :neutral_face:

a part faire un test dans le scenario ou le widget, je sais pas comment tu peux recupérer le nom si tu veux garder un numéro en retour de selection

D’ailleurs, je m’interroge …
Si les deux valeurs ne sont pas accessibles simplement, à quoi cela sert-il que le concepteur du plugin Virtuel ai pris le soin de créer deux champs (champ1|champ2) pour chaque valeur de la liste ?

Si on doit à chaque fois renseigner la liste comme cela (tata|tata;titi|titi;toto|toto;), c’est bizarre.
Une liste (tata;titi;toto;) aurait suffit.
:flushed:

1 « J'aime »

le 1er champ est l’ID qui sera retourné dans la commande, si vous affichez la commande ou si vous la testez dans un scenario, c’est lui que vous aurez, le 2eme c’est le libellé qui sera affiché dans la liste.

Après tout va dépendre de votre besoin, si vous avez besoin de récupérer un numérique
exemple : 30|30 minutes;60|1 heure;120|2 heures …

si c’est un nom alors oui ca vous donner du toto|toto; titi|titi, …

mais ca peux être plus complexe dans le libellé : toto|je veux toto;tata|je préfères tata

après rien ne vous empèche de mettre un id numéri : 01|toto;02|tata

mais la commande retournera 01 ou 02

après a vous de tester cet ID et d’afficher le nom dans un widget mais il faudra le coder

Je remercie Nemeraud et Kiboost pour avoir pris le temps de répondre à ma question mais je suis quand même surpris qu’il n’existe pas un moyen de récupérer le champ2 à partir de l’index champ1 pour les valeurs de la liste d’un virtuel liste.
Pour obtenir la correspondance, coder un tableau équivalent dans un scénario ou un widget n’est pas très clean d’un point de vue programmation. L’information est codée à deux endroit du programme (Jeedom) est ce n’est pas propre surtout pour gérer les évolutions.
Alors je me permet de remettre mon sujet un peu sur le métier :thinking:
Si quelqu’un pouvait m’aider …
Merci d’avance.

bonjour
dans ton action liste
clic en haut dans ton équipement (information)
tu as configuration
avec les info que tu peux récupère via la fonction code scénario

https://forum.jeedom.com/viewtopic.php?f=32&t=20037&p=676511&hilit=getconfiguration#p676511

et si tu veux changé le libellé tu as setconfiguration

Bonjour ajja17orange,
Merci, très sympa.
Cela semble être effectivement un solution élégante pour récupérer la liste et l’exploiter sans avoir à la ré-écrire ailleurs.
Je ne fais pas du code php sous Jeedom tout les jours donc je vais m’y replonger pour essayer de m’en sortir avec cette piste.
Belle journée à toi.

Bonjour ajja17orange,
De nouveau merci pour ta suggestion que j’ai exploitée pour écrire un scénario qui me permet de répondre à la question objet de ce post.

Pour la communauté, je décris ici cette solution en utilisant des noms génériques.
Virtuel composé de :

  • une Commande d’Info de type Liste (champ1|champ2; …)
  • une Info (champ1 dans la liste)
  • une InfoLabel (champ2 dans la liste)

Scénario
Pour que InfoLabel soit mis à jour automatiquement lorsque Info est changée, créer un scénario avec les conditions :
Mode du scénario : Provoqué
Evènement : #[X][Virtuel][Info]#
Le scénario est constitué de deux ACTION Variable et d’un bloc CODE.
Afin que la solution soit la plus générique possible et pour ne pas avoir à modifier directement le code PHP, j’ai créer dans le scénario deux variables de la manière suivante :
variable Nom: VirtualCommand Valeur : « [X][Virtuel][Commande] »
variable Nom: VirtualInfoLabel Valeur : « [X][Virtuel][InfoLabel] »
(attention : bien remplacer les # de chaque coté des libéllés par des " pour que Jeedom n’interprète pas ces chaines de caratères …).
Puis créer le bloc CODE . Le code est fournis ci-dessous et n’est pas à modifier si les variables sont renseignées comme indiqué ci-dessus.

:slightly_smiling_face:

Note
Solution développée et testée en Jeedom V3. J’ignore à ce jour si cette solution sera toujours d’actualité en Jeedom V4.

//<?php // Passer cette ligne en commentaire avant de copier ce script dans le bloc CODE de Jeedom
// file: Scenario Jeedom : Home ModeLabel Set

// MODE DEBUG
// (activer les lignes MODE DEBUG ci-dessous - désactiver les lignes MODE NORMAL)
//$scenario->setLog("### Alerte : l'éxécution de ce bloc CODE est en mode debug ###");
//$virtualCommand = "#[A203][Home Mode][Mode Set]#";
//$virtualInfoLabel = "#[A203][Home Mode][ModeLabel]#";

// MODE NORMAL
// Recuperation des valeurs des variables du scenario
$virtualCommand = "#".$scenario->getData('VirtualCommand')."#";
$virtualInfoLabel = "#".$scenario->getData('VirtualInfoLabel')."#";
// Import des ID des commandes/infos du Virtuel
$commandId = cmd::byString($virtualCommand)->getId();
$infoLabelId = cmd::byString($virtualInfoLabel)->getId();
// Import de la valeur de l'info modifiée par la commande du Virtuel
$infoId = cmd::byId($commandId)->getConfiguration('infoId');
$infoValue = cmd::byId($infoId)->execCmd();
// Import de la liste de la commande du Virtuel
$actionList = cmd::byId($commandId)->getConfiguration('listValue');
// Traitement de la chaine $actionList
$array1 = explode(";", $actionList);
for($i=0;$i<count($array1);$i++)
{
	$array2[$i] = explode("|", $array1[$i]);
  	if ($array2[$i][0] == $infoValue)
	{
		$infoLabelValue = $array2[$i][1];
	}
}
// Affectations du bloc Code vers le virtuel
cmd::byId($infoLabelId)->event(($infoLabelValue));
// Affectations variables dans scenario (utilisées pour info)
$scenario->setData("InfoValue", $infoValue);
$scenario->setData("InfoLabel", $infoLabelValue);

//exit(0); // Passer cette ligne en commentaire avant de copier ce script dans le bloc CODE de Jeedom
//?>       // Passer cette ligne en commentaire avant de copier ce script dans le bloc CODE de Jeedom
4 « J'aime »

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