Je souhaite afficher sur un design la valeur d’une cryptomonnaie. Pour cela, je passe par le site suivant coinmarketcap qui détaille comment utiliser la clé API et récupérer les valeurs souhaitées.
Donc je suis parti du code php exemple donné sur le site, j’ai modifié avec ma clé API et j’ai mis start et limit à 1 pour n’avoir en retour que la monnaie qui m’intéresse. En l’occurrence le Bitcoin.
<?php
$url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest';
$parameters = [
'start' => '1',
'limit' => '1',
'convert' => 'EUR'
];
$headers = [
'Accepts: application/json',
'X-CMC_PRO_API_KEY: [remplacer par la clé API]'
];
$qs = http_build_query($parameters); // query string encode the parameters
$request = "{$url}?{$qs}"; // create the request URL
$curl = curl_init(); // Get cURL resource
// Set cURL options
curl_setopt_array($curl, array(
CURLOPT_URL => $request, // set the request URL
CURLOPT_HTTPHEADER => $headers, // set the headers
CURLOPT_RETURNTRANSFER => 1 // ask for raw response instead of bool
));
$response = curl_exec($curl); // Send the request, save the response
print_r(json_decode($response)); // print json decoded response
curl_close($curl); // Close request
?>
Seulement je ne sais pas, à partir de là, comment récupérer la valeur pour la mettre dans l’info d’un virtuel et l’afficher sur mon design.
Je tourne sous Jeedom 4.1.27 sur un Raspberry Pi 4.
J’ai déjà le plugin Script. Je ne comprends pas ce que tu me dis de faire.
Mon code php se trouve dans un bloc code dans mon scénario. Ce n’est pas suffisant pour que le scénario l’exécute ?
Quoi qu’il en soit, ça ne me dit pas comment faire passer le résultat du script à la variable info de mon virtuel.
OK, on va faire simple, on va tout mettre dans ton scénario.
Cadeau :
$tags['#DEBUG#'] = 1;
$scenario->setTags($tags);
$tags = $scenario->getTags();
$DEBUG = $tags['#DEBUG#'];
if($DEBUG) { $scenario->setLog('[DEBUG] : DEBUT'); }
$url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest';
$parameters = [
'start' => '1',
'limit' => '1',
'convert' => 'EUR'
];
$headers = [
'Accepts: application/json',
'X-CMC_PRO_API_KEY: [remplacer par la clé API]'
];
$qs = http_build_query($parameters); // query string encode the parameters
$request = "{$url}?{$qs}"; // create the request URL
$curl = curl_init(); // Get cURL resource
// Set cURL options
curl_setopt_array($curl, array(
CURLOPT_URL => $request, // set the request URL
CURLOPT_HTTPHEADER => $headers, // set the headers
CURLOPT_RETURNTRANSFER => 1 // ask for raw response instead of bool
));
$data = curl_exec($curl); // Send the request, save the response
//print_r(json_decode($data)); // print json decoded response
curl_close($curl); // Close request
$scenario->setLog(' [INFO] : MAJ des infos MON-EQUIPEMENT');
// on decode le contenu des infos JSON de la variable $data
$resultat_data = json_decode($data);
if($DEBUG) { $scenario->setLog('[DEBUG] : DATA : ' . $resultat_data); }
// 1ere - Methode avec TAG si besoin de réutiliser les données ailleurs dans le scénario
// recupere les infos du fichier en TAG
$tags['#etat_porte#']=$resultat_data->{'doorOpen'};
$tags['#oxygen_level#']=$resultat_data->{'oxygen_level'};
$tags['#hours#']=$resultat_data->{'hours'};
$tags['#minutes#']=$resultat_data->{'minutes'};
$scenario->setTags($tags);
// Met à jour le virtuel
cmd::byString('#[Maison][porte][etat]#')->event($tags['#etat_porte#']);
cmd::byString('#[Maison][vmc][oxygene]#')->event($tags['#oxygen_level#']);
cmd::byString('#[Maison][info][heure]#')->event($tags['#hours#']);
cmd::byString('#[Maison][info][minutes]#')->event($tags['#minutes#']);
///////////////////////////////////////////////////////
// OU
///////////////////////////////////////////////////////
// 2eme - Methode qui met à jour directement les infos de ton virtuel
cmd::byString('#[Maison][porte][etat]#')->event($resultat_data->{'doorOpen'});
cmd::byString('#[Maison][vmc][oxygene]#')->event($resultat_data->{'oxygen_level'});
cmd::byString('#[Maison][info][heure]#')->event($resultat_data->{'hours'});
cmd::byString('#[Maison][info][minutes]#')->event($resultat_data->{'minutes'});
if($DEBUG) { $scenario->setLog('[DEBUG] : FIN'); }
Dans le code, j’ai fait 2 méthodes pour mettre à jour les infos du virtuel à toi de choisir, celle qui te convient.
Je connais pas l’arborescence de ton JSON donc toutes les clefs sont à la racine du fichier et je ne teste pas les valeurs.
Si tu galères pour récupérer les infos, met la trace du scénario.
ça fonctionne comme ça cmd::byString('#[Maison][porte][etat]#')
mais c’est pas propre et pas dynamique
si tu modifie [Maison][porte][etat] en [Maison][porte][état] ton bloc ne le sais pas …
et plus rien ne fonctionne surtout 6 mois après
c’est pour cela que j’exporte toujours les tags depuis le bloc vers la suite scénario.
tu peut a la limite by id mais la lecture deviens pénible
pareil pour les paramètres en entrée du bloc si il y en a …
Hello @olive
Excuse moi mais je ne comprends pas ce que tu préconises de faire … je suis d’accord avec toi que c’est pas dynamique et pas propre … mais comment faire pour que cela le soit ? que va changer le tag du scenario ?
Pour contre carrer les potentiels problèmes de noms en dur j’ai tout factorisé dans une class perso et je jette une exception si la commande n’est pas existante … comme ça je suis averti en direct si changement de nom d’une commande…ex :
salut @chris94440 ,
j’avais échangé avec Salviaf justement sur ce point et il n’y a pas grand chose à faire.
Apres perso je ne change pas le nom des variables/commandes quand je les ai créer.
tu pourrais aussi faire un clone de ta fonction ‹ executeCommande › en ‹ SetInfoCommande › car : cmd::byString('#'.$commandName.'#')->execCmd(); Récupère la valeur d’une commande info si on met le résultat dans une variable OU sinon exécute l’action
alors que si tu veux mettre à jour une commande info (ce que veut faire @Tabb) c’est avec even : cmd::byString('#[Maison][infos][test]#')->event(29); Mettre à jour une commande info
donc pareil si tu modifie le nom de ta commande ca ne met pas à jour…