[Store] Radiateurs et interfaces Cozytouch

Discussion et échanges de scripts pour la box eedomus

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar Niafreu » 21 Nov 2021 21:02

Je viens de tester et ça fonctionne pas. Après avoir mis mon accès cela me donne aucun périphérique détecté. Cela dois venir du boîtier que j’ai installé sur mes radiateurs (ils ne sont pas compatibles d’origine). Dommage car ça fonctionnait très bien avant leur fichue mise à jour. Merci quand même, j’attendrais une prochaine version…
Niafreu
 
Messages : 15
Inscription : 22 Déc 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 21 Nov 2021 23:59

la version est en ligne.
si vous allez sur mise à jour de votre périphérique, ça devrait fonctionner mais vous n'aurez pas la conso totale. pour cela il faut réinstaller les périphériques.

je viens de tout désinstaller pour valider que la version publié fonctionne bien et c'est bon chez moi.
quelqu'un pourrait il me confirmer que ça fonctionne aussi chez lui?
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar Niafreu » 22 Nov 2021 06:02

Je confirme que pour les radiateurs compatibles cela fonctionne, mais pour ceux qui fonctionne comme moi avec le cozytouch ça ne fonctionne pas. Ca nous indique identifiant incorrecte, si quelqu’un veux bien regarder, je pense pas être le seul à utiliser que l’interface cozytouch. Merci à tous et bonne journée
Niafreu
 
Messages : 15
Inscription : 22 Déc 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 22 Nov 2021 11:14

Bonjour, je ne comprends pas bien ta réponse.
Tu dis que ça fonctionne et que ça ne fonctionne pas en même temps. Tu as deux type de radiateurs (radiateur connecté et radiateur avec un module supplémentaire) ?
Dans tous les cas la box Cozytouch est installée et donc la connections avec sauter fonctionne pareil, non?

Je veux bien regarder, mais il faudrait que je comprenne bien à quoi ressemble ton installation.
Je pourrais aussi tester avec un outil(postman) si l’authentification fonctionne pareil ou pas avec tes identifiants, mais il faudrait que tu m’envoi en MP tes login et password sauter (que tu changeras plus tard bien sur)
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar Paga49 » 22 Nov 2021 15:23

Bonjour,

Je pense qu'il a voulu dire qu'il existe 2 drivers, "Radiateur Cozytouch" pour les radiateurs communiquant et "Interface Cozytouch / Somfy" pour ceux qui passe par un boitier pour les autres radiateurs. Tu as modifier le premier, peux-tu modifier le deuxième ?
Un grand merci pour ta contribution.
Bonne journée

Pascal
Paga49
 
Messages : 17
Inscription : 14 Mai 2018

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 22 Nov 2021 17:20

Ahhh ok! Effectivement je n’ai pas regardé l’autre script mais comme ils ont été créés par la même personne, il y a des chances que le code se ressemble. Je regarderai dès que j’aurai un moment
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar Paga49 » 22 Nov 2021 17:25

Super, merci
Paga49
 
Messages : 17
Inscription : 14 Mai 2018

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar Niafreu » 22 Nov 2021 21:19

Paga49 a écrit:Bonjour,

Je pense qu'il a voulu dire qu'il existe 2 drivers, "Radiateur Cozytouch" pour les radiateurs communiquant et "Interface Cozytouch / Somfy" pour ceux qui passe par un boitier pour les autres radiateurs. Tu as modifier le premier, peux-tu modifier le deuxième ?
Un grand merci pour ta contribution.
Bonne journée

Pascal


Bonjour,

Merci pascal d’avoir traduit, désolé pour le manque de clarté.

Bonne journée à tous
Niafreu
 
Messages : 15
Inscription : 22 Déc 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar ventrea » 23 Nov 2021 00:37

Bravo Parabellum et merci, beau travail,
Je viens de faire la maj et la synchro avec mon bridge cozytouch fonctionne bien. Je peux à nouveau piloter mon radiateur.
:clap:
ventrea
 
Messages : 22
Inscription : 27 Mars 2016

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 23 Nov 2021 02:20

ventrea a écrit:Bravo Parabellum et merci, beau travail,
Je viens de faire la maj et la synchro avec mon bridge cozytouch fonctionne bien. Je peux à nouveau piloter mon radiateur.
:clap:


de rien.
je viens d'ailleurs de pousser une petite correction mineur. une simple recherche de mise à jour sur l'un des périphériques suffit pour avoir la dernière version
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 23 Nov 2021 02:29

sinon j'ai regardé pour l'autre driver: "Interface Cozytouch / Somfy"
alors la bonne nouvelle, c'est qu'il y a effectivement un code qui est proche.
par contre ça gère plusieurs types de brides: "cosytouch" mais aussi "connexoon" et "Tahoma".
du coup je ne sais pas si pour les deux autres ils ont aussi changer le principe de connection.

