[HELP] Nest - Récupérer les valeurs hvac_state et humidity

On parle ici de l’utilisation de vos objets connectés avec eedomus

[HELP] Nest - Récupérer les valeurs hvac_state et humidity

Messagepar ElYoM » 25 Nov 2018 13:03

Bonjour à tou(te)s,

J'utilise le thermostat Nest sur ma box eedomus à l'aide du script officiel développé par Connected Object et ça marche très bien. Cependant, en lisant la documentation de l'API, je me suis aperçu que ce script ne récupère pas les valeurs "hvac_state" et "humidity" qui sont respectivement l'état actif ou non de la chauffe et le taux d'humidité relevé par le capteur du Nest.

J'ai donc entrepris de récupérer ces valeurs en modifiant le script de Connected Object et en me basant sur les modifications de Jérôme DURIEZ pour récupérer l'état de batterie des détecteurs de fumée ("battery_health"). Modifications déjà disponibles et marquées comme telles dans le script de Connected Object. J'ai donc ajouté deux blocs de code comme suit :

- A la ligne 381 du script, je rajoute le bloc de code PHP suivant :
Code : Tout sélectionner
      // Modification du 28/11/2018
      // Auteur : ElYoM
      // Récupère l'état de chauffe active ou non du chauffage
      $xml .= '<hvac_state>';
      $xml .= $json['hvac_state'];
      $xml .= '</hvac_state>';


- A la ligne 454 du script, je rajoute le bloc de code PHP suivant :
Code : Tout sélectionner
          // Modification du 28/11/2018
          // Auteur : ElYoM
          // Récupère l'état de chauffe active du chauffage
          $xml .= '<hvac_state>';
         $xml .= $json['hvac_state'];
         $xml .= '</hvac_state>';


N'étant pas familier du PHP et en analysant malgré tout du mieux que je pouvais le code du script, je me suis dit que ces deux modifications suffiraient. Après tout, les modifications de Jérôme pour récupérer le niveau de batterie des Nest Protect se limitent à cela. Malheureusement, cela ne fonctionne pas et quand je teste le xpath "/nest/hvac_state", l'eedomus me renvoie "ERREUR: Valeur lue vide".

Aussi, je cherche une bonne âme, familière du PHP, et qui pourrait m'indiquer comment faire pour récupérer les deux valeurs "hvac_state" et "humidity" parce que là, je sèche et ne comprend surtout pas pourquoi cela ne fonctionne pas, même si je suis quasi sûr que c'est trois fois rien niveau modification...

En vous remerciant par avance.

Bon Dimanche.
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 25 Nov 2018 13:38

bonjour,

peux tu mettre le script dans son intégralité ?
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 25 Nov 2018 13:45

Hello,

Oui, pas de souci, le voici :

Code : Tout sélectionner
<?php

// script créé par Connected Object pour eedomus
// ce script permet de générer un XML facilement lisible par eedomus
// généré à partir des données Nest récupérées via Oauth

// encodage iso-8859-1 pour les accents

// Version 1 / 5 novembre 2014      / 1ère version disponible

$api_url = 'https://api.home.nest.com';

$code = getArg('oauth_code');
$prev_code = loadVariable('code');
$default_thermostat_id = loadVariable('default_thermostat_id');
$default_smoke_co_alarm_id = loadVariable('default_smoke_co_alarm_id');
$default_structure_id = loadVariable('default_structure_id');

