Voilà le Plugin et script pour le module Heatzy Pilote V2.
Basé sur la version intiale (V1) par Havok, modifié en version 2 par gule2004.
Publié dans le store par dommarion.
Merci à tous !
dommarion
Le device:
Les valeurs:
Le fichier Plugin version 2 (eedomus_plugin.json)
- Code : Tout sélectionner
{
"plugin_id": "heatzypilv2",
"name_fr": "Heatzy Pilote V2",
"icon": "heatzyv2.png",
"version": "2.0",
"creation_date": "2017-11-03",
"modification_date": "2020-11-10",
"author": "<a href='http://www.aussitot.net/' target='_blank'>@havok - gule2004 - dommarion</a>",
"description_fr": "Gestion des modules de contrôle des radiateurs électriques <a href='https://heatzy.com/pilote/' target='_blank'>Heatzy Pilote</a>",
"description_en": "Management of control modules for electric heaters <a href='https://heatzy.com/pilote/' target='_blank'>Heatzy Pilote</a>",
"description_es": "Gestión de módulos de control para calefactores eléctricos <a href='https://heatzy.com/pilote/' target='_blank'>Heatzy Pilote</a>",
"description_it": "Gestione dei moduli di controllo per resistenze elettriche <a href='https://heatzy.com/pilote/' target='_blank'>Heatzy Pilote</a>",
"description_de": "Verwaltung von Steuermodulen für elektrische Heizungen <a href='https://heatzy.com/pilote/' target='_blank'>Heatzy Pilote</a>",
"forum_link": "https://forum.eedomus.com/viewtopic.php?f=50&t=10575",
"parameters":
[
{
"parameter": "heatzy_login",
"description": "Identifiant de votre compte Heatzy",
"xtype": "textfield",
"default_value": "",
"field": "width:250, allowBlank:false"
},
{
"parameter": "heatzy_password",
"description": "Password de votre compte Heatzy",
"xtype": "textfield",
"default_value": "",
"field": "width:250, allowBlank:false"
},
{
"parameter": "module_name",
"description": "Nom de votre module Heatzy Pilote",
"xtype": "textfield",
"default_value": "",
"field": "width:250, allowBlank:false"
}
],
"scripts":
[
{
"name": "heatzyV2.php"
}
],
"devices":
[
{
"device_id": "heatzypilote",
"module_id": "41",
"type": "http",
"name": "plugin.name",
"icon": "heatzyv2.png",
"value_type": "list",
"utilisation_id": "43",
"parameters":
{
"VAR1": "plugin.parameters.heatzy_login",
"VAR2": "plugin.parameters.heatzy_password",
"VAR3": "plugin.parameters.module_name",
"value_type": "list",
"ignore_errors": 3,
"RAW_URL": "http://localhost/script/?exec=heatzyV2.php&user=[VAR1]&pass=[VAR2]&device=[VAR3]&mode=get&ordre=99",
"RAW_XPATH": "/root/status/value",
"POLLING": "10"
},
"values":
[
{ "value": "cft", "http_url": "http://localhost/script/?exec=heatzyV2.php&user=[VAR1]&pass=[VAR2]&device=[VAR3]&mode=set", "http_type": "GET", "http_params": "&ordre=cft", "description": "Confort", "icon": "heatzy_cft.png" },
{ "value": "eco", "http_url": "http://localhost/script/?exec=heatzyV2.php&user=[VAR1]&pass=[VAR2]&device=[VAR3]&mode=set", "http_type": "GET", "http_params": "&ordre=eco", "description": "Economique", "icon": "heatzy_eco.png" },
{ "value": "fro", "http_url": "http://localhost/script/?exec=heatzyV2.php&user=[VAR1]&pass=[VAR2]&device=[VAR3]&mode=set", "http_type": "GET", "http_params": "&ordre=fro", "description": "Hors-Gel", "icon": "heatzy_fro.png" },
{ "value": "stop", "http_url": "http://localhost/script/?exec=heatzyV2.php&user=[VAR1]&pass=[VAR2]&device=[VAR3]&mode=set", "http_type": "GET", "http_params": "&ordre=stop", "description": "Off", "icon": "heatzy_off.png" },
{ "value": "99", "http_url": "http://localhost/script/?exec=heatzyV2.php&user=[VAR1]&pass=[VAR2]&device=[VAR3]&mode=set", "http_type": "GET", "http_params": "", "description": "Erreur", "icon": "heatzy_err.png","hidden": 1}
]
}
]
}
Le Script Heatzy Version 2 (heatzyV2.php)
- Code : Tout sélectionner
<?php
/* script cree par twitter:@Havok pour la eedomus en Heatzy Pilote V1
script modifié par gule2004 pour passer en Heatzy Pilote V2
script publié par dommarion pour Heatzy Pilote V2
------------------- Parametres :
user = login du compte heatzy_username
pass = password du compte heatzy_username
device = nom du module heatzy
mode = set - Modification de l'etat de l'appareil
ordre = cft: confort/ eco: economique/ fro: hors-gel/ stop: off
*/
//--- Paramètres Script
$heatzy_application_id = "c70a66ff039d41b4a220e198b0fcc8b3";
//-------------- Parametres
$mode = getArg('mode');
$ordre = getArg('ordre');
$heatzy_username = getArg('user');
$heatzy_password = getArg('pass');
$heatzy_devicename = getArg('device');
//************* Récupération du token, validité 7 jours
// POST /app/login (User login)
function sdk_heatzy_login($login, $password, $appid) {
$postfields = '{"username":"'.$login.'","password":"'.$password.'","lang":"en"}';
$return = httpQuery('https://euapi.gizwits.com/app/login','POST',$postfields,NULL,array("Content-Type: application/json","Accept: application/json","X-Gizwits-Application-Id: ".$appid));
$obj = sdk_json_decode($return);
//print_r($obj);
saveVariable('tokenheatzy',$obj['token']);
saveVariable('tokenexpireat',$obj['expire_at']);
return $obj['token'];
}
function sdk_clean_variable_name($name)
{
$name = strtolower($name);
$name = trim($name);
$name = str_replace(' ', '_', $name);
$name = strtr($name,'àáâãäçèéêëìíîïñòóôõöùúûüýÿ','aaaaaceeeeiiiinooooouuuuyy');
return $name;
}
//************* Récupération id (identifiant de l'appareil (validité permanente)) en fonction du nom de l'appareil
// GET /app/bindings
function sdk_heatzy_getdidbyname($token, $appid, $devicename) {
$return = httpQuery('https://euapi.gizwits.com/app/bindings?limit=20&skip=0','GET',NULL,NULL,array("Accept: application/json","X-Gizwits-Application-Id: ".$appid,"X-Gizwits-User-token: ".$token));
$obj = sdk_json_decode($return);
//print_r($obj);
foreach($obj['devices'] as $device) {
if (sdk_clean_variable_name($device['dev_alias']) == sdk_clean_variable_name($devicename)) {
$did = $device['did'];
saveVariable('did-'.sdk_clean_variable_name($devicename), $did);
return $did;
}
}
}
//************* Récupération de l'etat de l'appareil
// GET /app/devdata/{did}/latest
function sdk_heatzy_getstatus($diditem, $appid) {
$return = httpQuery('https://euapi.gizwits.com/app/devdata/'.$diditem.'/latest','GET',NULL,NULL,array("Accept: application/json","X-Gizwits-Application-Id: ".$appid));
$obj = sdk_json_decode($return);
//print_r($obj);
$etatch = $obj['attr']['mode'];
switch ($etatch) {
case 'cft':
$etat = 'cft'; // 'confort';
break;
case 'stop':
$etat = 'stop'; //'off';
break;
case 'eco':
$etat = 'eco'; //'economique';
break;
case 'fro':
$etat = 'fro'; //'hors-gel';
break;
default:
$etat = 99; //'inconnu';
break;
}
return $etat;
}
//************* Mise en forme xml du status pour la eedomus
function sdk_heatzy_eedomusstatus($status) {
$eestatus = "<root><status>";
switch ($status) {
case 'cft':
$eestatus .= '<libelle>Confort</libelle><value>cft</value>';
break;
case 'eco':
$eestatus .= '<libelle>Economique</libelle><value>eco</value>';
break;
case 'fro':
$eestatus .= '<libelle>Hors-gel</libelle><value>fro</value>';
break;
case 'stop':
$eestatus .= '<libelle>Off</libelle><value>stop</value>';
break;
default:
# code...
break;
}
$eestatus .= "</status></root>";
return $eestatus;
}
//************* Modification de l'etat de l'appareil
// POST /app/control/{did}
function sdk_heatzy_setstatus($diditem, $appid, $token, $ordre) {
$ordreapi = $ordre;
$modeapi = '"mode"';
$return = httpQuery('https://euapi.gizwits.com/app/control/'.$diditem,'POST','{"attrs":{'.$modeapi.':"'.$ordreapi.'"}}',NULL,array("Content-Type: application/json","Accept: application/json","X-Gizwits-Application-Id: ".$appid,"X-Gizwits-User-token: ".$token));
$obj = sdk_json_decode($return);
//print_r($obj);
return $obj;
}
/* **** MAIN PROGRAM *******************/
if (isset($mode) && $mode == 'set') {
if (loadVariable('tokenheatzy') != '' && (loadVariable('tokenexpireat') > time())) { // récupération du token
$token = loadVariable('tokenheatzy');
} else {
$token = sdk_heatzy_login($heatzy_username,$heatzy_password,$heatzy_application_id ); // récupération du token
}
if (loadVariable('did-'.sdk_clean_variable_name($heatzy_devicename)) != '') { // récupération du did
$did = loadVariable('did-'.sdk_clean_variable_name($heatzy_devicename));
} else {
$did = sdk_heatzy_getdidbyname($token,$heatzy_application_id,$heatzy_devicename);
}
$result = sdk_heatzy_setstatus($did,$heatzy_application_id,$token,$ordre); // définition du status actuel
} else {
if (loadVariable('tokenheatzy') != '' && (loadVariable('tokenexpireat') > time())) { // récupération du token
$token = loadVariable('tokenheatzy');
} else {
$token = sdk_heatzy_login($heatzy_username,$heatzy_password,$heatzy_application_id ); // récupération du token
}
if (loadVariable('did-'.sdk_clean_variable_name($heatzy_devicename)) != '') { // récupération du did
$did = loadVariable('did-'.sdk_clean_variable_name($heatzy_devicename));
} else {
$did = sdk_heatzy_getdidbyname($token,$heatzy_application_id,$heatzy_devicename);
}
$status = sdk_heatzy_getstatus($did,$heatzy_application_id); //récupération du status actuel
sdk_header('text/xml');
echo sdk_heatzy_eedomusstatus($status); //mise en forme du xml pour eedomus
}
?>