En tant que possesseur d’un module Heatzy, vous vous êtes certainement poser la question de comment programmer via l’API.
Il existe un plugin Jeedom mais celui-ci n’est plus mis à jour depuis quelques mois. De plus, vous avez certainement eu (comme moi) des problèmes pour remonter correctement les états.
Ce tuto peut être utile à tous les possesseurs de module Heatzy pilote (voir la présentation ici) ou Heatzy Flam.
Je vais vous montrer ici comment, via des scénarios, récupérer l’état de vos modules et les piloter sur Jeedom.
Sommaire
1/ Prérequis
Vous devez disposer, avant, d’un compte sur Heatzy que vous avez créé via l’application Android ou iOs.
Il faut ensuite appairer tous vos modules sur l’application.
2/ Scénario d’identification
Pour commencer, il faut créer un nouveau scénario dans Jeedom, puis reprendre le code ci-dessous :
$json = system("curl -X POST --header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' --header 'content-type:application/json' -d '{ \"username\":\"IDENTIFIANT\" ,\"password\":\"MOTDEPASSE\",\"lang\":\"en\"}' 'https://euapi.gizwits.com/app/login' ");
$json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json);
if (!empty($json))
{
$findme = 'expire_at';
$pos = strpos($json, $findme);
// Notez notre utilisation de ===. == ne fonctionnerait pas comme attendu
// car la position de 'a' est la 0-ième (premier) caractère.
if ($pos === false) {
$scenario->setLog('Erreur de retour de la fonction CURL, la fonction renvoi : ' .$json);
}
else
{
$obj = json_decode($json, TRUE);
if (json_last_error() === JSON_ERROR_NONE) {
$token = $obj['token'];
$scenario->setLog('Token : ' . $token);
$scenario->setData('token', $token); //pour récupérer dans variable
$uid = $obj['uid'];
$scenario->setLog('uid : ' . $uid );
$scenario->setData('uid', $uid); //pour récupérer dans variable
$expireAt = $obj['expire_at'];
$scenario->setLog('expire_at : ' . $expireAt );
$scenario->setData('expireAt', $expireAt); //pour récupérer dans variable
} else {
$scenario->setLog('Erreur json est : ' . $json_errors[json_last_error()]);
}
}
}
Copiez-coller le code tel quel et modifier simplement :
- ligne 1 : IDENTIFIANT par votre adresse email
- ligne 2 : MOT DE PASSE par votre mot de passe
Explications : ce script va se connecter au serveur de Heatzy pour vous authentifier et récupérer le jeton d’authentification (token). Ce jeton sera placé dans une variable appelé token qui pourra être utilisé plus tard. On va aussi récupérer la date d’expiration du token.
Pour le déclencher, il faut, à minima, le lancer une fois par jour. Je l’ai par exemple programmé tous les jours à 23h45 via cette commande :
45 23 * * *
Pour la suite, vous aurez besoin du token, récupérez-le dans les logs de votre scénario.
3/ Récupération des identifiants des modules
Vous allez avoir besoin d’un logiciel pour interroger l’API Heatzy. J’utilise personnellement Postman.
Vous devez créer un nouvel espace (Workspace) pour pouvoir démarrer votre projet.
Créer maintenant une nouvelle requête
Entrer ensuite les paramètres :
GET puis url : https://euapi.gizwits.com/app/bindings?limit=20&skip=0
Dans l’onglet Header :
- KEY : X-Gizwits-Application-Id puis VALUE : c70a66ff039d41b4a220e198b0fcc8b3
- KEY : X-Gizwits-User-token puis VALUE : VOTRETOKEN (celui récupéré précédemment)
Dans l’onglet Body :
{
"username": "IDENTIFIANT",
"password": "MOTDEPASSE"
}
Cliquez maintenant sur le bouton SEND pour avoir le résultat.
Mettez les résultats en JSON (1er encadré rouge) pour une meilleure lisibilité.
Vous devez récupérer la valeur de la clé did.
La valeur dev_alias vous donne le nom du module, celui que vous avez entré dans l’application.
Faites cette opération pour tous vos modules.
4/ Pilotage des modules
Pour passer au pilotage des modules, on va devoir créer un nouveau scénario.
Pour un meilleur confort, j’ai créé un scénario par ordre et par module. A savoir : un scénario pour le module jeux, pour l’ordre confort, un autre pour l’ordre économie, …
Dans ce nouveau scénario, copiez le code suivant :
//mode 1 : eco
//mode 2 : hors gel
//mode 3 : off
//mode 0 : confort
$token = $scenario->getData('token');
$json = system("curl -X POST 'https://euapi.gizwits.com/app/control/VALEURDID' \
--header 'X-Gizwits-Application-Id: c70a66ff039d41b4a220e198b0fcc8b3' \
--header 'X-Gizwits-User-token: $token' \
--header 'Content-Type: text/plain' \
--data-raw '{\"attrs\": {
\"mode\":2
}
}'
");
Vous devez modifier ici 2 choses :
- la valeur DID avec celui de votre module
- le mode pour donner l’ordre à envoyer à votre module. Les différents modes sont identifiés dans la partie haute du code ci-dessus.
Dans mon exemple, je donne l’ordre au module de passe en hors gel (mode 2).
Vous pouvez maintenant utiliser vos modules Heatzy directement depuis votre Jeedom si le plugin ne fonctionne pas chez vous.
Retrouver la présentation du module Heatzy pilote sur le site officiel.
A bientôt, l’équipe DomoGo.
Sources :