Wildcards dans le chemin json

Salut,

Est-il autorisé d’utiliser des wildcards dans le chemin json comme l’image ?

:thinking:
Oui.

Et même plus.

https://docs.bad.wf/fr_FR/jmqtt/stable/index?theme=light#Onglet%20Commandes%20-%20Type%20Information

1 « J'aime »

merci, je dois l’essayer

1 « J'aime »

Je ne sais pas si je le fais correctement parce que je n’obtiens rien.

JSONs reçu

{"DATE":"2024-04-12 09:26:11","CONNECTOR_ID":2,"ID":1449,"PCS":0,"PU":408,"PG":408,"STATE":1,"TotalActiveEnergyImp":26693872,"E":0,"USER":"00000001","dE":0}
{"DATE":"2024-04-12 09:08:39","CONNECTOR_ID":1,"ID":1448,"PCS":0,"PU":386,"PG":386,"STATE":1,"TotalActiveEnergyImp":26693758,"E":12442882,"USER":"00000003","dE":22700}`

Hello,

Peux-tu préciser ce que tu essayes d’obtenir ?
Tu as vu qu’il y a un testeur de jsonPath dans jMQTT ?

Bad

Merci pour votre réponse rapide et pour l’excellent travail que vous avez effectué avec ce merveilleux plugin.

Ce que je veux réaliser, c’est qu’il ne me montre les données json que lorsque CONNECTOR_ID = 1. Pouvez-vous penser à la façon d’utiliser jsonpath pour cela ?

Simuler l’exemple $…book[?(@.price<10)] serait quelque chose comme $…E[?(@.CONNECTOR_ID=1)] mais cela ne fonctionne pas

Je viens de trouver le testeur jsonpath, je vais voir si je peux obtenir ce qui m’intéresse.

j’ai quelques progrès

[?($.CONNECTOR_ID<2)]

mais je ne peux pas garder qu’une seule des valeurs (par exemple la troisième)

Je ne sais pas comment continuer à partir d’ici

Peux-tu m’en dire plus sur l’équipmeent qui envoie le payload ?
J’essaye de comprendre d’où ton payload arrive, à quoi il sert et comment tu l’utilises dans Jeedom.

Sache que le filtrage que tu essayes de faire est (tel quel) probablement impossible en jsonPath :
L’opérateur ?() est un opérateur de selection dans une array et ton payload ne dispose par d’array.
Par exemple, avec le payload (tu noteras les [ ] en début et fin) :

[{"DATE":"2024-04-12 09:08:39","CONNECTOR_ID":1,"ID":1448,"PCS":0,"PU":386,"PG":386,"STATE":1,"TotalActiveEnergyImp":26693758,"E":12442882,"USER":"00000003","dE":22700}]

et le jsonPath $..[?(@.CONNECTOR_ID<2)].PCS on obtient bien 0
et avec un payload avec "CONNECTOR_ID":2 on n’obtient pas de résultat (attendu)
car on filtre dans le tableau tous les CONNECTOR_ID < 2.

Mais sans l’array autour du payload, ce n’est pas possible, c’est pour ça que j’ai besoin d’en savoir plus sur ce que tu utilises autour de jMQTT.

Bad

1 « J'aime »

Salut,
L’appareil qui envoie les données est une borne de recharge pour véhicule électrique dotée de deux prises de recharge.
L’appareil envoie l’état des deux points de recharge pratiquement dans la même seconde.

{"DATE":"2024-04-15 08:02:24","CONNECTOR_ID":1,"ID":1452,"PCS":0,"PU":361,"PG":361,"STATE":1,"TotalActiveEnergyImp":26798030,"E":12498930,"USER":"00000003","dE":29071}
{"DATE":"2024-04-15 08:02:24","CONNECTOR_ID":2,"ID":1449,"PCS":0,"PU":361,"PG":361,"STATE":1,"TotalActiveEnergyImp":26798030,"E":0,"USER":"00000001","dE":0}

Le champ PCS indique la consommation instantanée et le champ CONNECTOR_ID indique d’où sont tirées les informations.

Pour séparer les informations des deux sockets, je dois filtrer par CONNECTOR_ID.
J’espérais qu’avec jsonpath je pourrais résoudre ce problème « nativement ». Si finalement je n’y arrive pas, ce ne serait pas un gros problème puisque j’utilise actuellement un scénario de type code pour faire cette opération.

$trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger());
$json = cmd::byString($trigger)->execCmd();
$jsonData = json_decode($json,true);

$DATE = $jsonData['DATE'];
$CONNECTOR_ID = $jsonData['CONNECTOR_ID'];
$ID = $jsonData['ID'];
$PCS = $jsonData['PCS'];
$PU = $jsonData['PU'];
$PG = $jsonData['PG'];
$STATE = $jsonData['STATE'];
$E = $jsonData['E'];
$USER = $jsonData['USER'];
$dE = $jsonData['dE'];


if ($CONNECTOR_ID == 1){
//cmd::byString("#[VE][Punto de recarga][DATE]#")->event(($DATE));
cmd::byString("#[VE][Punto de recarga][Consumo VE]#")->event(($PCS));
//cmd::byString("#[VE][Punto de recarga][Consumo hogar]#")->event(($PU));
//cmd::byString("#[VE][Punto de recarga][Consumo total]#")->event(($PG));
cmd::byString("#[VE][Punto de recarga][STATE]#")->event(($STATE));
cmd::byString("#[VE][Punto de recarga][USER]#")->event(($USER));
cmd::byString("#[VE][Punto de recarga][Cargado]#")->event(($dE));}

Hello et merci pour ces détails.

Tu peux me donner le modèle stp ?
C’est opensource ? Il y a un Github ?

C’est quand même con qu’il fassent 2 envois en 1s, au lieu d’un seul avec le payload :

[
	{
		"DATE": "2024-04-15 08:02:24", "CONNECTOR_ID": 1,
		"ID": 1452, "PCS": 0, "PU": 361, "PG": 361, "STATE": 1,
		"TotalActiveEnergyImp": 26798030,
		"E": 12498930, "USER": "00000003", "dE": 29071
	},
	{
		"DATE": "2024-04-15 08:02:24", "CONNECTOR_ID": 2,
		"ID": 1449, "PCS": 0, "PU": 361, "PG": 361, "STATE": 1,
		"TotalActiveEnergyImp": 26798030,
		"E": 0, "USER": "00000001", "dE": 0
	}
]

Bad

2 « J'aime »

est-ce un ancien modèle

Orbis - CARGADOR VE VIARIS COMBI, 7,4 kW 32 A MANGUERA TIPO 2 MODO DE CARGA 3 : Amazon.es: Bricolaje y herramientas

Il n’est pas open source et n’a pas Github. Je n’ai que le protocole MQTT

peut-être que tu as raison. ils auraient pu utiliser deux sujets différents par prise de charge. Les deux auraient rendu les choses plus faciles.