Analyse de la donnée. Partie 2 : Tests basiques de l’API Jeedom

 

Cet article est le deuxième concernant l’analyse de donnée. Les précédents articles sont disponibles ici :

Même si vous y voyez peu de différence, l’article a entièrement été écrit dans un notebook jupyter. Il a été ensuite transféré vers ce blog sous WordPress. Les zones nommées In [ ] correspondent donc au code Python qui a été exécuté. La sortie de ce code apparaît juste en dessous.

C’est le moment de faire le lien avec la domotique : c’est cette dernière qui va nous ramener la matière de base, de la donnée à traiter. Cette donnée sera en l’occurence fournie pour un contrôleur domotique Jeedom.

Dans ce premier article nous allons donc tester également l’API de Jeedom qui permet de réaliser de multiples actions depuis un programme extérieur au système.

Les essais sont décomposés en deux étapes :

  • Deux tests basiques et très rapides de Jupyter & Python
  • Des tests basiques de l’API Jeedom

Tests basiques Jupyter & Python

Essai basique : récupérer les infos de python

Premier pas Jupyter+python : affichons la version de python que nous allons utiliser.

In [4]:
import sys
print("Python version")
print (sys.version)
print("Version info.")
print (sys.version_info)
Python version
3.5.2 (default, Oct  8 2019, 13:06:37) 
[GCC 5.4.0 20160609]
Version info.
sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)

Afficher un graphique

Affichage d’un graphique très simple avec des données time et position générées localement.

In [5]:
%matplotlib inline
import matplotlib.pyplot as plt
time = [0, 1, 2, 3]
position = [0, 50, 200, 300]

plt.plot(time, position)
plt.xlabel('Time (hr)')
plt.ylabel('Position (km)')
Out[5]:
Text(0, 0.5, 'Position (km)')

Tests basiques de l’API Jeedom

J’avais au préalable réalisé quelques tests d’appels à l’API Jeedom avec l’outil Postman. Il s’agit de transformer ces essais en petits programmes python pour tester l’extractions des données dont on aura besoin par la suite.

Paramètres Jeedom

Il s’agit des paramètres nécessaires pour accéder à l’API Jeedom : l’URL et la clé API. Cette dernière peut être récupérée dans l’interface de contrôle de Jeedom. Je vais me permettre pour cette partie de cacher mes données personnelles !

In [6]:
adresse_API = 'http://adresse.ip.jeedom/core/api/jeeApi.php'                                                     
Api_key = 'code API'

Récupérer la valeur courante d’un périphérique

Le plus simple : récupérer la valeur courante de quelques périphériques Jeedom.

In [115]:
import urllib.request                                                                   
import json 

def Jeedom_execCmd(id):                                                          
  parameters = {                                                                
          "jsonrpc" : "2.0",                                                    
          "method" : "cmd::execCmd",                                                                                                           
          "params": {                                                           
              "id" : id,
              "apikey": Api_key                                                 
              }                                                                 
          }                                                                                              
  params = json.dumps(parameters).encode('utf8')                                                                                                                    
  req = urllib.request.Request(adresse_API, data=params, headers={'Content-Type': 'application/json'})        
                                                                                
  response = urllib.request.urlopen(req)                                               
  print(response.read().decode('utf8'))                                                         
                                                                                
                                                                                
Jeedom_execCmd(214)  
Jeedom_execCmd(1801)
Jeedom_execCmd(2626) 
{"jsonrpc":"2.0","id":99999,"result":{"value":"Maison","collectDate":"2020-02-09 12:20:42"}}
{"jsonrpc":"2.0","id":99999,"result":{"value":20.7,"collectDate":"2020-02-09 17:26:50"}}
{"jsonrpc":"2.0","id":99999,"result":{"value":1,"collectDate":"2020-02-09 17:25:04"}}

Récupérer la valeur à une certaine date

Un peu plus compliqué : récupérer la valeur d’un périphérique à une certaine date / heure.

In [121]:
import urllib.request                                                                   
import json 

def Jeedom_getoldvalue(id, start,stop):                                                          
  parameters = {                                                                
          "jsonrpc" : "2.0",                                                    
          "method" : "cmd::getStatistique",                                                                                                           
          "params": {                                                           
              "id" : id,
              "apikey": Api_key,
              "startTime": start, 
              "endTime": stop
              }                                                                 
          }                                                                                              
  params = json.dumps(parameters).encode('utf8')                                                                                                                    
  req = urllib.request.Request(adresse_API, data=params, headers={'Content-Type': 'application/json'})        
                                                                                
  response = urllib.request.urlopen(req)                                               
  return response.read().decode('utf8')                                                         
                                                                                
                                                                                
oldvalue_phase=Jeedom_getoldvalue(2626,"2020-02-07 00:00:00","2020-02-08 00:00:00")
print(oldvalue_phase)
{"jsonrpc":"2.0","id":99999,"result":{"avg":"3.500000","min":"1.50","max":"5.50","sum":"14.00","count":"4","std":"1.4142135623730951","variance":"2","last":"3.500000"}}

Récupérer la dernière valeur dans la réponse au format json

La réponse à nos requètes est au format json. Récupérons la valeur numérique qui nous intéresse dans cette réponse.

In [125]:
datas = json.loads(oldvalue_phase)
datas2 = datas['result']['last']
print(datas2)
3.500000

Vincent Recipon

Propriétaire de ce blog. Owner of this blog.

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.