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.
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.
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.
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.
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
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…
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