Aller c'est parti ! Voici les 3 scripts (tester sous linux, sur Pi et syno), et avec un seul module (j'attend d'en avoir d'autre pour gerer differements)
Voici comment cela marche :
Il faut crée :
Hardware virtuel : Heatzy

- hardware.PNG (35.85 Kio) Consulté 12652 fois
Un Switch Selector : Heatzy Pilote (ou le nom que vous voulez mais rappelez vous en car il y en a besoin après)
avec 3 niveau differents + le Off :

- selector.PNG (26.79 Kio) Consulté 12652 fois

- widget Heatzy domoticz..PNG (13.54 Kio) Consulté 12652 fois
Un switch On/Off : Get Heatzy Token qui ne servira qu''une fois pour forcer la mise a jour du token, et qui pourra être supprime une fois que tout roule

- Ici je lui mets un delai d'extinction a 90 secondes pour s'eteigne seul.
- get heatzy token.PNG (25.78 Kio) Consulté 12637 fois
Le Token :
L'API heatzy a besoin d'un token : une cle qui est donnée à la premiere connexion et qui est valide 7 jours.
Avec l'aide d'un contributeur de ce forum, j'ai fait en sorte qu'il soit automatiquement rafraîchit tous les 5 jours.
Il est stocker dans une variable utilisateur de type chaine qu'il vous faut créer a la main :