est ce que des utilisateurs de connexoon et Tahoma pourrait nous confirmer qu'il ont le problème?
je voudrais pas pousser une correction pour cosytouch qui planterait les autres.

Enfin, je vais poster en dessous le code que vous pourrez remplacer dans votre fichier cosytouch_interface.php pour tester si ça marche. n'ayant pas les bridges en question à la maison, c'est un peu dur d'etre sur de mon coup. ;-)
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 23 Nov 2021 02:42

<?php
// script créé par Patrice Gauchon pour eedomus
// modification authentification par Parabellum
// Version 1.1.0 / 23 novembre 2021

$url_token = 'https://api.groupe-atlantic.com/token';
$url_jwt = 'https://api.groupe-atlantic.com/gacoma/gacomawcfservice/accounts/jwt';
//$url_login = 'https://ha110-1.overkiz.com/enduser-mobile-web/enduserAPI/login';
$url_login = '';

$api_urls = array(
'cozytouch' => 'https://ha110-1.overkiz.com/enduser-mobile-web/enduserAPI/',
'connexoon' => 'https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/',
'tahoma' => 'https://www.tahomalink.com/enduser-mobile-web/enduserAPI/',
);

$cache_time = 240; // 4 minutes

$action = getArg('action', false);
$cache = loadVariable('cache');

//------------------------------
// Fonctions
//------------------------------

// Envoi une requête à l'API
function sdk_make_request($path, $method='POST', $data=NULL, $content_type=NULL)
{
global $api_url;

$header = NULL;
if ($content_type == 'json')
{
$header = array('Content-Type: application/json');
}
else if (!empty($data))
{
$data = http_build_query($data);
}

$result = httpQuery($api_url.$path, $method, $data, NULL, $header, true);

return sdk_json_decode($result);
}

// Login
function sdk_login($ignore_cache=false)
{
global $api_url, $api_urls, $url_token, $url_jwt, $url_login;

$bridge = loadVariable('bridge');

if (empty($bridge))
{
$bridge = 'cozytouch';
}

$api_url = $api_urls[$bridge];

$url_login = $api_url.'login';

$last_login = loadVariable('last_login');

if (!$ignore_cache and !empty($last_login) and $last_login > (time()-120))
{
return;
}

//Tentative de login direct avec le jeton en mÈmoire
$headers = array('Content-Type: application/x-www-form-urlencoded');
$data = array('jwt' => loadVariable('jeton'));
$data = http_build_query($data);
$result = httpQuery($url_login, 'POST', $data, null, $headers, true);
$result = sdk_json_decode($result);

if (isset($result['success']) and $result['success'])
{
//echo 'login direct avec succËs: '.'<br/>';
}
else
{
//echo 'login direct KO donc nouvelle authentification'.'<br/>';

//RÈcupÈration access_token
$headers = array('Authorization: Basic czduc0RZZXdWbjVGbVV4UmlYN1pVSUM3ZFI4YTphSDEzOXZmbzA1ZGdqeDJkSFVSQkFTbmhCRW9h');
$data = array(
'grant_type' => 'password',
'username' => loadVariable('username'),
'password' => loadVariable('password'),
);
$data = http_build_query($data);
$result = httpQuery($url_token, 'POST', $data, null, $headers, true);
$result = sdk_json_decode($result);
$atlantic_token = $result['access_token'];
//echo 'atlantic_token:'.$atlantic_token.'<br/>';

//RÈcupÈration nouveau jeton
$headers = array('Authorization: Bearer '.$atlantic_token);
$result = httpQuery($url_jwt, 'GET',null, null, $headers, true);
$jeton = sdk_json_decode($result);
//echo 'jeton:'.$jeton.'<br/>';

saveVariable('jeton', $jeton);

//Login avec nouveau jeton
$headers = array('Content-Type: application/x-www-form-urlencoded');
$data = array('jwt' => $jeton);
$data = http_build_query($data);
$result = httpQuery($url_login, 'POST', $data, null, $headers, true);
//echo 'resultat login: '.$result.'<br/>';
$result = sdk_json_decode($result);
}

if (isset($result['success']) and $result['success'])
{
saveVariable('last_login', time());
}

return $result; //pas sur...voir comment c'Ètait avant




////// code d'origine/////////
//////////////////////////////
//$data = array(
// 'userId' => loadVariable('username'),
// 'userPassword' => loadVariable('password'),
//);

//return sdk_make_request('login', 'POST', $data);
}

