Interpréter réponse d'une commande REST

Bonjour, je sollicite l’aide des spécialistes :slight_smile:

Je dispose d’un poêle à bois connecté , j’aimerais récupérer les données dans mon Jeedom.
Lorsque j’envoie une requete REST , par exemple http://192.168.86.90/get_stove_data

j’obtiens la réponse suivante avec toutes les valeurs qui m’intéressent :

{
  "updating": 0,
  "message_id": 27,
  "phase": 3,
  "night_lowering": 0,
  "new_fire_wood_hours": 2,
  "new_fire_wood_minutes": 0,
  "burn_level": 1,
  "operation_mode": 2,
  "maintenance_alarms": 0,
  "safety_alarms": 0,
  "refill_alarm": 0,
  "remote_refill_alarm": 1,
  "time_since_remote_msg": 15,
  "version_major": 1,
  "version_minor": 9,
  "version_build": 9,
  "remote_version_major": 3,
  "remote_version_minor": 6,
  "remote_version_build": 0,
  "day": 4,
  "month": 12,
  "year": 2021,
  "hours": 17,
  "minutes": 54,
  "seconds": 25,
  "night_begin_hour": 0,
  "night_begin_minute": 30,
  "night_end_hour": 7,
  "night_end_minute": 0,
  "stove_temperature": 32500,
  "room_temperature": 2400,
  "oxygen_level": 800,
  "valve1_position": 0,
  "valve2_position": 66,
  "valve3_position": 32,
  "algorithm": "TEST DATA",
  "doorOpen": false
}

Je voudrais pour les afficher dans jeedom mais ne sais absolument pas comment faire, par exemple j’arrive à envoyer une requête dans le plugin script, mais je ne sais pas comment décoder la réponse pour afficher les valeurs.

Je sollicite donc votre aide :wink:

merci d’avance,

Bonsoir

Alors de mémoire, il faut utiliser JSON, mettre ton url en url et ensuite mettre le paramètre en requête, précédé de >
(Pas l’ordi sous la main, c’est pour ca que je dis ca de mémoire)

De mon côté quand j’utilise ce procédé pour l’api shelly je ne précède pas de >.

Je ne sais pas si cela change quelque chose.

Salut @dahu57,
le plus simple pour un néophyte, tu enregistres les valeurs que tu obtiens dans un fichier avec l’extension json.
Ensuite tu lis les datas via un scenario qui enregistre tout ce que tu veux dans différentes variables.

Bonsoir,
La solution passe par un bloc code senario
ou
1 tu va appeler l’url et récupérer les données json dans une variable
2 a l’aide d’une fonction json_decode tu va transformer ta variable en un array (tableau)
puis pour les valeurs que tu désire affecter des tag que tu récupérera dans la suite de ton scenario
grasse a un setag

dans le reste du senario
tu pousse les valeur dans un virtuel par exemple
a l’aide d’instructions event commande tag …

voilà bonne soirée

Cadeau vite fait :

code_scenario.txt (1,7 Ko)
Ensuite du fait un Virtuel et tu récupères tes variables par exemple :
variable(‹ oxygen_level ›)

:see_no_evil:

1 « J'aime »

Pas mal les variables c’est bien les tag c’est mieux

$tags = $scenario->getTags();
$req  = 'curl "http://192.168.86.90/get_stove_data"';
$poelejson = shell_exec($req);
$json=json_decode($poelejson, true);

// a faire pour chaque données a rucuperer
// on peut aussi faire une boucle pour tout récuperer

$tags['#stove_temperature#'] = $json['stove_temperature'];
$tags['#room_temperature#'] = $json['room_temperature'];

//

$scenario->setTags($tags);

// ne te reste plus qu'a faire un 
// event commande tag pour mettre ça dans un virtuel

Version on récupère tout dans des tag du même nom

$tags = $scenario->getTags();
$req  = 'curl "http://192.168.86.90/get_stove_data"';
$poelejson = shell_exec($req);
$json=json_decode($poelejson, true);
foreach( $json as $key => $value ) 
$tags['#'.$key.'#'] = $json["$key"];
$scenario->setTags($tags);

ouah, super, merci à tous, quelle communauté !!

je viens d’essayer la méthode du plugin script et ça fonctionne, je n’avais pas saisi qu’il fallait créer une info par donnée.
Voilà ce que ça donne :

Je vais continuer, mais je pense que ça répondra au besoin.

Sinon, je tenterais les méthodes que vous proposez, mais en ultime recours car le code est un peu complexe pour moi :wink:

Merci merci merci !!!

