Récupérer variable dans un url JEEDOM

Bonjour,

Je reviens avec mes recherches pour récupérer une variable d’une chaîne.

J’ai essayé en script, scénario mais rien n’y fait. J’ai peut-être une autre idée :

Je créais un script qui me donne la liste de variable issue de mon application domotique.
Je créais un virtuel afin de l’archiver et avoir un lien URL JEEDOM avec cette chaîne de variable.

Maintenant je voudrais un script permettant de me donner l’info d’une variable sur cet URL. J’ai épluché le forum toute l’après-midi mais la je m’avoue vaincu. J’ai pu voir que c’est faisable sur des sites météo, prix du pétrole, … mais c’est trop poussé pour moi.

Je voudrais donc que ce script me donner la valeur X venant de l’URL type :
https://mon.jeedom.com/core/api/jeeApi.php?apikey=virtuel&type=cmd&id=duvirtuel

Pour info le résultat de cet URL :

{remark: 1, protoc: 3, wss_port: 8880, ws_port: 8080, did: did, port_s: 8883, is_disabled: false, proto_ver: 04, product_key: key, port: 1883, host: eum2m.gizwits.com, mac: micmac, state_last_timestamp: 1603353158, role: special, gw_did: null, mesh_id: null, is_online: true, passcode: mdp, sleep_duration: 0, product_name: \u672c\u5, is_low_power: false}

Merci pour votre aide.

Hello,

J’ai pas tous compris.
Qu’appelle tu « chaîne » est-ce le résultat de l’URL ?

C’est au format Json, tu peux passer par un script PHP ou dans un scénario code.

En PHP tu aura besoin des fonctions suivantes :
File_get_contents()
Json_decode()

Si tu peux préciser quelle valeur tu veux récupérer exactement…

Merci de me répondre.

Alors la chaîne de caractère c’est le texte : « remark… » que j’ai mis en code.

Mon but c’est de ne pas avoir toutes ces infos mais uniquement récupérer la valeur du : is_online.

En code ou script je n’arrive pas à réduire la variable de mon virtuel.

$json = file_get_contents('https://mon.jeedom.com/core/api/jeeApi.php?apikey=virtuel&type=cmd&id=duvirtuel');
$array = json_decode($json, true);
echo $array['is_online'];

Code a adapter a ce que tu veux faire.

Merci.

Je viens de tester, j’ai comme réponse : is_online alors que je m’attendais à avoir true ou false si l’appareil n’était pas connecté.

J’ai fait une mauvaise manipulation ?

Remplace la ligne

Echo $array['is_online'];

Par

var_dump($array);

Si je fais :

$json = file_get_contents('https://ip.jeedom.com/core/api/jeeApi.php?apikey=api&type=cmd&id=id');
$array = json_decode($json, true);
var_dump($array);

J’ai un message d’erreur string(6) « $array » {« state »:« error »,« result »:« Erreur sur $json = « mon retour d’infos »\n$array = ;\n; 2>&1 valeur retournée : 2. Détails : </span> »,« code »:0}

Je viens de tester autre chose avec la recherche initiale. Mon but étant de récupérer l’info de l’état de la variable is_online j’ai mis :

$json = file_get_contents('ip?apikey=api&type=cmd&id=id');
$array = json_decode($json, true);
echo $array['is_online: false'];

Donc si sur le lien URL de mon virtuel l’état de la variable is_online est sur true je ne devrais rien avoir, hors j’ai la réponse : is_online: false.
J’ai testé, si je mets is_online: true j’ai le résultat is_online: true. Alors que c’est réponse est bien présente.
Si je mets angeck (qui n’est pas une info présente dans les lignes de mon virtuel) j’ai le résultat : … angeck.

J’ai aussi changé le sous-type en Numérique et Binaire au cas ou la réponse soit 0 = non présent et 1 = présent mais rien n’a changé, ma réponse est la même que l’élément recherché.

J’espère que je suis clair, car je n’ai pas le vocabulaire…

Non ce n’est pas du json. Il manque toutes les ".
Comme me l’a précisé Loic dans un PR, une cmd d’un virtuel n’est pas faite pour stocker du html, svg ou json.
Les " d’une cmd d’un virtuel sont toutes supprimées.

@angeck il faut repartir de l’URL qui a rempli le virtuel pour récupérer un vrai json et pouvoir utiliser json_decode()

Merci.

Alors si je prends l’url de mon script qui me permet d’avoir les infos voici ce que j’ai, là les infos ne sont pas repassées dans le virtuel et ont les «  ».


{"remark": "1", "protoc": 3, "wss_port": 8880, "ws_port": 8080, "did": "did", "port_s": 8883, "is_disabled": false, "proto_ver": "04", "product_key": "key", "port": 1883, "host": "eum2m.gizwits.com", "mac": "mac", "state_last_timestamp": 1603586199, "role": "special", "gw_did": null, "mesh_id": null, "is_online": true, "passcode": "mdp", "sleep_duration": 0, "product_name": "name", "is_low_power": false}

Par contre avec le code :

$json = file_get_contents('ipduscript');
$array = json_decode($json, true);
echo $array['is_online'];

J’ai toujours le résultat is_online et si je mets un mot inventé dans le [’’] ce mot apparait en résultat.

si je fais :

$json = file_get_contents('ipduscript');
$array = json_decode($json, true);
var_dump($array);

J’ai toujours un message d’erreur :

string(6) "$array"......................................;;;\n$array = ;\n; 2>&1 valeur retournée : 2. Détails : <\/span>","code":0}

En copiant/collant votre json dans un fichier et dans le plugin script, ça donne:


En cliquant sur le bouton Tester à droite de cette commande, j’ai bien 1 qui s’affiche si "is_online": true et rien si "is_online": false.

Vérifiez bien votre 'ipduscript' en faisant afficher $json après file_get_contents.
Si rien ne s’affiche, regardez dans le log http.error s’il une erreur est signalée.

$json = file_get_contents('http://jeedom/angeck.json');
echo $json;
$array = json_decode($json, true);
var_dump($array);
echo $array['is_online'];

Bien @jpty j’avais pas fait gaffe
Dans ce cas ceci devrait corriger le tir :

$string = file_get_contents('url');
$json = json_encode($string);
$array = json_decode($json, true);
var_dump($array);

Ceci uniquement si il manque les «  » dans ce que tu récupères.

Mais essaie d’abord le code de @jpty pour voir ce qu’il ressort de ton url

Non ca ne corrige rien. json_encode d’une chaine ne fait qu’encoder la chaine(doublage des \ dans ce cas). Pour avoir un json correct, il faudrait une array.
Le pb est le passage dans le virtuel qui supprime les "
et c’est contournable facilement en reprenant l’URL qui a servi à remplir la cmd du virtuel.

Merci pour l’explication, j’ai jamais utilisé json_encode…

@angeck il nous faudrait le résultat du echo $json

Euh alors je comprends pas pourquoi je suis parti si loin car en faisant comme l’a proposé @jpty j’ai directement le résultat…

J’ai testé pour de « vrai » si je déconnecte l’appareil j’ai bien un résultat à 0 et si je connecte j’ai : 1.

Un énorme merci à vous. Si vous voulez un test je peux faire.

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