Heatzy - reconnu par Domoticz ?

Forum pour tous les autres objets : sondes météo, capteurs, actionneurs ...
Vous avez un besoin mais vous ne savez pas quel matériel choisir ? C'est ici.
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Heatzy - reconnu par Domoticz ?

Message par deennoo »

obewan82 a écrit :Bonsoir,

Moi aussi carrément.

J'ai installaé DOMOTICZ sur mon syno cette semaine et installé mon Heatzy ce soir.

Je ne pouvais rêver mieux.

Je veux bien être testeur ... :D :D :D :D
j'ai déja une solution en lua qui fonctionne, mais il va falloir faire deux ligne de commande en ssh afin d'avoir les infos necessaire (le token la premiere fois et le device id de ton module) une fois dans les scripts c'est full auto.

laisse moi le temps de tester 2/3 truc sur mon syno et je vous fais un tuto pour le LUA
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Heatzy - reconnu par Domoticz ?

Message par deennoo »

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
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
selector.PNG (26.79 Kio) Consulté 12652 fois
widget Heatzy domoticz..PNG
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.
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
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
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
Seidel

Re: Heatzy - reconnu par Domoticz ?

Message par Seidel »

Wahou ça a l'air d'être nikel !

Je test ça dès que j'aurais reçu mon nouveau module, car ayant celui de première génération, celui-ci a littéralement grillé !

Je vous retiens au courant dès que je le reçois !

En tout cas beau boulot, vraiment !!

edit: J'ai reçu le nouveau module justement aujourd'hui, étant au taf et absent ce soir, j'essaie ça dès demain à la première heure !
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: RE: Re: Heatzy - reconnu par Domoticz ?

Message par deennoo »

Prend ton temps, il faut maîtrise plusieurs éléments de Domoticz pour que cela fonctionne bien.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
Seidel

Re: Heatzy - reconnu par Domoticz ?

Message par Seidel »

Oh je maîtrise Domoticz depuis déjà pas mal de temps, d’ailleurs après ceci, je compte bien l’intégrer avec IFTTT et mon Google Home.
Et puis baisser et monter le chauffage suivant la température de mon appart!
Il me manquait juste ta fonction que je vais mettre en place dès demain !
Seidel

Re: Heatzy - reconnu par Domoticz ?

Message par Seidel »

Bon bah nikel j'ai réussi parfaitement l'intégration sur Domoticz, donc IFTTT et Google Home !

Juste, sur ton dernier script, ça affiche des caractères chinois, c'est normal ?

Sinon bon boulot, vraiment !

EDIT: Bon j'ai rien dit, j'avais pas lu les commentaires, et ça fonctionne du feu de Dieu !
Parfait !
obewan82
Messages : 4
Inscription : 15 sept. 2017, 19:03

Re: Heatzy - reconnu par Domoticz ?

Message par obewan82 »

Alors tout d'abord merci.

Alors pour l'instant j'ai un blocage sur le retour de l'état pour l'interrupteur dans domoticz.

Le switch reste en off alors que sur l'aplli android je vois bien que mon heatzy est en confort ??

Je cherche un peu et je reviens vers vous.

Mais en ce qui concerne les scripts, ils sont assez claire et commentés comme un bon programmeur.

Merci
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Heatzy - reconnu par Domoticz ?

Message par deennoo »

Seidel a écrit :Bon bah nikel j'ai réussi parfaitement l'intégration sur Domoticz, donc IFTTT et Google Home !

Juste, sur ton dernier script, ça affiche des caractères chinois, c'est normal ?

Sinon bon boulot, vraiment !

EDIT: Bon j'ai rien dit, j'avais pas lu les commentaires, et ça fonctionne du feu de Dieu !
Parfait !
les caracteres en chinois : oui normal c'est le retour de l'api, j'ai mis la traduction dans le script.

tu peux placer les -- devant les print pour ne pas voir les retour dans les logs
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Heatzy - reconnu par Domoticz ?

Message par deennoo »

obewan82 a écrit :Alors tout d'abord merci.

Alors pour l'instant j'ai un blocage sur le retour de l'état pour l'interrupteur dans domoticz.

Le switch reste en off alors que sur l'aplli android je vois bien que mon heatzy est en confort ??

Je cherche un peu et je reviens vers vous.

Mais en ce qui concerne les scripts, ils sont assez claire et commentés comme un bon programmeur.

Merci
Comment as tu appellers ton inter selecteur pour ton heatzy ? ??

Ok ma faute :
- je n'avais pas mis la ligne concernant l'emplecement de JSON.lua pour syno dans ce script, c'est corriger
- j'ai egalement simplfiei un truc, il faut maintenant mettre le nom de ton inter dans les variable a éditer.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
obewan82
Messages : 4
Inscription : 15 sept. 2017, 19:03

Re: Heatzy - reconnu par Domoticz ?

Message par obewan82 »

salut
merci pour ta reponse.

je regarde ça quand j'ai un peut de temps.

effectivement j'ai nommé différemment mon inter mais j'ai vu que tu fais appel à l'inter dans ton cofe et j'avais changé en conséquence.

je te tiens au courant
Répondre