Maintenant, que j’arrive a récupérer les informations du poêle, il me reste à essayer de trouver comment envoyer des commandes, mais je n’ai rien trouvé pour l’instant.
A l’origine j’ai trouvé la commande REST grâce à un projet sur github
merci à lui

Si qqu’un avait une idée pour récupérer les commandes… il existe une application ‹ IHS › qui s’interface avec mon poêle à bois, j’imagine qu’on pourrait l’exploiter pour en tirer quelque chose mais je ne sais pas comment m’y prendre (je rappelle, je ne suis pas dév :wink: je sais juste me débrouiller avec qques outils )

@olive @cstan77
Pour ma culture personnelle, pourquoi passer par des scenarios, du code et des variables, alors qu’on peut récupérer ces données direct en json via le plugin script?
Je trouve que ça alourdit le process non?

Bonjour @drs,
je suis d’accord avec toi, perso je fait tout en plugin c’est plus rapide.

Mais je respecte le cahier des charges de @dahu57 , il voulait un script pour récupérer les infos et un virtuel.
Je pense que tout le monde ne maitrise pas la programmation PHP/Jquery…

Salut @drs
Les données sont plus simple a manipuler
et si tu regarde bien en script tu si il y a 50 info tu va faire 50 fois la même requette sur un endroit different du json.
Mon scenario fait une seule requette et répartie les données dans 50 tag qu’il n’y a plus qu’a utiliser …
et si tu te débrouille bien ça peut faire un plugin en moins dans ton système

Ah oui effectivement j’avais pas pensé à cet aspect

@cstan77
J’avais pas compris qu’il voulait un script

En tout cas, je note vos solutions ça peut toujours servir :slight_smile:

1 « J'aime »

ça fonctionne parfaitement, merci !!

Je n’avais pas considéré le fait que le script exécute autant de requêtes que de valeurs à récupérer…

En tout cas, merci !

Autre question qui n’est pas directement liée à jeedom, je ne sais pas si le poêle pousse des datas régulièrement ou spontanément, ça m’éviterait de faire des requêtes à une fréquence peut être trop fréquentes. Pensez vous qu’il soit possible de le vérifier ?

cordialement

Trés difficile a répondre a cette question il faudrait qu’une api soit fournie et voir si un système de pooling est prévue …
dans un scenario on va être limité dans tous les cas a une requette par minute ce qui est déjà pas mal pour ce genre d’objet
Aprés il faut voir la fréquence d’actualisation des données du poele et regarder avec le date /heure
si une évolution entre 2 requette donne des valeurs differentes …

pour la suite il reste a trouver si l’on peut envoyer des commandes a fin de le piloter depuis jeedom.
Y a t’il une interface web qui permette de faire ça ? (on pourrait analyser son contenu pour en déduire des actions a faire )

amélioration pour voir les données dans le log du scenario
et suppression de variables inutile, compactage :wink:

$tags=$scenario->getTags();
$json=json_decode(shell_exec('curl "http://192.168.86.90/get_stove_data"'),true);
foreach($json as $key => $value){$scenario->setLog($key.': '.$value);$tags['#'.$key.'#']=$value;}
$scenario->setTags($tags);

merci encore, le code dans le scenario fonctionne.

j’ai trouvé quelques commandes en fouillant le net, quelqu’un a développé un outil, j’ai pu récupérer qques infos intéressantes, voici les liens :

https://forum.iobroker.net/topic/47697/gelöst-wert-json-an-url-senden/76

J’arrive à modifier la consigne de chauffe par exemple avec « set_burn_level ».
Voici la commande en question :
image
image

maintenant, j’aurais besoin de savoir comment traduire cette commande en code pour l’exécuter dans un bloc code scénario.

La encore, je vous sollicite :grin: :blush:

Cordialement

Il faut tester dejà dans un navigateur voir ce qui passe

http://192.168.86.90/setburn_level 1
ou
http://192.168.86.90/setburn_level {"level":1}

re bonjour

la réponse dans le navigateur est {« response »:« unknown route »}

Dans mon client REST cela fonctionne bien, voici ce que ça donne dans wireshark :

En espérant que vous puissez m’aider,

Cordialement

Finalement j’ai trouvé en utilisant POSTMAN, qui permet d’afficher le code de la requête en curl
Voilà ce que ça donne :

Et dans jeedom :

$req = ‹ curl --location --request POST « http://192.168.86.38/set_burn_level » --header « Accept: application/json » --header « Content-Type: application/json » --data-raw « {"level":1} » ›;
shell_exec($req);

Merci encore !!!

Ce sujet a été automatiquement fermé après 11 heures. Aucune réponse n’est permise dorénavant.