Python Z-way -- Authentification / Export de données
Posted on Fri 27 November 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