Filtrage des infos

Bonjour,
je travail a rendre le NsPanel sonoff en tasmota full compatible il a une particularité c’est que sur l’ecran widget on touche un des 8 boutons ca envoi le topic suivant
Nspanel1/RESULT
{« NSPanel »:{« ctype »:« group »,« id »:« 1 »,« params »:{« switch »:« on »,« switches »:[{« switch »:« on »,« outlet »:0}]}}}

j’ai fait un filtrage pour recuperer le ID qui correspond au numero du bouton
Nspanel1/RESULT{NSPanel}{id}
et un filtrage pour recuperer l’etat de l’ID binaire
Nspanel1/RESULT{NSPanel}{params}{switch}

la question est la suivante:
si je doit creer un bonton par ID pour recuperer son etat je doit faire un filtrage par topic genre :
Nspanel1/RESULT{NSPanel}{id:« 1 »}{params}{switch}
pour ne recuperer que l’etat de l’ID numero 1 pour le bouton 1, on ou off

comment faire et sous quel forme?
merci a tous

Bonsoir,
pourquoi isoler le payload ? sur jmqtt en mode json tu récupère {id} et {params}{switch} ?
si ta demande c’est pour par exemple garder la dernière info {id} → {params}{switch} tu ne pourra pas isoler le payload car cette info est écrasé par le nouveau payload, seul moyen est d’utiliser un scénario qui filtrera {id} et qui alimentera un virtuel qui contient tes 8 états du bouton.

1 « J'aime »

je m’en douté un peu mais je voulais absolument eviter la solution scenario/virtuel car trop lent.
je voulais filtrer car toute ce que je recoit c’est
bouton 1 on

{« NSPanel »:{« ctype »:« group »,« id »:« 1 »,« params »:{« switch »:« on »,« switches »:[{« switch »:« on »,« outlet »:0}]}}}
bouton 2 off
{« NSPanel »:{« ctype »:« group »,« id »:« 2 »,« params »:{« switch »:« off »,« switches »:[{« switch »:« off »,« outlet »:0}]}}}
bouton 8 on
{« NSPanel »:{« ctype »:« group »,« id »:« 8 »,« params »:{« switch »:« on »,« switches »:[{« switch »:« on »,« outlet »:0}]}}}

ect
et je trouvé domage de monter un scenario super complexe et donc lent pour ca

1 « J'aime »

Bonjour,

Veuillez mettre code et log dans un Texte préformaté
Les caractères de votre json ont été modifié et le fichier est difficile à lire

Même en éditant votre message c’est trop tard et cela reste incorrecte.

Hello @sheep300,

Pour identifier une partie du payload Json de façon conditionnelle, il faudrait pouvoir utiliser une expression JSONPath type : $.NSPanel[?(@.id =="1")].params.switches[0].switch
(Trouvée ici : Sonoff NSPanel + Tasmota Flash / Konfiguration – BangerTECH)

Or jMQTT NE SUPPORTE PAS actuellement la recherche dans les payload Json en JSONPath.

Ne serait-ce pas une évolution à prendre en compte dans le cadre de notre prochain gros chantier @Domochip ?

4 « J'aime »

Ca permettrait de séparer le topic du chemin JSON.
Très interessant.
Il faudrait faire 2 champs sur les commandes.
Par contre, je ne vois pas encore l’impact sur la vue JSON, mais ca ne parait pas insurmontable.
Au lieu de générer {toto}{tutu}
Il faut mettre [toto][tutu]

3 « J'aime »

Hello @sheep300,

Je ne sais pas si tu as vu, mais le « jsonPath » est a présent implémenté dans jMQTT.

Tu peux donc utiliser $.NSPanel[?(@.id =="1")].params.switches[0].switch pour identifier l’état de ton switch 1 sur ton NS Panel :wink:

Enjoy,
Bad

1 « J'aime »

merci pour l’info !!

je t’avoue avoir du mal a comprendre mais je m’accroche

je suis au regret de te dire que ca ne fonction pas…:frowning:
recu de /RESULT {"NSPanel":{"ctype":"group","id":"1","params":{"switch":"off","switches":[{"switch":"off","outlet":0}]}}}
j’ai mis $.NSPanel[?(@.id == "1")].params.switch
petite modif mais rien n’y fait j’ai essayé avec plein de format different mais ca ne veux pas … dés que je filtre plus rien n’arrive j’ai meme essayé avec des ‹ 1 › 1 .
ca ne veux pas je suis en train de me dire que si ca ce peu c’est que le id n’est pas positionné ou il faut dans la chaine.
désolé de t’emmerder avec ca, si tu as une idée
merci

Tu peux me faire une capture d’écran de la config de ta commande info stp ?

A la vue de la capture, ça a l’air de marcher, non ?:sunglasses:

1 « J'aime »

Je regarde de plus près dans 10mins

non c’est en faisant mes essais ^^

Hello,

Voici la bonne expression : $[?($.NSPanel.id=="1")].params.switches[0].switch
Il fallait filtrer un cran plus haut :wink:

Bad

Super !!
j’etais pas loin dans mes deductions mais je t’avoue que je suis pas trés doué dans ce genre de choses
c’etait bien ca ! merci beaucoup !

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