// Récupère toutes les pièces
function sdk_get_places($places)
{
$result = array();
foreach ($places as $place)
{
$result[$place['oid']] = $place['label'];

if (!empty($place['subPlaces']))
{
$result += sdk_get_places($place['subPlaces']);
}
}

return $result;
}

// Récupère les pièces et les périphériques
function sdk_get_setup($ignore_cache=false)
{
global $cache, $cache_time;

if (getArg('ignoreCache', false) == 'true')
{
$ignore_cache = true;
}

// retourne la sauvegarde en cache si dernière requête < $cache_time
if (!$ignore_cache and isset($cache['time']) and time() - $cache['time'] < $cache_time
and !empty($cache['devices']) and !empty($cache['places']))
{
return array(
'devices' => $cache['devices'],
'places' => $cache['places'],
'time' => $cache['time'],
);
}

// Login
sdk_login();

// On attend que les commandes en cours se terminent
$count = 0;
while ($count < 10)
{
$result = sdk_make_request('exec/current', 'GET');
if (empty($result))
{
break;
}
usleep(200000);
$count++;
}

// On rafraichit les états
sdk_make_request('setup/devices/states/refresh', 'POST');

// On récupère les périphériques
$setup = sdk_make_request('setup', 'GET');
$devices = array();
foreach ($setup['devices'] as $device)
{
if (!empty($device['placeOID']) and preg_match('%^(io://.*?/\d*?)$%', $device['deviceURL'], $match))
{
$device_url = $match[1];
$devices[$device_url]['place_oid'] = $device['placeOID'];
foreach ($device['states'] as $state)
{
if (preg_match('%^(core|io):(.*?)State$%', $state['name'], $match2))
{
$devices[$device_url]['states'][$match2[2]] = $state['value'];
}
}
}
}

// On récupère les pièces
$places = sdk_get_places($setup['rootPlace']['subPlaces']);

// Sauvegarde des données en cache
$time = time();
$cache['devices'] = $devices;
$cache['places'] = $places;
$cache['time'] = $time;
saveVariable('cache', $cache);

return array(
'places' => $places,
'devices' => $devices,
'time' => $time,
);
}

// On applique une commande aux périphériques d'une pièce
function sdk_apply_command($place_oid, $commands, $path='exec/apply')
{
global $cache;

$actions = array();
foreach ($cache['devices'] as $device_url => $device)
{
if ($device['place_oid'] == $place_oid)
{
$commands_str = array();
foreach ($commands as $command_name => $value)
{
$commands_str[] = '{"name":"'.$command_name.'","parameters":['.$value.']}';
}

$actions[] = '{"deviceURL":"'.$device_url.'","commands":['.implode($commands_str,',').']}';
}
}

$json = '{"label":"eedomus command","notificationTypeMask":"0","notificationCondition":"NEVER","actions":['.implode($actions,',').']}';

return sdk_make_request($path, 'POST', $json, 'json');
}

// Ecran de login
function sdk_display_login_form($message='', $error='')
{
$bridge = loadVariable('bridge');

echo '<html><head><title>eedomus</title></head><body>';
if (!empty($message)) echo '<p><b>'.$message.'</b></p>';
if (!empty($error)) echo '<p style="color:red"><b>'.$error.'</b></p>';
echo '<form method="post">';
echo 'Type de bridge :<br><select name="bridge">';
echo '<option value="cozytouch" '.($bridge == 'cozytouch' ? 'selected' : '').'>Cozytouch</option>';
echo '<option value="connexoon" '.($bridge == 'connexoon' ? 'selected' : '').'>Connexoon</option>';
echo '<option value="tahoma" '.($bridge == 'tahoma' ? 'selected' : '').'>Tahoma</option></select><br><br>';
echo 'Nom d\'utilisateur Cozytouch :<br><input type="text" name="username" value="'.loadVariable('username').'"><br><br>';
echo 'Mot de passe Cozytouch :<br><input type="password" name="password" value="'.loadVariable('password').'"><br><br>';
echo '<input type="submit" name="submit" value="'.'Connexion'.'">';
echo '</body>';
die;
}

// Ecran des pièces
function sdk_display_places($places)
{
echo '<html><head><title>eedomus</title></head><body><p><b>'.'Liste des Pièces'.' :</b></p>';
foreach ($places as $place_id => $place_label)
{
echo '<p>'.$place_label.'<br><input onclick="this.select();" type="text" size="40" readonly="readonly" value="'.$place_id.'"></p>';
}
echo '</body>';
die;
}

//------------------------------
// Page de configuration
//------------------------------

