Parser une requete Json domoticz dans un script python
Publié : 14 juin 2019, 20:50
Bonjour a tous
nouveau sur le forum, donc tout d'abord merci à tous pour vos contributions qui m'ont bien aidées jusqu'à présent.
Je fais tourner domoticz sur un raspberry pi et j'ai développé un petit script en python pour piloter une régulation en vitesse de mon ventilateur de refroidissement cpu (pour la beauté du geste bien sur, le brancher sur le +5V était trop simple.)
je pilote la vitesse via un petit module mosfet que j'alimente par un signal pwm depuis un gpio du pi.
pou ceux que ça intéresse je peux vous expliquer ce que j'ai fait.
mon script python régule ce signal pwm envoyé sur le gpio du PI selon l'écart de temperature entre la temperature du cpu et une consigne que je choisis.
Le lien avec domoticz :
j'envoie déjà sur un dummy device "vitesse ventilateur" la consigne de vitesse du ventilateur (en % de 0 à 100). J'utilise une requete JSON pour cela qui met a jour domoticz depuis mon script python.
Dans l'autre sens, je cherche maintenant à utiliser un device "thermostat" que j'ai créé dans domoticz qui fixerait ma valeur de consigne (je lirait la valeur réglée sur ce dispositif dans mon script python pour définir la consigne a atteindre).
ma difficulté est que je ne parviens pas à récupérer ("parser le json" pour les experts) la valeur de ce dispositif dans une variable exploitable dans mon script python.
voici a quoi ressemble le résultat de ma requete JSON sur ce dispositif thermostat :
{
"ActTime" : 1560537310,
"AstrTwilightEnd" : "01:20",
"AstrTwilightStart" : "03:05",
"CivTwilightEnd" : "22:52",
"CivTwilightStart" : "05:33",
"DayLength" : "15:58",
"NautTwilightEnd" : "23:49",
"NautTwilightStart" : "04:36",
"ServerTime" : "2019-06-14 20:35:10",
"SunAtSouth" : "14:13",
"Sunrise" : "06:13",
"Sunset" : "22:12",
"app_version" : "4.10717",
"result" : [
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CustomImage" : 0,
"Data" : "40.0",
"Description" : "",
"Favorite" : 1,
"HardwareID" : 9,
"HardwareName" : "VENTILATEUR RPI",
"HardwareType" : "Dummy (Does nothing, use for virtual switches only)",
"HardwareTypeVal" : 15,
"HaveTimeout" : false,
"ID" : "0014078",
"LastUpdate" : "2019-06-14 20:16:41",
"Name" : "Consigne régul temp RPI",
"Notifications" : "false",
"PlanID" : "0",
"PlanIDs" : [ 0 ],
"Protected" : true,
"SetPoint" : "40.0",
"ShowNotifications" : true,
"SignalLevel" : "-",
"SubType" : "SetPoint",
"Timers" : "false",
"Type" : "Thermostat",
"TypeImg" : "override_mini",
"Unit" : 1,
"Used" : 1,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "40"
}
],
"status" : "OK",
"title" : "Devices"
}
Je veux récupérer dans une variable la valeur du champ "Data" ou celle du champ "Setpoint" qui valent ici "40.0"
mes essais de scripts :
ce script affiche le champ "status" à "OK", ça marche
ce script ne fonctionne pas pour récupérer ma variable.
Code erreur:
Traceback (most recent call last):
File "3.test.py", line 8, in <module>
Status=str(RawData['Data'])
KeyError: 'Data'
------------------
(program exited with code: 1)
Press return to continue
quelqu'un peut-il m'aider a corriger mon script ?
Merci
nouveau sur le forum, donc tout d'abord merci à tous pour vos contributions qui m'ont bien aidées jusqu'à présent.
Je fais tourner domoticz sur un raspberry pi et j'ai développé un petit script en python pour piloter une régulation en vitesse de mon ventilateur de refroidissement cpu (pour la beauté du geste bien sur, le brancher sur le +5V était trop simple.)
je pilote la vitesse via un petit module mosfet que j'alimente par un signal pwm depuis un gpio du pi.
pou ceux que ça intéresse je peux vous expliquer ce que j'ai fait.
mon script python régule ce signal pwm envoyé sur le gpio du PI selon l'écart de temperature entre la temperature du cpu et une consigne que je choisis.
Le lien avec domoticz :
j'envoie déjà sur un dummy device "vitesse ventilateur" la consigne de vitesse du ventilateur (en % de 0 à 100). J'utilise une requete JSON pour cela qui met a jour domoticz depuis mon script python.
Dans l'autre sens, je cherche maintenant à utiliser un device "thermostat" que j'ai créé dans domoticz qui fixerait ma valeur de consigne (je lirait la valeur réglée sur ce dispositif dans mon script python pour définir la consigne a atteindre).
ma difficulté est que je ne parviens pas à récupérer ("parser le json" pour les experts) la valeur de ce dispositif dans une variable exploitable dans mon script python.
voici a quoi ressemble le résultat de ma requete JSON sur ce dispositif thermostat :
{
"ActTime" : 1560537310,
"AstrTwilightEnd" : "01:20",
"AstrTwilightStart" : "03:05",
"CivTwilightEnd" : "22:52",
"CivTwilightStart" : "05:33",
"DayLength" : "15:58",
"NautTwilightEnd" : "23:49",
"NautTwilightStart" : "04:36",
"ServerTime" : "2019-06-14 20:35:10",
"SunAtSouth" : "14:13",
"Sunrise" : "06:13",
"Sunset" : "22:12",
"app_version" : "4.10717",
"result" : [
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CustomImage" : 0,
"Data" : "40.0",
"Description" : "",
"Favorite" : 1,
"HardwareID" : 9,
"HardwareName" : "VENTILATEUR RPI",
"HardwareType" : "Dummy (Does nothing, use for virtual switches only)",
"HardwareTypeVal" : 15,
"HaveTimeout" : false,
"ID" : "0014078",
"LastUpdate" : "2019-06-14 20:16:41",
"Name" : "Consigne régul temp RPI",
"Notifications" : "false",
"PlanID" : "0",
"PlanIDs" : [ 0 ],
"Protected" : true,
"SetPoint" : "40.0",
"ShowNotifications" : true,
"SignalLevel" : "-",
"SubType" : "SetPoint",
"Timers" : "false",
"Type" : "Thermostat",
"TypeImg" : "override_mini",
"Unit" : 1,
"Used" : 1,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "40"
}
],
"status" : "OK",
"title" : "Devices"
}
Je veux récupérer dans une variable la valeur du champ "Data" ou celle du champ "Setpoint" qui valent ici "40.0"
mes essais de scripts :
Code : Tout sélectionner
import urllib2, json
Requete='http://192.168.1.29:8080/json.htm?type=devices&rid=40'
RawData=json.loads(urllib2.urlopen(Requete).read())
Status=str(RawData['status'])
print StatusCode : Tout sélectionner
import urllib2, json
Requete='http://192.168.1.29:8080/json.htm?type=devices&rid=40'
RawData=json.loads(urllib2.urlopen(Requete).read())
Status=str(RawData['Data'])
print StatusCode erreur:
Traceback (most recent call last):
File "3.test.py", line 8, in <module>
Status=str(RawData['Data'])
KeyError: 'Data'
------------------
(program exited with code: 1)
Press return to continue
quelqu'un peut-il m'aider a corriger mon script ?
Merci