function sdk_print_begenning_html()
{
   echo '<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>'.'Nest et eedomus'.'</title>

<style>
   html
   {
      background:#404040;
      color: #FFF;
      font-family: "proxima-nova","Helvetica Neue",Helvetica,Arial,sans-serif;
   }

   header, section {width: 100%; display: block;}
   header h1 {display: inline; margin: 25px; horizontal-align: middle; color: #00AFD8}
   section {margin-left: 25px;}
   form label, form input, form button {margin: 15px 0px; display: inline;}
   a:link, a:visited { color: #0078e7; }
   a:hover { color: red; }

   fieldset
   {
      border: 0 none;
      margin: 0;
      padding: 0.35em 0 0.75em;
   }

   input[type="text"]
   {
      -moz-box-sizing: border-box;
      border: 1px solid #ccc;
      border-radius: 4px;
      box-shadow: 0 1px 3px #ddd inset;
      padding: 0.5em 0.6em;
   }

   button
   {
      font-size: 100%;
      padding: 0.5em 1em;
      text-decoration: none;
      -moz-user-select: none;
      cursor: pointer;
      line-height: normal;
      text-align: center;
      vertical-align: baseline;
      white-space: nowrap;
      border: 0 none rgba(0, 0, 0, 0);
      border-radius: 2px;
      background-color: #0078e7;
      color: #fff;
   }
</style>

</head>
<body>

<header>
   <h1>'.'Nest et eedomus'.'</h1>
</header>';
}

function sdk_print_end_html()
{
   echo '</body></html>';
}

function sdk_verify_thermostat_id($thermostat_id)
{
   $ret =    $thermostat_id;

   // On utilise le thermostat par défaut si aucun précisé
   if($ret == '' || $ret == '*') {
      $ret = $default_thermostat_id;
   }

   // On envoie l'ordre sur le premier thermostat trouvé
   // Et on en fait le thermostat par défaut
   if($ret == '') {
      $url = 'https://developer-api.nest.com/devices/thermostats?auth='.$access_token;
      $result = httpQuery($url);
      $json = sdk_json_decode($result);
      foreach($json as $ret => $thermostat) {
         saveVariable('default_thermostat_id', $ret);
         break;
      }
   }
   
   return $ret;
}

if (strlen($prev_code) > 1 && $code == $prev_code)
{
  // on reprend le dernier access_token seulement s'il correspond au même code
   $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 == '')
{
   // 1ère utilisation aprés obtention du code
   $grant_type = 'authorization_code';
   $redirect_uri = 'https://secure.eedomus.com/sdk/plugins/netatmo/callback.php';
   $postdata = 'grant_type='.$grant_type.'&code='.$code.'&redirect_uri='.$redirect_uri;

  $response = httpQuery($api_url.'/oauth2/access_token', 'POST', $postdata, 'nest_oauth');
  $params = sdk_json_decode($response);

  if ($params['error'] != '')
  {
      header("HTTP/1.1 403 Forbidden");
    die('Nest et eedomus'.' : '."Erreur lors de l'authentification".": <b>".$params['error'].'</b> (grant_type = '.$grant_type.')');
  }

  // on sauvegarde l'access_token pour les authentifications suivantes
  if (isset($params['access_token']))
  {
    $access_token = $params['access_token'];
    saveVariable('access_token', $access_token);
    saveVariable('expire_time', time()+$params['expires_in']);
    saveVariable('code', $code);
  }
  else
  {
      header("HTTP/1.1 403 Forbidden");
    die("Erreur lors de l'authentification");
  }
}

if ($_GET['mode'] == 'verify')
{
   sdk_print_begenning_html();
   echo '<section>';
   echo '<form>';
   echo '<fieldset>';
   echo "<label for=\"nest_code\">"."Votre code d'authentification Nest est :"." </label>";
   echo "<input id=\"nest_code\" type=\"text\" size=\"25\" name=\"nest_code\" value=\"$code\" onclick=\"this.select();\" readonly>";
   echo '</fieldset>';
   echo '</form>';
   echo '<p>'.'Vous pouvez le copier/coller dans le paramètrage de votre périphérique eedomus.'.'</p>';
   echo '</section>';

   $url = 'https://developer-api.nest.com/devices?auth='.$access_token;
   $result = httpQuery($url);
   $json = sdk_json_decode($result);

   //sdk_print_begenning_html();
   echo '<section>';
   echo '<form>';
   echo '<fieldset>';
   echo "<p>"."La liste des identifiants des différents thermostats :"." </p>";
   echo "<ul>";
   foreach($json['thermostats'] as $thermostat_id => $thermostat) {
      echo "<li>";
      echo "<label>".$thermostat['name_long']." : </label>";
      echo "<input type=\"text\" size=\"40\" value=\"$thermostat_id\" onclick=\"this.select();\" readonly>";   
      echo "</li>";
   }
   echo "</ul>";
   echo '</fieldset>';
   if (sizeof($json['smoke_co_alarms']) > 0)
   {
      echo '<fieldset>';
      echo "<p>"."La liste des identifiants des différents détecteurs de fumée :"." </p>";
      echo "<ul>";
      foreach($json['smoke_co_alarms'] as $smoke_id => $smoke) {
         echo "<li>";
         echo "<label>".$smoke['name_long']." : </label>";
         echo "<input type=\"text\" size=\"40\" value=\"$smoke_id\" onclick=\"this.select();\" >";
         echo "</li>";
      }
      echo "</ul>";
      echo '</fieldset>';
   }
   echo '</form>';
   echo '</section>';
   sdk_print_end_html();
   die();
}

// Ecriture de la variable de présence dans la maison
if ($_GET['set_away'] != '')
{
   $away = $_GET['set_away'];
   
   // Controle de la valeur
   if($away != 'home' && $away != 'away' && $away != 'auto-away') {
      $away = 'home';
   }

   // On envoie l'ordre sur le premier thermostat trouvé
   // Et on en fait le thermostat par défaut
   if($default_structure_id == '') {
      $url = 'https://developer-api.nest.com/structures?auth='.$access_token;
      $result = httpQuery($url);
      $json = sdk_json_decode($result);
      foreach($json as $default_structure_id => $structure) {
         saveVariable('default_structure_id', $default_structure_id);
         break;
      }
   }

   // XML de sortie
   sdk_header('text/xml');
   $xml = '<?xml version="1.0" encoding="utf8" ?>';
   $xml .= '<nest>';
   $xml .= '<status>';

   // On sait sur quel thermostat agir
   if($default_structure_id != '') {
      $url = 'https://developer-api.nest.com/structures/'.$default_structure_id.'/away?auth='.$access_token;
      httpQuery($url, 'PUT', '"'.$away.'"', NULL, NULL, false);
      $xml .= 'ok';
   }
   // En cas de souci, on avertit
   else {
      $xml .= 'ko';
   }

   $xml .= '</status>';
   $xml .= '</nest>';
   echo $xml;
}
// Ecriture d'une température de consigne
else if ($_GET['target_temperature_c'] != '')
{
   $target_temperature_c = $_GET['target_temperature_c'];
   $thermostat_id = sdk_verify_thermostat_id($_GET['thermostat_id']);

   // XML de sortie
   sdk_header('text/xml');
   $xml = '<?xml version="1.0" encoding="utf8" ?>';
   $xml .= '<nest>';
   $xml .= '<status>';

   // On sait sur quel thermostat agir
   if($thermostat_id != '')
   {
      $last_target_temperature_c = loadVariable('last_target_temperature_c');
      if ($last_target_temperature_c == $target_temperature_c)
      {
         $xml .= "Aborting, target temperature already set to $target_temperature_c";
      }
      else
      {
         $url = 'https://developer-api.nest.com/devices/thermostats/'.$thermostat_id.'/target_temperature_c?auth='.$access_token;
         $result = httpQuery($url, 'PUT', $target_temperature_c, NULL, NULL, false);
         $json = sdk_json_decode($result);
         if ($json['error'] != '')
         {
            // 403 Forbidden
            header("HTTP/1.1 403 Forbidden");
            $xml .= $json['error'];
         }
         else
         {
            $xml .= 'ok';
            saveVariable('last_target_temperature_c', $target_temperature_c);
         }
      }
   }
   // En cas de souci, on avertit
   else
   {
      $xml .= 'ko';
   }

   $xml .= '</status>';
   $xml .= '</nest>';
   echo $xml;
}
// Ecriture du mode de chauffage (heat, cool, heat-cool, off)
else if ($_GET['hvac_mode'] != '')
{
   $hvac_mode = $_GET['hvac_mode'];
   $thermostat_id = sdk_verify_thermostat_id($_GET['thermostat_id']);

   // Controle de la valeur
   if($hvac_mode != 'heat' && $hvac_mode != 'cool' && $hvac_mode != 'heat-cool' && $hvac_mode != 'off') {
      $hvac_mode = 'heat';
   }

   // XML de sortie
   sdk_header('text/xml');
   $xml = '<?xml version="1.0" encoding="utf8" ?>';
   $xml .= '<nest>';
   $xml .= '<status>';

   // On sait sur quel thermostat agir
   if($thermostat_id != '')
   {
      $last_hvac_mode = loadVariable('last_hvac_mode');
      if ($last_hvac_mode == $hvac_mode)
      {
         $xml .= "Aborting, hvac mode already set to $last_hvac_mode";
      }
      else
      {
         $url = 'https://developer-api.nest.com/devices/thermostats/'.$thermostat_id.'/hvac_mode?auth='.$access_token;
         $result = httpQuery($url, 'PUT', '"'.$hvac_mode.'"', NULL, NULL, false);
         $json = sdk_json_decode($result);
         if ($json['error'] != '' && $json != $hvac_mode)
         {
            // 403 Forbidden
            header("HTTP/1.1 403 Forbidden");
            $xml .= $json['error'];
            
            // on ne veut pas qu'eedomus insiste, alors on passe à une valeur fictive "Rate limit"
            //setValue($_GET['eedomus_controller_module_id'], $hvac_mode, false /*$verify_value_list*/);
            //sleep(2);
            //setValue($_GET['eedomus_controller_module_id'], 'error', false /*$verify_value_list*/);
            
            $api_url = "https://api.eedomus.com/set?action=periph.value&periph_id=".$_GET['eedomus_controller_module_id']."&value=error";
            $api_result = httpQuery($api_url);
         }
         else
         {
            $xml .= 'ok';
            saveVariable('last_hvac_mode', $hvac_mode);
         }
      }
   }
   // En cas de souci, on avertit
   else {
      $xml .= 'ko';
   }

   $xml .= '</status>';
   $xml .= '</nest>';
   echo $xml;
}
else
{
   // XML de sortie
   $xml = '<?xml version="1.0" encoding="utf8" ?>';
   $xml .= '<nest>';

   // Read the devices
   $thermostat_id = $_GET['thermostat_id'];
   $smoke_co_alarm_id = $_GET['smoke_co_alarm_id'];
   if($thermostat_id != '' && $thermostat_id != '*')
   {
      $url = 'https://developer-api.nest.com/devices/thermostats/'.$thermostat_id.'?auth='.$access_token;
      $result = httpQuery($url);
      $json = sdk_json_decode($result);
      $xml .= '<ambient_temperature_c>';
      $xml .= $json['ambient_temperature_c'];
      $xml .= '</ambient_temperature_c>';
      $xml .= '<target_temperature_c>';
      $xml .= $json['target_temperature_c'];
      $xml .= '</target_temperature_c>';
      $xml .= '<hvac_mode>';
      $xml .= $json['hvac_mode'];
      $xml .= '</hvac_mode>';
      // Modification du 28/11/2018
      // Auteur : ElYoM
      // Récupère l'état de chauffe active du chauffage
      $xml .= '<hvac_state>';
      $xml .= $json['hvac_state'];
      $xml .= '</hvac_state>';
      
      if ($json['target_temperature_c'] != '')
      {
         saveVariable('last_target_temperature_c', $json['target_temperature_c']);
      }
      
      if ($json['hvac_mode'] != '')
      {
         saveVariable('last_hvac_mode', $json['hvac_mode']);
      }
   }
   else if($smoke_co_alarm_id != '' && $smoke_co_alarm_id != '*') {
      $url = 'https://developer-api.nest.com/devices/smoke_co_alarms/'.$smoke_co_alarm_id.'?auth='.$access_token;
      $result = httpQuery($url);
      $json = sdk_json_decode($result);
      $xml .= '<co_alarm_state>';
      $xml .= $json['co_alarm_state'];
      $xml .= '</co_alarm_state>';
      $xml .= '<smoke_alarm_state>';
      $xml .= $json['smoke_alarm_state'];
      $xml .= '</smoke_alarm_state>';
      // Modification du 20/04/2016
      // Auteur : Jérôme DURIEZ
      // Récupérer le Niveau de batterie du Nest Protect
      $xml .= '<battery_health>';
      $xml .= $json['battery_health']; 
      $xml .= '</battery_health>';
   }
   else if($_GET['get_away'] != '') {
      $url = 'https://developer-api.nest.com/structures?auth='.$access_token;
      $result = httpQuery($url);
      $json = sdk_json_decode($result);
      foreach($json as $structure_id => $structure) {
         $default_structure_id = $structure_id;
         saveVariable('default_structure_id', $default_structure_id);
         break;
      }
      if($default_structure_id != '') {
         $xml .= '<away>';
         $xml .= $json[$default_structure_id]['away'];
         $xml .= '</away>';
      }
   }
   else {
      $url = 'https://developer-api.nest.com/devices?auth='.$access_token;
      $result = httpQuery($url);
      $json = sdk_json_decode($result);

      // On récupère la donnée sur le premier thermostat trouvé
      // Et on en fait le thermostat par défaut
      if($default_thermostat_id == '') {
         foreach($json['thermostats'] as $thermostat_id => $thermostat) {
            $default_thermostat_id = $thermostat_id;
            saveVariable('default_thermostat_id', $default_thermostat_id);
            break;
         }
      }
      if($default_thermostat_id != '') {
         $xml .= '<ambient_temperature_c>';
         $xml .= $json["thermostats"][$default_thermostat_id]['ambient_temperature_c'];
         $xml .= '</ambient_temperature_c>';
         $xml .= '<target_temperature_c>';
         $xml .= $json["thermostats"][$default_thermostat_id]['target_temperature_c'];
         $xml .= '</target_temperature_c>';
         $xml .= '<hvac_mode>';
         $xml .= $json['hvac_mode'];
         $xml .= '</hvac_mode>';
          // Modification du 28/11/2018
          // Auteur : ElYoM
          // Récupère l'état de chauffe active du chauffage
          $xml .= '<hvac_state>';
         $xml .= $json['hvac_state'];
         $xml .= '</hvac_state>';
      }

      // On récupère la donnée sur le premier détecteur de fumée trouvé
      // Et on en fait le détecteur de fumée par défaut
      if($default_smoke_co_alarm_id == '') {
         foreach($json['smoke_co_alarms'] as $smoke_id => $smoke) {
            $default_smoke_co_alarm_id = $smoke_id;
            saveVariable('default_smoke_co_alarm_id', $default_smoke_co_alarm_id);
            break;
         }
      }
      if($default_smoke_co_alarm_id != '') {
         $xml .= '<co_alarm_state>';
         $xml .= $smoke["smoke_co_alarms"][$default_smoke_co_alarms_id]['co_alarm_state'];
         $xml .= '</co_alarm_state>';
         $xml .= '<smoke_alarm_state>';
         $xml .= $smoke["smoke_co_alarms"][$default_smoke_co_alarms_id]['smoke_alarm_state'];
         $xml .= '</smoke_alarm_state>';
         // Modification du 20/04/2016
         // Auteur : Jérôme DURIEZ
         // Récupérer le Niveau de batterie du Nest Protect
         $xml .= '<battery_health>';
         $xml .= $smoke["battery_health"][$default_smoke_co_alarms_id]['battery_health'];
         $xml .= '</battery_health>';
      }
   }

   // permet d'avoir une mise en forme plus lisible dans un browser
   sdk_header('text/xml');

   // XML de sortie
   $xml .= '</nest>';

   echo $xml;
}
?>
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 25 Nov 2018 17:42

De ce que je crois comprendre, certaines données supplémentaires sont accessibles suivant la version de ton Nest.
Ton code est bon et si tu n'obtiens rien c'est que tout simplement la balise <hvac_state> n'existe pas dans la variable $json.

Le firmware de ton Nest est il à jour ? quelle est la génération de ton Nest ?
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 25 Nov 2018 21:51

Hello merguez07,

Merci pour ta réponse.

Mon thermostat est bien en dernière version du firmware (5.9.1 du 22 octobre 2018) et il s'agit bien d'un 3ème génération, je suis donc étonné que l'API ne me renvoie aucune information pour la variable "hvac_state". Je vais tester avec la variable "humidity" pour voir si cela me renvoie quelque chose.
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 25 Nov 2018 22:13

Bon ben même constat pour la variable 'humidity' --> "ERREUR: Valeur lue vide"... Franchement, là, je sèche...

Sinon, à la ligne 129 du script nest_oauth.php de ConnectedObject, je trouve la ligne suivante :
Code : Tout sélectionner
$redirect_uri = 'https://secure.eedomus.com/sdk/plugins/netatmo/callback.php';

Je suis donc étonné qu'une référence à netatmo soit présente dans un script pour Nest... :?
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 26 Nov 2018 07:39

ElYoM a écrit:Je suis donc étonné qu'une référence à netatmo soit présente dans un script pour Nest..


Ce n'est pas anormal dans la mesure où, à cet endroit du code, ils ont besoin de faire appel a un bout de code déjà réalisé pour gérer les netatmo : Callback.php

ElYoM a écrit:Mon thermostat est bien en dernière version du firmware (5.9.1 du 22 octobre 2018) et il s'agit bien d'un 3ème génération,


Du coup mon hypothèse ne tient pas. Ce qu'il va falloir faire pour s'en sortir c'est afficher toutes les balises que comporte ta variable $json

essaye de rajouter les 2 lignes de codes suivantes après l'initialisation de la variable $json :

$json = sdk_json_decode($result);
echo $json;
die;

ainsi tu devrais voir ce que contient $json
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 26 Nov 2018 11:53

Hello merguez07, merci de ton aide.
merguez07 a écrit:Ce n'est pas anormal dans la mesure où, à cet endroit du code, ils ont besoin de faire appel a un bout de code déjà réalisé pour gérer les netatmo : Callback.php

Ha d'accord, c'est que ça doit être nécessaire, je te fais confiance là dessus.

merguez07 a écrit:essaye de rajouter les 2 lignes de codes suivantes après l'initialisation de la variable $json :

$json = sdk_json_decode($result);
echo $json;
die;

ainsi tu devrais voir ce que contient $json

Tu m'as perdu au moment où tu dis de rajouter ce bout de code après l'initialisation de la variable $json. :lol: Du coup, tu saurais me dire à quelle ligne la rajouter dans le script et dois-je supprimer mes modifications avant ? Ensuite, quel Xpath devrais-je tester ?
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 26 Nov 2018 12:17

merguez07 a écrit:tu saurais me dire à quelle ligne la rajouter dans le script


chez moi ça correspond aux ligne 382 et 383 mais il peut y a avoir une différence de numérotation avec toi car j'ai reformaté un peu le code chez moi pour y voir plus clair.

merguez07 a écrit: dois-je supprimer mes modifications avant ?


non tu changes rien à ton code à part le rajout des 2 lignes juste après la ligne
$json = sdk_json_decode($result);

merguez07 a écrit:Ensuite, quel Xpath devrais-je tester ?


non tu ne mets aucun Xpath. Sous le Xpath de ton périphérique tu dois avoir le lien "Tester". En cliquant dessus tu as une autre fenêtre qui s'ouvre. Dans cette fenêtre tu clique sur le bouton tester et tu dois voir le résultat du Json
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 26 Nov 2018 12:20

Ok, merci, je teste ça et te tiens au courant. J'espère qu'on arrivera à quelque chose, j'aimerai vraiment pouvoir logger les périodes de chauffe effectives de mon chauffage.
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 26 Nov 2018 12:43

Bon ben quand je teste, le seul résultat que me donne l'eedomus, c'est :
Code : Tout sélectionner
Array

Pour info, voici l'endroit dans le script où j'ai inséré ton bout de code. Je suis reparti du script original nest_oauth.php car j'ai l'impression que mes modifications génèrent des erreurs. Je les ajouterai de nouveau quand l'eedomus me donnera autre chose que simplement "Array" comme résultat.
Code : Tout sélectionner
   // Read the devices
   $thermostat_id = $_GET['thermostat_id'];
   $smoke_co_alarm_id = $_GET['smoke_co_alarm_id'];
   if($thermostat_id != '' && $thermostat_id != '*')
   {
      $url = 'https://developer-api.nest.com/devices/thermostats/'.$thermostat_id.'?auth='.$access_token;
      $result = httpQuery($url);
      $json = sdk_json_decode($result);
      $xml .= '<ambient_temperature_c>';
      $xml .= $json['ambient_temperature_c'];
      $xml .= '</ambient_temperature_c>';
      $xml .= '<target_temperature_c>';
      $xml .= $json['target_temperature_c'];
      $xml .= '</target_temperature_c>';
      $xml .= '<hvac_mode>';
      $xml .= $json['hvac_mode'];
      $xml .= '</hvac_mode>';
      $json = sdk_json_decode($result);
        echo $json;
        die;
      if ($json['target_temperature_c'] != '')
      {
         saveVariable('last_target_temperature_c', $json['target_temperature_c']);
      }
      
      if ($json['hvac_mode'] != '')
      {
         saveVariable('last_hvac_mode', $json['hvac_mode']);
      }
   }
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 26 Nov 2018 12:49

au temps pour moi

remplace le
echo $json;

par
print_r($json);
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 26 Nov 2018 12:54

Maintenant, ça me dit "La fonction print_r() n'est pas autorisée". ^^
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 26 Nov 2018 13:01

lol on va y arriver
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 26 Nov 2018 13:06

a la place de
print_r($json);
met
var_dump($json);
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 26 Nov 2018 13:17

Ok, merci, voilà la réponse de l'eedomus, sans mes modifications pour récupérer hvac_state et humidity (j'ai aussi masqué les infos sensibles) :

Code : Tout sélectionner
array(29) { ["locale"]=> string(5) "fr-FR" ["temperature_scale"]=> string(1) "C" ["is_using_emergency_heat"]=> bool(false) ["has_fan"]=> bool(false) ["software_version"]=> string(7) "5.9.1-6" ["has_leaf"]=> bool(false) ["device_id"]=> string(32) "XXXXXXX" ["name"]=> string(8) "Upstairs" ["can_heat"]=> bool(true) ["can_cool"]=> bool(false) ["target_temperature_c"]=> float(19) ["target_temperature_f"]=> int(66) ["target_temperature_high_c"]=> float(24) ["target_temperature_high_f"]=> int(75) ["target_temperature_low_c"]=> float(20) ["target_temperature_low_f"]=> int(68) ["ambient_temperature_c"]=> float(19) ["ambient_temperature_f"]=> int(66) ["away_temperature_high_c"]=> float(24) ["away_temperature_high_f"]=> int(76) ["away_temperature_low_c"]=> float(18) ["away_temperature_low_f"]=> int(65) ["structure_id"]=> string(54) "XXXXXXX" ["fan_timer_active"]=> bool(false) ["fan_timer_timeout"]=> string(24) "1970-01-01T00:00:00.000Z" ["hvac_mode"]=> string(4) "heat" ["name_long"]=> string(19) "Upstairs Thermostat" ["is_online"]=> bool(true) ["last_connection"]=> string(24) "2018-11-26T12:12:33.405Z" }
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 26 Nov 2018 14:02

bon ben voilà, on sait que les données ne sont pas dans le $json et donc c'est normal que tu ne puisses les faire remonter.

Après la question et pourquoi elles ne sont pas dans le $Json. Je n'ai pas trouvé d'explication en parcourant le net....
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 26 Nov 2018 14:21

Ok, merci beaucoup pour ton aide merguez07, c'est vraiment sympa de ta part, la communauté eedomus est vraiment excellente.

Je vais ouvrir un ticket au support pour leur demander une évolution du script, les deux variables "hvac_state" et "humidity" étant quand même deux données très importantes.

Je reviendrai faire un retour à ce sujet quand j'aurais eu une réponse du support (et surtout si j'en ai une).
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar merguez07 » 26 Nov 2018 14:53

honnêtement je ne pense pas que le problème soit au niveau d'Eedomus mais plutôt du coté de Nest.

En effet l'Eedomus fait bien la requête auprès de Nest et c'est Nest qui envoie les infos.
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 1444
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [HELP] Nest - Récupérer les valeurs hvac_state et humidi

Messagepar ElYoM » 26 Nov 2018 15:05

Pour ma part, j'ai un doute que cela vient de l'eedomus car l'API fait bien référence à des permissions spécifiques de lecture/écriture des données des appareils Nest. Le script n'ayant pas évolué depuis des années et l'API Nest ayant, elle, changé depuis, je pense que les permissions de ConnectedObject pour ce script ne sont plus réellement à jour. Dans tous les cas, je viens de soumettre ma demande au support, je verrai donc bien ce qu'il en est (j'ai un collègue développeur qui vient de m'appeler, il s'est amusé à requêter le thermostat Nest de son boulot à l'aide de Postman et il récupère bien les valeurs de "hvac_state" et "humidity", le contraire serait d'ailleurs étonnant puisque l'API le prévoit et le permet).
ElYoM
 
Messages : 204
Inscription : 08 Sep 2017

Suivant

Retour vers Objets connectés

Qui est en ligne ?

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