..:: Domotique Store : Le Blog ::..
eeDomus Tous les articles

Une classe PHP pour s’interfacer avec l’API de eeDomus

Je vous avez déjà fait un petit article sur l’API eeDomus : eeDomus, une API simple et efficace, je vais aujourd’hui vous parler de l’utilisation de cette API depuis PHP.

L’interaction est très facile, et cela permet vraiment d’étendre à l’infinie les fonctionnalités de la box eedomus en l’associant à un langage de script puissant comme PHP.

Je vais aussi en profiter pour vous proposer un petit service pour faire des opérations arithmétiques sur les périphériques eeDomus… Nous verrons dans un prochain article l’utilisation de la classe pour une bilanterie énergétique grâce au compteur téléinformation EDF.

Les fonctions de la classe PHP :

  • Gestion de l’authentification de l’API
  • Lecture de la valeur d’un périphérique
  • Ecriture de la valeur d’un périphérique
  • Opération arithmétique sur les périphériques (+, -, x, /)
  • Recopie d’un périphérique dans un autre

Voyons tout d’abord comment utiliser l’API eeDomus en PHP.

Il suffit d’utiliser la fonction file_get_contents avec l’url construite à partir de la documentation de l’API : https://secure.eedomus.com/doc/index.php/API_eedomus

Par exemple, pour changer la valeur d’un périphérique, il suffit de faire :

file_get_contents("https://api.eedomus.com/set?action=periph.value&periph_id=[XXXX]&value=[XXXX]&valued_date=[YYYY-MM-DD HH:MM:SS]&api_user=[XXXX]&api_secret=[XXXX]");

Je vous invite à relire l’article précédent pour les informations d’identification des périphériques et les identifiants API.

La classe eeDomus que je vous propose est assez simple. Elle va gérer automatiquement l’authentification grâce à une récupération des données depuis l’url (en GET) ou en paramètre en POST http.

Voici le code de la classe eedomus.cls.php :

<?php

class eeDomus {
     var $api_user;
     var $api_secret;
     var $url_server;
     var $error;

     function __construct() 
     { 
          $this->url_server = "https://api.eedomus.com";
          $this->error = "";
     } 

     function setEeDomusServer($url_server)
     {
          $this->url_server = $url_server;
     }

     function autoLoginInfo()
     {
        if (isset($_GET['api_user'])) 
          $this->api_user = $_GET['api_user'];
        else
          if (isset($_POST['api_user'])) 
            $this->api_user = $_POST['api_user'];
          else
            $this->api_user = "";

        if (isset($_GET['api_secret'])) 
          $this->api_secret = $_GET['api_secret'];
        else
          if (isset($_POST['api_secret'])) 
            $this->api_secret = $_POST['api_secret'];
          else
            $this->api_secret = "";

     }

     function setLoginInfo($api_user,  $api_secret)
     {
          $this->api_user = $api_user;
          $this->api_secret =  $api_secret;
     }

     function getError()
     {
        return $this->error;
     }

     function getPeriphValue($periph_id)
     {
          $url =  $this->url_server."/get?action=periph.caract&periph_id=".$periph_id."&api_user=".$this->api_user."&api_secret=".$this->api_secret;
          $arr = json_decode(utf8_encode(file_get_contents($url))); 

          print_r($arr);
          if ($arr->success==1)
            return $arr->body->last_value;
          else
          {
            $this->error = "Impossible de récupérer la valeur du périphérique (".$periph_id.")";

            return 0;
          }
     }

     function setPeriphValue($periph_id, $value)
     {
         $url =  $this->url_server."/set?action=periph.value&periph_id=".$periph_id."&value=".$value."&api_user=".$this->api_user."&api_secret=".$this->api_secret;

         return file_get_contents($url); 
     }

     function setPeriphMath($p1, $p2, $pr, $operator)
     {
          $p1_val = $this->getPeriphValue($p1); 
          $p2_val = $this->getPeriphValue($p2); 

          $pr_val = 0;

          switch ($operator)
          {
          case 'egal' :
            $pr_val = $p1_val;
            break;
          case 'plus' :
            $pr_val = $p1_val + $p2_val;
            break;
          case 'moins' :
            $pr_val =  $p1_val - $p2_val;
            break;
          case 'div' :
            if ($p2_val!=0)
              $pr_val =  $p1_val / $p2_val;
            else
              $pr_val = $p1_val;
            break;
          case 'multi' :
            $pr_val = $p1_val * $p2_val;
            break;
          }

          $this->setPeriphValue($pr, $pr_val);
     }

     function copyPeriphValue($p1, $p2)
     {
          $p1_val = $this->getPeriphValue($p1);           
          $this->setPeriphValue($p2, $p1_val);
     }

}

?>

L’utilisation de cette classe est très simple, il suffit d’inclure dans votre code le fichier « eedomus.cls.php », puis ensuite de créer un objet eeDomus.

Si les paramètres d’authentification de l’API ont été passés comme données HTTP, soit par l’url (GET), soit comme donnée de formulaire POST, il suffit d’appeler la fonction autoLoginInfo() :

<?php
include ("eedomus.cls.php");

$eedomus = new eeDomus;

$eedomus->autoLoginInfo();

?>

Ensuite par exemple pour faire la différence de deux périphériques (code API 12000 et 12005)  avec le résultat dans un Etat virtuel (code API 12200) :

$eedomus->setPeriphMath(12000, 12005, 12200, "moins");

Pour faire la somme :

$eedomus->setPeriphMath(12000, 12005, 12200, "plus");

La division :

$eedomus->setPeriphMath(12000, 12005, 12200, "div");

La multiplication :

$eedomus->setPeriphMath(12000, 12005, 12200, "multi");

Recopier la valeur du périphérique 12000 dans le périphérique 12200 :

$eedomus->setPeriphMath(12000, 0, 12200, "egal");

ou

$eedomus->copyPeriphValue(12000, 12200);

Une multiplication par 1000 :

$val = $eedomus->getPeriphValue(12000);
$eedomus->getPeriphValue(12200, $val*1000);

Pour mettre en œuvre cette classe (pour ceux qui ne sont pas développeur), je vous propose un petit service que vous pourrez utiliser directement depuis votre eeDomus.

Il suffit d’utiliser le service

En paramètre il faudra mettre le api_user, le api_secret, le premier périphérique p1, le second périphérique p2 et le périphérique résultat pr. Il faut ensuite l’opérateur (moins, plus, div, multi ou egal)

?api_user=xxxxx&api_secret=xxxxxx&p1=100&p2=9469&pr=2520&operator=moins

Pour l’utiliser avec les règles eedomus, il faut créer un périphérique http de la manière suivante :

Je vous prépare pour bientôt un petit article sur l’utilisation de cette classe dans le cadre de ma bilanterie d’energie chaque jours grâce à mon modem téléinformation EDF.

N’hésitez pas à donner votre avis dans les commentaires, vos idées d’amélioration et vos cas d’utilisation…

0
0
Mickael

Je suis passionné de Domotique depuis des années. J'ai fait du développement en informatique industrielle pendant 12 ans, et un jour ... je me suis lancé !<br /> J'ai créé ma boutique de vente en ligne : https://www.planete-domotique.com

Laisser un commentaire