Ajout de double quote lors de la publication de message

Bonjour. Lors de la publication de message de type chaîne de caractère, le plugin prend l’initiative de mettre des double quote (") autour du message.
Serait-il possible d’empêcher ce comportement afin d’avoir la maîtrise sur les messages envoyés ?
Merci par avance.

Je suis sur la version bêta.

Bonjour,

Quelle est votre version de Jeedom?

Auriez-vous une ou deux captures afin de mieux comprendre le problème?

Je reproduis pas :


image

image

J’ai oublié de préciser que la valeur est récupérée d’un virtuel.
Jeedom 4.1.28, jMQTT dernière beta publiée.



Le message publié est-il le même lors d’une publication automatique (case « Pub. auto » coché) et lors d’une execution appelée (en cliquant sur le bouton Tester ou par un scenario)?

Est-ce qu’on peut avoir quelques log aussi ?
Je pense que le PB vient du plugin virtuel et pas de jmqtt, on a des contre-mesures en place pour éviter ça, virtuel non.

Le message publié est le même que ce soit en publication automatique ou pas. Il n’y a pas grand chose dans les logs.
L’hypothèse du plugin Virtuel étant la cause est plausible en effet.

La commande « info » du virtuel est de type « autre ». Lorsque la commande contient uniquement des caractères numériques, il n’y a pas les guillemets à l’arrivée.

J’ai regardé le code source du plugin Virtuel. Le traitement ci-dessous est effectué lors de la récupération de la valeur.

Ligne 340 : /plugins/virtual/core/class/virtual.class.php

if(is_string($result)){
	$result = str_replace('"', '', $result);
}

Ce que ne fait pas le plugin jMQTT (ligne 208 : jMQTTCmd.class.php).
J’ai conscience que ce n’est pas possible d’appliquer ce fix, çà foutrait le bordel dans les json.
J’ai pas pris le temps de tester mais avec une regex, virer les " en début et fin de chaine de caractère devrait faire l’affaire ?

Autre idée à l’arrache, en rajoutant un sous-type json, la regex ne serait appliqué que dans ce cas.
Je pourrais corriger de problème dans l’application qui traitera les messages, mais ce serait bien que ce cas de figure soit géré en amont.
J’espère avoir aidé, en espérant qu’un correctif soit possible.

Peux-tu essayer de construire le json dans jMQTT plutôt que dans le plugin virtuel ?

Ca :
Virtuel #vcmd#: {"key":#val#}
jMQTT: #vcmd#

Deviendrait:
Virtuel #vcmd#: #val#
jMQTT: {"key":#vcmd#}

Normalement ça devrait bien mieux marcher.

Malheureusement ce n’est pas possible. Le JSON est créé dynamiquement avec un scénario de type code PHP. Suite à quoi la valeur est stockée dans un virtuel afin que jMQTT puisse l’envoyer vers un broker externe.
Je vais tester avec une variable plutôt qu’un virtuel.

Edit : Le comportement est le même avec une variable. En plus du fait que c’est galère de stocker du JSON dans une variable.

Que fais-tu dans ton scenario ?
Tu peux le partager ?

Il a peut-être des façons plus simples de faire la même chose sans code dans le scenario

En gros je récupère plein d’info de plusieurs équipements et selon des statuts ou autre j’envoie un JSON pour créer des formulaires.
Mais quoiqu’il en soit tu suggères une solution de contournement. La source du problème sera toujours là.

Voilà le fix que j’ai appliqué ligne 208 dans le fichier jMQTTCmd.class.php

        $request = jeedom::evaluateExpression($request);
        if (is_string($request) && preg_match('/^\"(.*)\"$/', $request, $matches)) {
            $request= $matches[1];
        }

Il fonctionne, il faudrait que je fasse des tests plus poussé pour voir s’il n’y a pas de regression.
A vous de voir si vous voulez l’intégrer ou pas.

En fait, il y a des changements dans le core sur la fonction jeedom::evaluateExpression() en 4.2. Elle sera en mesure de retourner une valeur de type Array (notamment dans le cas du passage d’un tableau json en $_input) :

V4-Stable :

Beta/Alpha :

Ca change la donne, car une array json sera interprétée aussi comme une array en PHP (et pas simplement du texte) tout le long de son traitement par Jeedom, permettant des manipulations plus subtiles qu’aujourd’hui même dans les commandes.

Donc, c’est compliqué que faire un fix, surtout sachant que ça sera fixé tout seul sous peu…

Tu n’as pas besoin de virtuel, un event dans une commande info jMQTT fonctionne très bien aussi.

Vu comme çà, en effet c’est prématuré de faire un fix.
Je vais le garder de mon côté et puis je verrais quand la 4.2 sortira.

Mettre à jour une commande info jMQTT ne pousse pas le message sur le broker.

Non, il faut une commande action pour faire cela.

La commande action va récupérer la valeur via un équipement. Après quoi le code jMQTT va récupérer la valeur et les guillemets vont se rajouter.
Le problème est toujours là. Mais comme j’ai dis je garde mon fix pour le moment et je verrais en 4.2

Je ne reproduis pas.

Utilise un virtuel/variable/… et met une chaine de caractère en valeur. Pas une valeur numérique.

Pas besoin de virtuel.