[Virtuel] - Opération ternaire avec résultat texte

Bonjour la communauté !

Petit bug il me semble en V4 : j’essaye de faire un virtuel très simple, qui en fonction de la température de consigne d’un de mes radiateurs, m’affiche du texte. Voici un ternaire simple que j’ai essayé et qui n’affiche rien :

#[Salon][Radiateur][Température de consigne]# <= 19 ? "Eco" : "Confort"

Dans le testeur d’expression, aucun problème, cela fonctionne et voici le résultat :

Je vais évaluer :  **17 <= 19 ? "Eco" : "Confort"**
Résultat :  **Confort**

Mais pas dans le virtuel (que ce soit avec « Tester » ou visuellement (PS : je suis en type info et sous type autre). Voici le résultat dans le virtuel :

Résultat de la commande : 17 <= 19 ? "Eco" : "Confort"

J’ai remplacé le ternaire en mettant des résultats de type entier, et ça fonctionne bien à la fois dans le testeur et dans le résultat du virtuel
Exemple :

 #[Salon][Radiateur][Température de consigne]# <= 19 ? 123 : 456

Une idée ? Bug connu ?

Merci à vous :slight_smile:

Je ne peux pas tester sur smartphone mais as-tu essayé sans guillemet ?
Je sais ça n’a pas de sens mais qui sait, il y a peut-être des problèmes avec les caractères spéciaux dans la case valeur des virtuels.

Yes j’ai essayé également avec des ’ ou même sans. J’ai même tenté une version encore plus simple genre :

1 == 1 ? 'A' : 'B'

Et ça ne fonctionne que dans le testeur d’expression, pas sur le virtuel

Et en mettant un / devant les guillemets ?

Non plus, mais ça ne fonctionne même pas dans le testeur d’expression donc cohérent des 2 côtés

Je sais que j’avais eu le même problème dans une expression mais je ne me rappelle plus comment cela avait été réglé.
Il faudrait chercher dans le forum pour retrouver le fil en question.

J’ai fait une recherche avec « ternaire », mais je n’ai rien trouvé.

Je passe par un script en attendant, mais si ça peut être corrigé ça sera top ! Merci de tes retours en tout cas

C’est pas avec ternaire que tu trouveras.
Je vais essayer de le retrouver et je te tiens au courant.
Si tu trouves d’ici là tant mieux.

1 « J'aime »

Salut,

Ce doit être une histoire de guillemets qui sont ajoutés lors du traitement de la commande virtuelle et ne doivent pas être dérangeants sur des chiffres. A mon avis pas vraiment quelque chose qui peut se corriger sans casser tout Jeedom.

Tu pourrais stocker le résultat de ton calcul dans une variable via un scénario et récupérer cette variable dans le virtuel:

exemple scénario:

  $cmd = cmd::byString('#[Salon][Radiateur][Température de consigne]#')->execCmd();
  $calcul = ($cmd <= 19) ? "Eco" : "Confort";
  $scenario->setData('Ma_Variable', $calcul);

et dans le virtuel info/autre tu récupères variable(Ma_Variable)

Hello,

C’est quasiment ce que j’ai fait, mais dans un script php, vu que j’ai plusieurs commandes à faire, je passe en paramètre ce qu’il faut et j’ai bien le résultat. Voici la version simple, mais ça fonctionne nickel:

$cmd = cmd::byString($argv[1]);
$value = $cmd->execCmd();
$result = $value <= 19 ? "Eco" : "Confort";
echo $result;
1 « J'aime »

Ou alors, une solution franchement moche et à déconseiller serait d’utiliser des variables constantes dans lesquelles tu mettrais les valeurs eco et confort (stringeco et stringconfort)
Ensuite tu remplacerais dans ton expression les « eco » par variable(chaineeco)

Je vais rester avec mon script en attendant je pense haha, mais merci en tout cas !

Pense à marquer solutionné ton fil même si ce n’est pas une solution définitive.
Bonne journée

Tu le sais sûrement mais tu as la possibilité d’inclure des fonctions persos dans jeedom par le fichier /var/www/html/data/php/user.function.class.php que tu pourrais appeler directement dans tes virtuels avec Ma_Fonction($arg) dans l’idée de ce que tu voulais faire au début

Exact, je l’avais pourtant déjà fait mais ça m’était sorti de l’esprit, merci :slight_smile:

:grinning:

J’ai testé ton ternaire dans un virtuel vite fait et si tu regardes bien après traitement le guillemet final est ôté avec un retour de ce type: 17 <= 19 ? "Eco" : "Confort

A coup sûr un str_replace indispensable pour que les commandes virtuelles soient fonctionnelles dans un maximum de cas. Pas gênant pour des chiffres mais empêche d’utiliser un ternaire string directement dans une commande virtuelle.

En dernière solution tu pourrais aussi conserver ton ternaire mais avec un retour binaire 0 : 1 et utiliser un widget perso qui renverrait Eco ou Confort en fonction de la valeur.

La fonction c’est bien aussi :wink:

Désolé de vous avoir pris la tête avec mes histoires haha

Je n’ai mis qu’une version simple ici, mais j’ai plusieurs ternaires imbriqués, du coup je vais garder ma fonction :wink:

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