Python Z-way -- Authentification / Export de données

Posted on ven. 27 novembre 2015 in Domotique, python

Mon but actuellement de générer un script afin d'interroger le serveur Zway, et d'y exporter les données de mes capteurs.
Cela n'a pas été très simple, je l'avoue.


Authentification

Dans un premier temps, j'ai réussi à m'authentifier via curl.

$ curl --insecure -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"form": true, "login": "XXXXXX", "password": "XXXXXX", "keepme": false, "default_ui": 1}' 'http://127.0.0.1:8083/ZAutomation/api/v1/login' -c cookie.txt

Cette méthode m'a permis de comprendre le fonctionnement de la requête et les paramètres et entetes attendus.

Voici mon premier script python, me permettant de s'authentifier sur le serveur z-way.

$ vi zway-auth.py


#!/usr/bin/python

import json
import requests

## Create session
s = requests.Session()

## Login
data = {'form':'true',
        'login':'admin',
        'password':'admin',
        'keepme':'false',
        'default_ui':'1'
        }

headers = {'Content-Type':'application/json',
           'Accept':'application/json'
                }

## Authentification
json_response = s.post('http://127.0.0.1:8083/ZAutomation/api/v1/login',data=json.dumps(data),headers=headers).text
$ ./zway-auth.py

{"data":{"sid":"0d2dc52c-b386-3f6a-78b7-4313aa08823b","id":1,"role":1,"name":"Administrator","lang":"en","color":"#dddddd","dashboard":["ZWayVDev_zway_2-0-49-1","ZWayVDev_zway_2-0-49-3","ZWayVDev_zway_2-0-48-1","ZWayVDev_zway_2-0-49-5"],"interval":2000,"rooms":[0],"hide_all_device_events":false,"hide_system_events":false,"hide_single_device_events":[],"expert_view":true},"code":200,"message":"200 OK","error":null}


Récupération des données

$ vi zway-export-data.py


#!/usr/bin/python

import json
import requests

## Methode par curl
##  curl --insecure -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"form": true, "login": "XXXXXX", "password": "XXXXXX", "keepme": false, "default_ui": 1}' 'http://127.0.0.1:8083/ZAutomation/api/v1/login' -c cookie.txt


## Create session
s = requests.Session()

## Login
data = {'form':'true',
        'login':'admin',
        'password':'admin',
        'keepme':'false',
        'default_ui':'1'
        }

headers = {'Content-Type':'application/json',
           'Accept':'application/json'
                }

## Authentification
json_response = s.post('http://127.0.0.1:8083/ZAutomation/api/v1/login',data=json.dumps(data),headers=headers).text


## {"data":{"sid":"0d2dc52c-b386-3f6a-78b7-4313aa08823b","id":1,"role":1,"name":"Administrator","lang":"en","color":"#dddddd","dashboard":["ZWayVDev_zway_2-0-49-1","ZWayVDev_zway_2-0-49-3","ZWayVDev_zway_2-0-48-1","ZWayVDev_zway_2-0-49-5"],"interval":2000,"rooms":[0],"hide_all_device_events":false,"hide_system_events":false,"hide_single_device_events":[],"expert_view":true},"code":200,"message":"200 OK","error":null}
#print json.loads(json_response)['data']['dashboard']

## Recuperation de la temperature
print s.post('http://127.0.0.1:8083/ZWaveAPI/Run/devices[2].SensorMultilevel.data[1].val.value',data=json.dumps(data),headers=headers).text

## Recuperation du detecteur de mouvement
print s.post('http://127.0.0.1:8083/ZWaveAPI/Run/devices[2].SensorMultilevel.data[3].val.value',data=json.dumps(data),headers=headers).text

## Recuperation de l humidite
print s.post('http://127.0.0.1:8083/ZWaveAPI/Run/devices[2].SensorMultilevel.data[5].val.value',data=json.dumps(data),headers=headers).text
$ ./zway-export-data.py

24.8
0
43