- variable utilisateur chaine.PNG (31.21 Kio) Consulté 12652 fois
Ensuite vous créez un événement LUA de type
time (depuis l'editeur LUA de Domoticz c'est nickel) et vous y placez ceci :
Code : Tout sélectionner
json = (loadfile "/home/nico/domoticz/scripts/lua/JSON.lua")() -- For Linux enlever les -- devant la ligne qui vous interesse et mettre -- devant la ligne a commenter
-- json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For raspberry enlever les -- devant la ligne qui vous interesse et mettre -- devant la ligne a commenter
-- json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows enlever les -- devant la ligne qui vous interesse et mettre -- devant la ligne a commenter
-- json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/json.lua")() -- For Syno enlever les -- devant la ligne qui vous interesse et mettre -- devant la ligne a commenter
---variable a editer
user = 'xxxxxxx' --adresse email pour s'enregistrer sur l'application conserver les ' '
password = 'xxxxxxxx' -- mot de passe utiliser pour l'application conserver les ' '
heatzyvariable = 'heatzytoken' --Nom de la variable utilisateur de type chaine qui stock le token conserver les ' '
--fin des variables a editer
function ChkToken()
local config=assert(io.popen('curl -X POST --header \'Content-Type: application/json\' --header \'Accept: application/json\' --header \'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3\' -d \'{ "username": "'..user..'", "password": "'..password..'", "lang": "en" }\' \'https://euapi.gizwits.com/app/login\''))
local blocjson = config:read('*all')
config:close()
--print (blocjson)
local jsonValeur = json:decode(blocjson)
token = jsonValeur.token
-- print('****************')
-- print(token)
commandArray['Variable:'..heatzyvariable..'']=''..token..''
end
commandArray = {}
time = os.date("*t")
-- rafraichissement du token tout les 5 jours
if ((((time.day-1) % 5)== 0) and (time.hour==00 and time.min ==1)) then ChkToken()
elseif otherdevices['Get Heatzy Token'] == 'On' then ChkToken()
end
return commandArray
C'est un script time qui s’exécute tous les 5 jours a 00:01 et qui rafraîchit le token, sauf si vous mettez le switch "Get Heatzy Token'" sur ON : dans ce cas il s’exécute toutes les minutes....ne soyez pas boulet activez le 2 minutes, regardez vos logs, vérifier que la variable a bien été mise a jour et placer le sur OFF, le garder sur ON ne fait rien de mieux, sature votre system et celui de heatzy
Si vous voulez voir ce qu'il ce passe enlevez les -- devant les lignes print, et vous serez inonder d'info dans vos logs Domoticz
Le
did
Grace a ce token nous allons chercher l'identifiant unique de votre Heatzy : c'est la parti "chiante" de l'histoire, car il faut le faire avec une ligne de commande en ssh
Code : Tout sélectionner
curl -X GET --header 'Accept: application/json' --header 'X-Gizwits-User-token: votretoken' --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' 'https://euapi.gizwits.com/app/bindings?limit=20&skip=0'
Ou il faut mettre a la place de
votretoken, la série de caractere presente dans la variable utilisateur : heatzytoken
une réponse de ce type vous est donnée :
Code : Tout sélectionner
{"did":"6oHvfZqaAasGG3wvWmFn","updated_at":1505489750,"attr":{"mode":"\u505c\u6b62"}}
C'est la serie entre les "" de did qui nous interesse, il s'agit du numero unique de votre module a vous, rien qu'a vous, (dans votre fenetre ssh vous pouvez le surligner, puis clique droit, ouvrer bloc note et clique droit coller, voila vous avez tout ce que vous avez surligné)
la parti did demande encore un peu de boulot de mon coté j'attend d'avoir un compte avec plusieurs modules pour essayer quelques chose de plus automatisé
Controler votre Heatzy
On a le Token, on a le did, nickel, je vous donne le script qui va bien ! c'est un evenement LUA de type
device
Code : Tout sélectionner
--script pilotant les modules fils pilote heatzy
--Variable a personnaliser
did = 'xxxxxxxxxx' -- entre les ' ''
--que tu recupere avec la commande : "curl -X GET --header 'Accept: application/json' --header 'X-Gizwits-User-token: quicetrouvedanstavariableutilisateurdomoticzheatzytoken' --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' 'https://euapi.gizwits.com/app/bindings?limit=20&skip=0'
selectorheatzy = 'Heatzy Pilote' --ici le nom de ton selector entre les ' '
vartoken = 'heatzytoken' -- ici le nom de ta variable utilisateur de type chaine que tu as créer pour recevoir le token entre les ' '
--Fin des variable a personnaliser
token = tostring(uservariables[vartoken])
Confort = '[1,1,0]'
Eco = '[1,1,1]'
Hors_Gel = '[1,1,2]'
Off = '[1,1,3]'
---
commandArray = {}
--Off
if devicechanged[selectorheatzy] == 'Off' then
runcommand = "curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'X-Gizwits-User-token: "..token.."' --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' -d '{\"raw\": "..Off.."} ' 'https://euapi.gizwits.com/app/control/"..did.."'";
os.execute(runcommand);
--print(runcommand)
--Confort
elseif devicechanged[selectorheatzy] == 'Confort' then
--print(..token..)
runcommand = "curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'X-Gizwits-User-token: "..token.."' --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' -d '{\"raw\": "..Confort.."} ' 'https://euapi.gizwits.com/app/control/"..did.."'";
os.execute(runcommand);
--print(runcommand)
--Eco
elseif devicechanged[selectorheatzy] == 'Eco' then
--print(..token..)
runcommand = "curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'X-Gizwits-User-token: "..token.."' --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' -d '{\"raw\": "..Eco.."} ' 'https://euapi.gizwits.com/app/control/"..did.."'";
os.execute(runcommand);
--print(runcommand)
--Horsgel
elseif devicechanged[selectorheatzy] == 'Hors Gel' then
--print(..token..)
runcommand = "curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'X-Gizwits-User-token: "..token.."' --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' -d '{\"raw\": "..Hors_Gel.."} ' 'https://euapi.gizwits.com/app/control/"..did.."'";
os.execute(runcommand);
--print(runcommand)
end
return commandArray
voila tout ce qui demande votre attention sont les 3 premieres lignes :
- did : la valeurs qu'on a trouvé avec la ligne de commande (on garde bien les
' ' )
- selectorheatzy = le nom du selecteur qu'on a crée (on garde bien les
' ' )
- vartoken = 'heatzytoken' -- ici le nom de ta variable utilisateur de type chaine que tu as créer pour recevoir le token (on garde bien les
' ' )'
Si vous voulez voir ce qu'il ce passe enlevez les -- devant les lignes print, et vous serez inonder d'info dans vos logs Domoticz
Oui mais si je change l’état du module depuis l'application ? Refresh Widget
J'y ai penser, et je vous propose un script
time, qui s’exécute toutes les minutes et va demander a Heatzy dans quel mode est votre module:
Code : Tout sélectionner
json = (loadfile "/home/nico/domoticz/scripts/lua/JSON.lua")() -- For Linux enlever les -- devant la ligne qui vous interesse et mettre -- devant la ligne a commenter
-- json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For raspberry enlever les -- devant la ligne qui vous interesse et mettre -- devant la ligne a commenter
-- json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows enlever les -- devant la ligne qui vous interesse et mettre -- devant la ligne a commenter
-- json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/json.lua")() -- For Syno enlever les -- devant la ligne qui vous interesse et mettre -- devant la ligne a commenter
--variable a configurer
did = '6oHvfZqaAaswvP7WmFn' --did que l'on a trouver avec la ligne de commande un peu chiante on garde les ''
selectorheatzy = 'Heatzy Pilote' --nom de votre inter selecteur qui pilote le heatzy on garde les ''
--fin des variable a configurere
--ligne de commande qui interoge les serveur heatzy pour le retour d'etat
local config=assert(io.popen('curl -X GET --header \'Accept: application/json\' --header \'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3\' \'https://euapi.gizwits.com/app/devdata/'..did..'/latest\''))
--parsing du json
local blocjson = config:read('*all')
config:close()
--print (blocjson)
local jsonValeur = json:decode(blocjson)
mode = jsonValeur.attr.mode
--print('****************')
--print(mode)
commandArray = {}
--print('****************')
if mode == '停止' and otherdevices[selectorheatzy]~='Off' then --stop en chinois
--print("mode = stop")
commandArray[selectorheatzy]='Set Level: 0'
elseif mode =='舒适' and otherdevices[selectorheatzy]~='Confort' then --confortable en chinois
commandArray[selectorheatzy]='Set Level: 10'
--print("mode = confortable")
elseif mode =='经济' and otherdevices[selectorheatzy]~='Eco' then --eco en chinois
commandArray[selectorheatzy]='Set Level: 20'
--print("mode = eco")
elseif mode =='解冻' and otherdevices[selectorheatzy]~='Hors Gel' then --decongelation en chinois
commandArray[selectorheatzy]='Set Level: 30'
--print("mode = horsgel")
end
return commandArray
Edit 18/09/2017: Mise a jour du script qui rafraichit le widget : celui ci dessus ^^^^
- Ajout des commande pour les personne sur synology : enelever les -- et en mettre en fonction de votre config
- Veuillez mettre le nom de votre interrupteur selecteur qui pilote le heatzy
Si vous voulez voir ce qu'il ce passe enlevez les -- devant les lignes print, et vous serez inonder d'info dans vos logs Domoticz
Et Voila Voila !
J'espere que vous vous en sortirez avec cela. n'hesitez pas