Forum eedomus
http://forum.eedomus.fr/

[RESOLU] Question toute simple sur API dans PHP
http://forum.eedomus.fr/viewtopic.php?f=23&t=10182
Page 1 sur 1
Auteur:  lesyl20 [ 15 Nov 2020 18:28 ]
Sujet du message:  [RESOLU] Question toute simple sur API dans PHP

Bonjour,

Malgré les nombreux exemples de code PHP trouvés sur le net, je n'arrive pas à récupérer une valeur d'un périphérique eedomus et l'afficher en php.

J'ai soit rien, soit des erreurs de type api_user.

Est-ce qu'une bonne volonté pourrait me coller ici un bout de code PHP qui fonctionne de son côté?

Je souhaite juste le code tout simple, avec définition api_user, api_secret.

LA construction de l'URL, la requete avec le last_value

Et l'affichage de la valeur.

Merci infiniment d'avance.
Auteur:  rover820i [ 15 Nov 2020 20:25 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

Salut,

C'est un script exécuté sur ta box ou sur un serveur externe ?
Auteur:  KikiFUNstyle [ 15 Nov 2020 20:44 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

Si c'est un script php exécuter depuis une Eedomus :

Code : Tout sélectionner
<?

    // periph_id pour afficher le last_value
    $periph_id = "123456";
   
    // contruction de l'url pour appeler l'API Eedomus
    // pas besoin de user_api et api_secret
    $url = "http://localhost/api/get?&action=periph.caract&periph_id=".$periph_id."&format=xml";
   
    // appel à l'API
    $responseXml = httpQuery($url);
   
    // parsing du XML pour chercher le last value
    $last_value = xpath($responseXml, "//last_value");

    echo "last_value=".$last_value;

?>


API Eedomus

Si c'est hors Eedomus mais dans ton LAN alors l'url sera :
Code : Tout sélectionner
http://[ipEedomus]/api/get?api_user=XXX&api_secret=XXX&action=periph.caract&periph_id=XXX&format=xml


Si c'est hors LAN :
Code : Tout sélectionner
http://http://api.eedomus.com/api/get?api_user=XXX&api_secret=XXX&action=periph.caract&periph_id=XXX&format=xml


Il te reste plus qu'a faire du xpath
Code : Tout sélectionner
//last_value
sur le XML de retour
Auteur:  KikiFUNstyle [ 15 Nov 2020 20:54 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

Si tu souhaites 'juste' afficher le last_value tu peux passer par un Capteur HTTP, soit faire du polling ou faire une règle qui fais la requête à la demande.

Capture.PNG
Capture.PNG (64.24 Kio) Consulté 14284 fois
Auteur:  lesyl20 [ 16 Nov 2020 09:56 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

Merci de vos réponses,

Mais toujours pas.

Je précise que j'essaie d'ajouter ce code sur une page Wordpress, en utilisant soit un plugin permettant d'insérer du php dans une page, soit en utilisant des shortcodes.

J'ai même essayé de mettre le fichier PHP à la racine du site, mais erreur 500.

Voici mon code :

Code : Tout sélectionner
<?php

    // periph_id pour afficher le last_value
    $periph_id = "2024991";
   
    // contruction de l'url pour appeler l'API Eedomus
    // pas besoin de user_api et api_secret
    $url = "http://api.eedomus.com/api/get?api_user=XXX&api_secret=XXX&action=periph.caract&periph_id=2024991&format=xml";
   
    // appel à l'API
    $responseXml = httpQuery($url);
   
    // parsing du XML pour chercher le last value
    $last_value = xpath($responseXml, "//last_value");

    echo "last_value=".$last_value;

?>


Je précise donc que c'est un appel externe à la box;

Cela me parait tellement basique pourtant...
Auteur:  KikiFUNstyle [ 16 Nov 2020 10:33 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

C'est normal je t'ai donné du code pour du PHP à la sauce Eedomus :?

Je n'ai pas d'environnement php désolé je ne vais pas pouvoir t'en dire plus ...
Auteur:  merguez07 [ 16 Nov 2020 10:41 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

si le code php est lu par un interpréteur autre que celui de l'Eedomus, il faut utiliser du code php classique et non du code php Eedomus

Par exemple le code php classique ne peut pas comprendre le code
$responseXml = httpQuery($url);

en effet httpQuery est propre à l'Eedomus. Dans le php classique il faut utiliser le code curl
Auteur:  lesyl20 [ 16 Nov 2020 10:54 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

Dac, je comprends mieux et parfaitement.

Un petit coup de main pour transforme ce code en PHP classique?
Auteur:  merguez07 [ 16 Nov 2020 14:13 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

Code : Tout sélectionner
<?php

// periph_id pour afficher le last_value
$periph_id = "xxxxxx";
$api_secret = "yyyyyyy";
$api_user="zzzzzzz";
$url = "https://api.eedomus.com/get?api_user=".$api_user."&api_secret=".$api_secret."&action=periph.value&periph_id=".$periph_id;

$cURLConnection = curl_init();

curl_setopt($cURLConnection, CURLOPT_URL, $url);
curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($cURLConnection);
curl_close($cURLConnection);

$resultatJson = json_decode($data);
Auteur:  lesyl20 [ 16 Nov 2020 15:17 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

Merci beaucoup Merguez07...

Mais je dois être un boulet car rien ne s'affiche...

Et si je fais un var_dump de la variable $resultatJson, j'ai un NULL

EDIT : je viens de rajouter l'argument "true" au json decode, et cela m'affiche :

Code : Tout sélectionner
array(2) { ["success"]=> int(1) ["body"]=> array(1) { ["last_value"]=> float(18.4) } }


On n'est pas loin, mais il me faut juste le last_value".
Auteur:  merguez07 [ 16 Nov 2020 16:15 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

lesyl20 a écrit:EDIT : je viens de rajouter l'argument "true" au json decode, et cela m'affiche :


je t'avoue ne pas avoir de serveur php et je n'ai donc pas pu tester le code que je t'ai envoyé mais, si avec true ça te donne ça, tant mieux

$value=$resultatJson ["body"]["last_value"];
echo $value;
Auteur:  lesyl20 [ 16 Nov 2020 16:28 ]
Sujet du message:  Re: Question toute simple sur API dans PHP

Yess Man :)

Nickel...

Et merci beaucoup Merguez07... Surtout sans le serveur PHP sous la main...

Je mets le code qui fonctionne donc pour choper la last_value d'un périphérique sur une page PHP externe à la box :
Code : Tout sélectionner
<?php

// periph_id pour afficher le last_value
$periph_id = "XXX";
$api_secret = "XXX";
$api_user="XXX";
$url = "http://api.eedomus.com/get?api_user=".$api_user."&api_secret=".$api_secret."&action=periph.value&periph_id=".$periph_id;

$cURLConnection = curl_init();

curl_setopt($cURLConnection, CURLOPT_URL, $url);
curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($cURLConnection);
curl_close($cURLConnection);

$resultatJson = json_decode($data,true);

$value=$resultatJson ["body"]["last_value"];
echo $value;
?>


Je pense que cela en intéressera plus d'un vu le temps que j'ai pu chercher, et les bouts de code essayés à droite et à gauche.

Je passe en résolu...
Page 1 sur 1 Le fuseau horaire est UTC+1 heure