Bonjour Ben34,
Je viens juste de voir ton post concernant les Tado, j'ai également le même souci que toi. j'ai effectué la mise à jour de mes Tado et plus rien ne fonctionnait.
L'équipe de Tado a modifié son API, j'ai du modifier le script de l'équipe eedomus. Et il faut modifier les valeurs de la ventilation ( voir capture).
La Team est au courant, je leur ai envoyé le script modifié mais je n'ai pas eu de réponse de leur part.
Je te joins le script mais attention que cela n'impacte pas les tado en V2 ou peut etre vérifié s'il n'exista pas une mise à jour sur les Tado V2 en les réinstallant.
Espérant avoir pu t'aider.
- Code : Tout sélectionner
<?php // script créé par Connected Object pour eedomus
$CACHE_DURATION = 5; // minutes $api_url = 'https://my.tado.com/';
$prev_code = loadVariable('code');
function sdk_get_tado_value($name, $default_value, $home_id, $zone_id) { $value = loadVariable($name.'_'.$home_id.'_'.$zone_id); if ($value == '') { $value = $default_value; } saveVariable($name.'_'.$home_id.'_'.$zone_id, $value); return $value; }
function sdk_tado_api_call($url, $action = 'GET', $post = NULL) { $headers = array("Authorization: Bearer ".$GLOBALS['access_token']); if ($post != '') { $headers[] = 'Content-Type: application/json'; } $response = httpQuery($url, $action, $post, 'tado_oauth2', $headers); //echo "url=[$url] post=[$post] response=[$response]"; return $response; }
if ($_GET['mode'] != 'verify') { $refresh_token = loadVariable('refresh_token');
$expire_time = loadVariable('expire_time'); // s'il n'a pas expiré, on peut reprendre l'access_token if (time() < $expire_time) { $access_token = loadVariable('access_token'); } }
// on a déjà un token d'accés non expiré pour le code demandée if ($access_token == '') { if ($_GET['oauth_code'] != '') { $code = $_GET['oauth_code']; } else { $code = $prev_code; }
if (strlen($refresh_token) > 1) { // on peut juste rafraichir le token $grant_type = 'refresh_token'; $postdata = 'grant_type='.$grant_type.'&refresh_token='.$refresh_token; } else { // 1ère utilisation aprés obtention du code $grant_type = 'authorization_code'; $redirect_uri = 'https://secure.eedomus.com/sdk/plugins/tado/callback.php'; $scope = 'identity:read home.details:read home.operation:read home.operation.overlay:write home.webhooks'; $postdata = 'grant_type='.$grant_type.'&code='.$code.'&redirect_uri='.urlencode($redirect_uri).'&scope='.urlencode($scope); } $url = 'https://auth.tado.com/oauth/token'; $response = httpQuery($url, 'POST', $postdata, 'tado_oauth2'); $params = sdk_json_decode($response);
if ($params['error'] != '') { die("Erreur lors de l'authentification:"." [".$params['error'].'] (grant_type='.$grant_type.'), vous pouvez lier à nouveau votre compte en cliquant sur [Lier à nouveau] depuis la configuration de votre périphérique'."\n\n".$response); }
// on sauvegarde l'access_token et le refresh_token pour les authentifications suivantes if (isset($params['refresh_token'])) { $access_token = $params['access_token']; saveVariable('access_token', $access_token); saveVariable('refresh_token', $params['refresh_token']); saveVariable('expire_time', time()+$params['expires_in']); if ($code != '') { saveVariable('code', $code); } } else if ($access_token == '') { die("Erreur lors de l'authentification, vous pouvez lier à nouveau votre compte en cliquant sur [Lier à nouveau] depuis la configuration de votre périphérique\n\n".$response); } }
if ($_GET['mode'] == 'verify') { ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>eedomus</title> <style type="text/css"> body,td,th { font-family: Arial, Helvetica, sans-serif; font-size: 14px; } </style> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head><? echo '<br>'; echo "Sélectionnez un identifiant thermostat et copiez/collez le dans le paramètrage de votre périphérique Tado eedomus :"; echo '<br>'; echo '<br>';
$url = $api_url.'api/v2/me'; $response = sdk_tado_api_call($url); $json = sdk_json_decode($response); // aucune "homes", au cas où if (sizeof($json['homes']) <= 0) { var_dump($url, $response); } for ($i = 0; $i < sizeof($json['homes']); $i++) { $home_id = $json['homes'][$i]['id']; $home_name = $json['homes'][$i]['name']; //echo $home_id ." - ".$home_name.'<br>'; $url = $api_url.'api/v2/homes/'.$home_id.'/zones'; $response = sdk_tado_api_call($url); $zones = sdk_json_decode($response); // aucune "zones" désormais ? if (sizeof($zones) <= 0) { echo $home_name . " (## ERROR : "."Aucune Zone configurée, vérifiez votre compte Tado".") : "; echo ' <input onclick="this.select();" type="text" size="40" readonly="readonly" value="'.$home_id.'" />'.'<br>'; } else { for ($j = 0; $j < sizeof($zones); $j++) { $zone_id = $zones[$j]['id']; $zone_name = $zones[$j]['name']; echo $home_name ." / ".$zone_name. " : "; echo ' <input onclick="this.select();" type="text" size="40" readonly="readonly" value="'.$home_id.'-'.$zone_id.'" />'.'<br>'; } } } } else if ($_GET['mode'] == 'get') {
$home_zone = getArg('home_zone'); $tok = explode('-', $home_zone); $home_id = $tok[0]; $zone_id = $tok[1]; $last_xml_success = loadVariable('last_xml_success_'.$home_id.'_'.$zone_id); if ((time() - $last_xml_success) / 60 < $CACHE_DURATION) { sdk_header('text/xml'); $cached_xml = loadVariable('cached_xml_'.$home_id.'_'.$zone_id); echo $cached_xml; die(); } $url = $api_url.'api/v2/homes/'.$home_id.'/zones/'.$zone_id.'/state'; $response = sdk_tado_api_call($url); $json = sdk_json_decode($response);
if ($json['errors'] != '') { die($response); }
$inside_temperature = $json['sensorDataPoints']['insideTemperature']['celsius']; $humidity = $json['sensorDataPoints']['humidity']['percentage']; $overlay = $json['overlay']; $setting_type = $overlay['type']; $setpoint = $overlay['setting']['temperature']['celsius']; if ($setting_type == '') { $setting_type = "AUTO"; $setpoint = $json['setting']['temperature']['celsius']; } if ($setpoint == '') { $setpoint = 0; // Off eedomus }
$fan_speed = sdk_get_tado_value('fan_speed', 'MIDDLE', $home_id, $zone_id); if ($json['setting']['mode'] != '') { saveVariable('zone_mode_'.$home_id.'_'.$zone_id, $json['setting']['mode']); } $zone_mode = sdk_get_tado_value('zone_mode', 'HEAT', $home_id, $zone_id); $swing = sdk_get_tado_value('swing', 'OFF', $home_id, $zone_id); $power = $json['setting']['power']; $xml = "<tado>"; $xml .= '<cached>0</cached>'; $xml .= "<inside_temperature>$inside_temperature</inside_temperature>"; $xml .= "<humidity>$humidity</humidity>"; $xml .= "<setting_type>$setting_type</setting_type>"; $xml .= "<setpoint>$setpoint</setpoint>"; $xml .= "<fan_speed>$fan_speed</fan_speed>"; $xml .= "<zone_mode>$zone_mode</zone_mode>"; $xml .= "<power>$power</power>"; $xml .= "<swing>$swing</swing>"; $xml .= "</tado>"; sdk_header('text/xml'); echo $xml; $xml = str_replace('<cached>0</cached>', '<cached>1</cached>', $xml); if ($xml != '') // non vide { saveVariable('cached_xml_'.$home_id.'_'.$zone_id, $xml); saveVariable('last_xml_success_'.$home_id.'_'.$zone_id, time()); } } else if ($_GET['setpoint_temperature'] != '' || $_GET['zone_mode'] != '' || $_GET['fan_speed'] != '' || $_GET['swing'] != '') { // type = HEATING, AIR_CONDITIONING, HOT_WATER $type = getArg('type'); $home_zone = getArg('home_zone'); $tok = explode('-', $home_zone); $home_id = $tok[0]; $zone_id = $tok[1]; if ($_GET['setpoint_temperature'] != '') { saveVariable('setpoint_temperature_'.$home_id.'_'.$zone_id, $_GET['setpoint_temperature']); } $setpoint_temperature = sdk_get_tado_value('setpoint_temperature', 0, $home_id, $zone_id); // mode = COOL, HEAT if ($_GET['zone_mode'] != '') { saveVariable('zone_mode_'.$home_id.'_'.$zone_id, $_GET['zone_mode']); } $zone_mode = sdk_get_tado_value('zone_mode', 'HEAT', $home_id, $zone_id); // fan speeds : fanSpeed = LOW, MIDDLE, HIGH, AUTO if ($_GET['fan_speed'] != '') { saveVariable('fan_speed_'.$home_id.'_'.$zone_id, $_GET['fan_speed']); } $fan_speed = sdk_get_tado_value('fan_speed', 'MIDDLE', $home_id, $zone_id);
// Swings : swing = ON, OFF if ($_GET['swing'] != '') { saveVariable('swing_'.$home_id.'_'.$zone_id, $_GET['swing']); } $swing = sdk_get_tado_value('swing', 'OFF', $home_id, $zone_id);
if ($setpoint_temperature == 0) { $power = 'OFF'; } else { $power = 'ON'; } if ($zone_mode == 'COOL' || $type == 'AIR_CONDITIONING') { $json_cooling = ', "fanLevel" :"'.$fan_speed.'"'; } // ## ERROR : Querying [https://my.tado.com/api/v2/homes/557101/zones/1/overlay] with [{"setting": {"type": "AIR_CONDITIONING", "power": "ON", "mode": "HEAT", "temperature": {"celsius": 23}, "fanSpeed" :"AUTO"},"termination": {"type": "MANUAL"}}] {"errors":[{"code":"setting.notSupported","title":"swing not in supported swings [OFF, ON]"}]} // {"errors":[{"code":"setting.notSupported","title":"swing not allowed in mode HEAT"}]} if ($zone_mode == 'COOL' || ($type == 'AIR_CONDITIONING' && $zone_mode != 'HEAT')) { $json_cooling .= ', "verticalSwing" :"'.$swing.'"'; } $json = '{"setting": {"type": "'.$type.'", "power": "'.$power.'", "mode": "'.$zone_mode.'", "temperature": {"celsius": '.$setpoint_temperature.'}, "fanLevel" :"'.$fan_speed.'", "verticalSwing" :"'.$swing.'"},"termination": {"type": "MANUAL"}}';
$url = $api_url.'api/v2/homes/'.$home_id.'/zones/'.$zone_id.'/overlay'; $response = sdk_tado_api_call($url, 'PUT', $json); if (strpos($response, 'errors') !== false) { echo "## ERROR : Querying [$url] with [$json]\n"; } echo $response; saveVariable('last_xml_success_'.$home_id.'_'.$zone_id, 0); }
?>
Pièces jointes: |
- ventilation.JPG (98.64 Kio) Consulté 2302 fois
|
|