tado climatisation V3

Discussion sur la box eedomus

tado climatisation V3

Messagepar Ben34 » 18 Déc 2021 20:33

bonjour

j'ai deja parametré des tado V2 avec le plugin, tout marche (sauf la puissance du ventillateur)
je viens de recevoir et installer de nouveaux tado (V3), install.ok, retour temperature et humidité ok, mise en off ok; mais impossible de lancer une consigne de chauffage.
prend l'info mais rien ne se passe sur les tado.
ca marche parfaitement avec l'appli tado, mais impossible avec eedomus...

si quelqu'un à une idée..

Merci d'avance,
Benoit
Ben34
 
Messages : 72
Inscription : 04 Août 2021

Re: tado climatisation V3

Messagepar Freezecool » 01 Jan 2022 19:30

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
ventilation.JPG (98.64 Kio) Consulté 1893 fois
Freezecool
 
Messages : 8
Inscription : 16 Août 2021

Re: tado climatisation V3

Messagepar Ben34 » 13 Jan 2022 14:44

Bonjour Freezecool,

Je viens de voir ton retour, je ne suis plus sur ce site actuellement et ne retournerais pas sur place avant plusieurs mois.. je ne pense pas pouvoir le faire à distance, je ne pourrais pas voir si ça marche (actuellement sur eedomus, l'ordre et l'etat passe bien mais sur le tado, rien n'arrive)
je suis donc obligé de reporter ce probleme à mon retour..
par contre, je n'ai vraiment pas le niveau informatique pour comprendre à quoi sert le script :D

l'ideal pour moi serait effectivement une mise à jour du plugin par la team

je te tiens au courant

Benoit
Ben34
 
Messages : 72
Inscription : 04 Août 2021

Re: tado climatisation V3

Messagepar Ben34 » 14 Juin 2022 16:21

Bonjour Freezecool,

je viens de relire ton post... en fait, j'y comprends rien et ca ne vient pas de toi... :)
Je crains que ça ne dépasse largement mes capacité.. je ne sais pas comment mettre à jour mes V2 ni comment modifier le script (??) je ne sais meme pas ce qu'est un script (?)

merci
Benoit
Ben34
 
Messages : 72
Inscription : 04 Août 2021


Retour vers Box eedomus

Qui est en ligne ?

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