Dans ce second article de la série Un tableau de bord domotique, je veux afficher une température stockée dans ma box domotique Eedomus + à mon tableau de bord (en PHP, sur Raspberry Pi).
Cet article a été complété le 8 mai 2017.
De quoi je pars ?
d’une page index.php servie par un Raspberry Pi, comme indiqué dans le premier article de cette série.
l’API de la box Eedomus
Elle est bien documentée ici : API eedomus.
Obtenir une clé d’API Eedomus
Dans https://secure.eedomus.com/, cliquer sur configurer puis « mon compte ».
- Cocher la case « autoriser l’API via http » et « sauver ».
- Cliquer sur « consulter vos identifiants »
On obtient ainsi les valeurs de api_user et api_secret qui nous permettront de nous connecter. On accède aussi à un formulaire qui va nous permettre de construire la requête.
Faire une requête pour un capteur spécifique
J’utilise le formulaire précédent puis je copie la requête HTTP obtenue :
La requête est de type (remplacer api_user et api_secret) :
http://api.eedomus.com/get?api_user=xxx&api_secret=yyy&action=periph.caract&periph_id=166280
Lorsque je la tape dans un navigateur internet, j’obtiens la chaîne JSON suivante :
{ "success": 1, "body":{"periph_id": "166280", "name": "Nest - Température Couloir RdC", "last_value": "24.5", "last_value_text": "", "last_value_change": "2016-08-15 15:50:55"}}
Pour lire cette donnée dans mon fichier PHP, je me suis inspirée de l’exemple donné à la fin du document API eedomus.
J’ai intégré le code suivant à ma page index.php :
<h3>Autres informations</h3> <?php include 'eedomus.php';?> <!-- nest temperature ID 166280 --> <p>couloir : <?php echo al_get_eedomus_value( 166280, 'last_value' ) ; ?> °C</p>
Et dans le fichier eedomus.php , j’ai intégré une fonction al_get_eedomus_value :
<?php // définition des variables $api_user = 'xxx'; // a récupérer sur votre compte eedomus $api_secret = 'yyy'; // a récupérer sur votre compte eedomus /****************************************************************** * appel de l'API eedomus en PHP pour récupérer une donnée * * $id = 166280 * $val = 'last_value' * retournera la température actuellement mesurée par le thermostat Nest * *****************************************************************/ function al_get_eedomus_value( $id, $val ) { global $api_user ; global $api_secret ; // construction de l'URL de l'API $url = "http://api.eedomus.com/get?action=periph.caract"; $url .= "&api_user=" . $api_user; $url .= "&api_secret=" . $api_secret; $url .= "&periph_id=" . $id; // appel de l'API $result = file_get_contents($url); // on controle le résultat if (strpos($result, '"success": 1') == false) { echo "Une erreur est survenue : [".$result."]"; } else { $result = json_decode( $result, true ) ; // true transforme $result en un array $retour = $result['body'][$val]; return $retour ; } }
Le résultat est maintenant affiché sur mon tableau de bord :
Mais les données ne sont mises à jour que si je rafraichis le tableau de bord manuellement.
Mettre à jour automatiquement les données de la page PHP
Cette question sur StackOverflow explique comment recharger une page toutes les 30 secondes. Il suffit d’ajouter <meta http-equiv= »refresh » content= »30″ /> en haut de la page PHP.
Comme 15 minutes = 900 secondes, j’ai intégré la ligne <meta http-equiv= »refresh » content= »900″ /> en haut de ma page PHP. Le haut contient donc maintenant :
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Nautilus</title> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link href="A-style.css" rel="stylesheet" media="all" type="text/css"> <meta http-equiv="refresh" content="900" /> </head>
Complément (8 mai 2017)
J’ai affiné le contenu de ma page php pour avoir automatiquement la liste des périphériques de l’eedomus. C’est un préalable à un tableau de bord qui lirai automatiquement toutes les données de l’eedomus.
Obtenir la liste des périphériques
Dans le code ci-dessous, la fonction eedomus_url génère les url correctes pour :
- vérifier qu’on se connecte correctement à la box Eedomus ;
- Obtenir la liste des périphériques de la box Eedomus ;
- Lire la valeur d’un périphérique donné de la box Eedomus
la fonction ald_decode_french permet de lire correctement des textes encodés en français, avec des caractères spéciaux.
<?php function eedomus_url( $action, $user_id, $pw ) { /* * eedomus_url( "&action=auth.test", $ee_apiuser, $ee_passwd ) construit * https://api.eedomus.com/get?api_user=USER&api_secret=SECRET&action=auth.test * eedomus_url( "&action=periph.list", $ee_apiuser, $ee_passwd ) construit * https://api.eedomus.com/get?api_user=USER&api_secret=SECRET&action=periph.list * eedomus_url( "&action=periph.caract&periph_id=156595", $ee_apiuser, $ee_passwd ) construit * https://api.eedomus.com/get?api_user=USER&api_secret=SECRET&action=periph.caract&periph_id=156595 * * ces 3 url renvoient bien une info en Json, en provoenance de l'eedomus dans un navigateur */ $eedomus_get = "https://api.eedomus.com/get?api_user=" ; $eedomus_get .= $user_id ; $eedomus_get .= "&api_secret=" ; $eedomus_get .= $pw ; $eedomus_get .= $action ; return $eedomus_get ; } $ee_test = eedomus_url( "&action=auth.test", $ee_apiuser, $ee_passwd ) ; $ee_list = eedomus_url( "&action=periph.list", $ee_apiuser, $ee_passwd ) ; $ee_156595 = eedomus_url( "&action=periph.caract&periph_id=156595", $ee_apiuser, $ee_passwd ) ; function ald_decode_french( $string ) { $contents = utf8_encode( $string ); $results = json_decode( $contents ); return $results ; }
Si j’utilise la fonction ald_decode_french sans la partie ‘utf8_encode’, le résultat est vide car les accents provoquent des erreurs. Ci-dessous, dans l’image, à gauche on a le résultat de <pre><?php print_r ( file_get_contents( $ee_list ) ) ; ?> </pre> et à droite le résultat de <pre><?php print_r ( ald_decode_french( file_get_contents( $ee_list ) ) ); ?> </pre> . Les accents sont correctement restitués dans la version de droite.
Et maintenant ?
Je vais maintenant voir comment un Raspberry Pi peut transmettre une valeur mesurée à l’Eedomus. Ce sera l’objet du prochain article de cette série Un tableau de bord domotique. Ensuite, je pourrai utiliser le présent tutoriel pour l’afficher sur mon tableau de bord.