if (empty($action))
{
if (empty($_POST['submit']))
{
sdk_display_login_form('Veuillez renseigner vos identifiants.');
}

saveVariable('username', $_POST['username']);
saveVariable('password', $_POST['password']);
saveVariable('bridge', $_POST['bridge']);

$result = sdk_login(true);

if (isset($result['error']) and $result['error'] == 'Bad credentials')
{
sdk_display_login_form('', 'Identifiants de connexion incorrects');
}
if (!isset($result['success']) and !$result['success'])
{
sdk_display_login_form('', 'Impossible de se connecter au serveur Cozytouch');
}

$setup = sdk_get_setup(true);

if (!count($setup['devices']))
{
sdk_display_login_form('', 'Aucun périphérique détecté.');
}

sdk_display_places($setup['places']);
}

//------------------------------
// Actions
//------------------------------

// Set Mode
if ($action == 'setMode')
{
sdk_login();
$value = getArg('value');
$place_oid = getArg('place');

$commands = array('setHeatingLevel' => '"'.$value.'"');
sdk_apply_command($place_oid, $commands);

// Reset cache time
$cache['time'] = 0;
saveVariable('cache', $cache);
}

//------------------------------
// Polling (XML)
//------------------------------

if ($action == 'getState')
{
$setup = sdk_get_setup();
$places = $setup['places'];

sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml .= '<cozytouch>';

foreach ($places as $place_id => $place_label)
{
$xml .= '<place id="'.$place_id.'" label="'.$place_label.'">';
$xml .= '<devices>';

foreach ($setup['devices'] as $device_url => $device)
{
if ($device['place_oid'] == $place_id)
{
$xml .= '<device url="'.$device_url.'">';
foreach ($device['states'] as $state => $value)
{
$xml .= '<'.$state.'>'.$value.'</'.$state.'>';
}
$xml .= '</device>';
}
}
$xml .= '</devices>';
$xml .= '</place>';
}
$xml .= '<Timestamp>'.$setup['time'].'</Timestamp>';
$xml .= '</cozytouch>';
echo $xml;
}

?>
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 26 Nov 2021 21:47

Personne pour tester ?
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar matouftetouf » 29 Nov 2021 21:12

parabellum a écrit:Personne pour tester ?


Bonjour Parabellum

Désolé je n'avais encore pas pris le temps de tester.
Je te confirme que le scrip posté fonctionne. Je peux enfin piloter mon radiateur de la salle de bains avec une interface 6 fils via mon boitier cozytouch...

Mes autres chauffages sont des Atlantic connectés que je peux de nouveau piloter via eedomus.

Tout fonctionne comme avant.

Un grand merci a toi d'avoir pris le temps de mettre les mains dans le cambouis et d'avoir publier cette MAJ
matouftetouf
 
Messages : 12
Inscription : 03 Avr 2021

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 29 Nov 2021 22:21

merci pour votre réponse.

je viens donc de publier la version 1.1.0 sur le store.

Pour ceux qui avaient l'ancienne version il vous faudra peut être quand même vous identifier à nouveau....et cela ne se fait qu'à l'installation. du coup, je pense qu' il vous faudra donc installer un nouveau radiateur 'pipo', puis cliquer sur 'lister vos radiateur"...là, l'invitation de saisie de login/mot de passe apparait. une fois que la liste de vos radiateur s'est bien affiché, vous pourrez supprimer le radiateur 'pipo', votre authentification sera conservé sur la box.
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar Niafreu » 30 Nov 2021 20:59

Tu es au top ! Tout fonctionne comme avant, juste à entrer le mail et mdp. Pas besoin de rentrer à nouveau les radiateurs, ils sont tous reconnus (je n’avais rien effacé).
Encore merci pour le taf !
Niafreu
 
Messages : 15
Inscription : 22 Déc 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 30 Nov 2021 22:53

Nickel, si tu n'as pas eu besoin de réinstaller un radiateur...j'en était vraiment pas sur.
Merci aussi pour les encouragement, ça fait toujours plaisir.

Il reste plus qu'à espérer que ça marche aussi pour les utilisateurs "connexoon" et "Tahoma".
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar Paga49 » 01 Déc 2021 18:36

Bonjour,

Je viens de tester sur Cozytouch, c'est parfait, tout remarche nickel
Un grand merci Parabellum !!!!!
Paga49
 
Messages : 17
Inscription : 14 Mai 2018

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar díadeluz » 06 Déc 2021 18:31

Mille et un mercis, parabellum pour avoir mis temps, compétence et énergie dans ce développement ! :)
díadeluz
 
Messages : 84
Inscription : 24 Fév 2020

Re: [Store] Radiateurs et interfaces Cozytouch

Messagepar parabellum » 06 Déc 2021 21:52

Merci pour vos retours et encouragement. :-D
parabellum
 
Messages : 31
Inscription : 26 Mars 2020

PrécédentSuivant

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 9 invité(s)