Séparer les valeurs d'une info JMQTT

Bonsoir,
J’ai un problème avec JMQTT et une sonde AM2301.
Je précise que la sonde est connectée avec un esp8266 flashé sous tasmotta.
La sonde en elle même fonctionne très bien elle me permet de recuperer la température et l’humidité de la pièce où elle se trouve.
Le problème est la forme de la réponse à l’info de JMQTT. Quand je fais une requète j’obtiens ce genre de réponse:
{Time:2021-01-24T21:36:50,AM2301:{Temperature:22.1,Humidity:38.5,DewPoint:7.3},TempUnit:C}
Hors impossible d’exploiter cette info comme cela.
Comment séparer les valeurs afin de pouvoir recuperer uniquement la valeur numérique.
En esperant que vous puissiez m’aider.

Tu aurais 2 méthodes qui pourrait t’aider :

Le moins pratique :
En script bash (plugin script), il te faut pour cela que la librairie jq soit installée.
si $mqtt est ton message mqtt voici comment récupérer la Temperature par exemple

$mqtt | jq -r '.AM2301.Temperature'

En php, dans un scenario
Considérant une valeur en entrée sur le plugin Jmqtt ayant comme nom [Piece][Capteur][AM2301]

$mqtt = $scenario->cmd::byString("#[Piece][Capteur][AM2301]#")->execCmd() ;
$temperature = json_decode($mqtt )->{'AM2301'}->{'Temperature'};

En espérant que cela réponde à ta question.

Bonsoir et merci de votre réponse.
En essayant cela :

$mqtt = $scenario->cmd::byString("#[Aucun][tele][Température_chambre:SENSOR]#")->execCmd() ;
$temperature = json_decode($mqtt )->{'AM2301'}->{'Temperature'};
cmd::byString("#[Aucun][Température Chambre][TEST]#")->event($temperature);

le scénario m’indique une erreur

[2021-01-24 22:16:30][SCENARIO] Start : Scenario lance manuellement.
[2021-01-24 22:16:30][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-01-24 22:16:30][SCENARIO] Exécution d’un bloc code
[2021-01-24 22:16:30][SCENARIO] Class name must be a valid object or a string
[2021-01-24 22:16:30][SCENARIO] Fin correcte du scénario

J’ai relativement peu de compétences en la matière, je suis un peu perdu…
Je précise que [Aucun][Température Chambre][TEST] est un virtuel que j’ai créé pour recupérer l’info.

J’ai trouvé !
Il fallait faire ceci :

$value = cmd::byString('#[Aucun][tele][Température_chambre:SENSOR]#')->execCmd();
$temperature = json_decode($value )->{'AM2301'}->{'Temperature'};
cmd::byString("#[Aucun][Température Chambre][TEST]#")->event($temperature);```

Hello

Pourquoi passer par un script / bloc code ?
De base le traitement du json ne fonctionne pas ?

1 « J'aime »

non le plugin a un problème quand je clique sur JSON rien ne s’affiche…

As-tu attendu assez longtemps ? En fonction de la quantité de devices, ça peut-être un peu (très) long

oui, j’ai attendu c’est effectivement très long mais le problème c’est que le retour est illisible…

Applique la correction décrite ici et refais un essai

Tu peux aussi le faire manuellement en ajoutant à la fin dans le topic de ta commande info qui retourne le JSON :

{AM2301}{Temperature}
1 « J'aime »

Cela fonctionne avec la solution donnée par naboleo pour le plugin JMQTT et les erreurs avec les commandes info !

Genial !! Merci pour cette solution !

Tu peux faire une copie d’écran du Topic ?

Cela fonctionne avec la solution donnée par naboleo pour le plugin JMQTT et les erreurs avec les commandes info ! Avant la modification du topic ne donnait rien mais maintenant le problème est rêglé !
Merci de votre aide !!

Une copie d’écran du topic qui fonctionne pour le retour de la température serait quand même la bienvenue (pour comprendre).

Ok ! Voici le topic !


1 « J'aime »

Merci, cela confirme mes dires.

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