Script Netatmo

Tous les webservices qui vont agrémentés votre installation de domotique grâce à une connexion Internet.

Script Netatmo

Messagede Paqueuc » 01 Juin 2014, 22:35

Bonjour,

Utilisateur d'une box Loxone, je cherche à utiliser le script Netatmo de Cédric LOCQUENEUX (voir : http://maison-et-domotique.com/books/sc ... domotique/) hébergé, soit chez lui, soit chez moi sur un NAS Synology.

J'ai un problème de "fiabilité" de la fréquence de ce script. Il interroge toutes les 10 mn, soit l'adresse :

http://scripts.maison-et-domotique.com/ ... n_password

soit l'adresse :

http://adresse_IP_locale_Synology/scrip ... n_password

9 fois sur 10, je récupère ça :

Code: Tout sélectionner
<?xml version="1.0" encoding="utf8" ?><netatmo><temperature_interieure></temperature_interieure><co2></co2><humidite_interieure></humidite_interieure><pression></pression><niveau_sonore></niveau_sonore><temperature_exterieure></temperature_exterieure><humidite_exterieure></humidite_exterieure></netatmo>


Inexploitable.

et 1 fois sur 10, je récupère ça :

Code: Tout sélectionner
<?xml version="1.0" encoding="utf8" ?><netatmo><temperature_interieure>22.1</temperature_interieure><co2>879</co2><humidite_interieure>67</humidite_interieure><pression>1020.3</pression><niveau_sonore>41</niveau_sonore><temperature_exterieure>13.2</temperature_exterieure><humidite_exterieure>75</humidite_exterieure></netatmo>


Exploitable.

Questionné sur un éventuel problème de quota (voir http://forum.netatmo.com/viewtopic.php?f=5&t=2348&start=10) limitant l'accès aux requêtes des API externes à leurs serveurs, Netatmo m'a répondu 2 choses :

-Le script de Cédric comprend plus de modules (3 modules additionnels) que je n'en ai réellement (le kit de base intérieur / extérieur + 1 module additionnel). On me demande d'analyser le retour d'erreurs du serveur pour débugger. Peut-être cela serait-il du aux modules manquants ?

-Et un laconique : "Merci de contacter le créateur de script, Il n’y a aucun problème de limitation."

Je ne suis pas développeur PHP :cry: et je ne comprends pas pourquoi cela fonctionne seulement parfois.

Connaissez vous ce problème de fiabilité ?

Ci-dessous, je copie / colle le script de Cédric qui est hébergé sur mon NAS. Y voyez vous une amélioration à apporter pour fiabiliser la requête ?

Code: Tout sélectionner
<?php

// Script développé par Cédric Locqueneux. http://maison-et-domotique.com
// Synthase: http://scripts.maison-et-domotique.com/netatmo.php?login=mon_mail&password=mon_MOTDEPASSE

$password=$_GET['password'];
$username=$_GET['login'];

if (isset($_GET['box']))
{
    $box=$_GET['box'];
}

$app_id = 'YYYYYYYYYYYYY';
$app_secret = 'ZZZZZZZZZZZZZZZZZZZZZ';

$token_url = "https://api.netatmo.net/oauth2/token";
$postdata = http_build_query(
        array(
            'grant_type' => "password",
            'client_id' => $app_id,
            'client_secret' => $app_secret,
            'username' => $username,
            'password' => $password
    )
);

$opts = array('http' =>
   array(
      'method'  => 'POST',
      'header'  => 'Content-type: application/x-www-form-urlencoded',
      'content' => $postdata
   )
);

$context  = stream_context_create($opts);
$response = file_get_contents($token_url, false, $context);

$params = null;
$params = json_decode($response, true);
$api_url = "https://api.netatmo.net/api/getuser?access_token=" . $params['access_token'];
$requete = @file_get_contents($api_url);

$url_devices = "https://api.netatmo.net/api/devicelist?access_token=" .  $params['access_token'];
$resulat_device = @file_get_contents($url_devices);   

$json_devices = json_decode($resulat_device,true);
$module_interne = $json_devices["body"]["devices"][0]["_id"];
$module_externe = $json_devices["body"]["modules"][0]["_id"];
$module_additionnel1 = $json_devices["body"]["modules"][1]["_id"];
$module_additionnel2 = $json_devices["body"]["modules"][2]["_id"];
$module_additionnel3 = $json_devices["body"]["modules"][3]["_id"];

$url_mesures_internes = "https://api.netatmo.net/api/getmeasure?access_token=" .  $params['access_token'] . "&device_id=" . $module_interne . "&scale=max&type=Temperature,CO2,Humidity,Pressure,Noise&date_end=last";
$mesures_internes = @file_get_contents($url_mesures_internes);

$url_mesures_externes = "https://api.netatmo.net/api/getmeasure?access_token=" .  $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_externe . "&scale=max&type=Temperature,Humidity&date_end=last";
$mesures_externes = @file_get_contents($url_mesures_externes);

if (!empty($module_additionnel1)) {
   $url_mesures_additionnel1 = "https://api.netatmo.net/api/getmeasure?access_token=" .  $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_additionnel1 . "&scale=max&type=Temperature,CO2,Humidity&date_end=last";
   $mesures_additionnel1 = file_get_contents($url_mesures_additionnel1);
   $json_mesures_additionnel1 = json_decode($mesures_additionnel1, true);
   $temperature_additionnel1 = $json_mesures_additionnel1["body"][0]["value"][0][0];
   $co2_additionnel1 = $json_mesures_additionnel1["body"][0]["value"][0][1];
   $humidite_additionnel1 = $json_mesures_additionnel1["body"][0]["value"][0][2];
}
if (!empty($module_additionnel2)) {
   $url_mesures_additionnel2 = "https://api.netatmo.net/api/getmeasure?access_token=" .  $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_additionnel2 .  "&scale=max&type=Temperature,CO2,Humidity&date_end=last";
   $mesures_additionnel2 = file_get_contents($url_mesures_additionnel2);
   $json_mesures_additionnel2 = json_decode($mesures_additionnel2, true);
   $temperature_additionnel2 = $json_mesures_additionnel2["body"][0]["value"][0][0];
   $co2_additionnel2 = $json_mesures_additionnel2["body"][0]["value"][0][1];
   $humidite_additionnel2 = $json_mesures_additionnel2["body"][0]["value"][0][2];
}
if (!empty($module_additionnel3)) {
   $url_mesures_additionnel3 = "https://api.netatmo.net/api/getmeasure?access_token=" .  $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_additionnel3 .  "&scale=max&type=Temperature,CO2,Humidity&date_end=last";
   $mesures_additionnel3 = file_get_contents($url_mesures_additionnel3);   
   $json_mesures_additionnel3 = json_decode($mesures_additionnel3, true);
   $temperature_additionnel3 = $json_mesures_additionnel3["body"][0]["value"][0][0];
   $co2_additionnel3 = $json_mesures_additionnel3["body"][0]["value"][0][1];
   $humidite_additionnel3 = $json_mesures_additionnel3["body"][0]["value"][0][2];
}   

$json_mesures_internes = json_decode($mesures_internes, true);
$json_mesures_externes = json_decode($mesures_externes, true);

$temperature_interne = $json_mesures_internes["body"][0]["value"][0][0];
$co2 = $json_mesures_internes["body"][0]["value"][0][1];
$humidite_interne = $json_mesures_internes["body"][0]["value"][0][2];
$pression = $json_mesures_internes["body"][0]["value"][0][3];
$bruit = $json_mesures_internes["body"][0]["value"][0][4];
$temperature_externe = $json_mesures_externes["body"][0]["value"][0][0];
$humidite_externe = $json_mesures_externes["body"][0]["value"][0][1];

if (isset($_GET['box']))
{
    switch ($box)
   {
   case 'zibase' :
      $temperature_interne = $temperature_interne * 10;
      $pression = $pression * 10;
      $temperature_externe = $temperature_externe * 10;
      if (!empty($module_additionnel1)) {
         $temperature_additionnel1 = $temperature_additionnel1 * 10;
      }
      if (!empty($module_additionnel2)) {
         $temperature_additionnel2 = $temperature_additionnel2 * 10;
      }
      if (!empty($module_additionnel3)) {
         $temperature_additionnel3 = $temperature_additionnel3 * 10;
      }
     break;
   case 'eedomus' :
     break;
   case 'vera' :
     break;
   }
}

   echo '<?xml version="1.0" encoding="utf8" ?>';
   echo "<netatmo>";
   echo "<temperature_interieure>" . $temperature_interne  . "</temperature_interieure>";
   echo "<co2>" . $co2  . "</co2>";
   echo "<humidite_interieure>" . $humidite_interne  . "</humidite_interieure>";
   echo "<pression>" . $pression  . "</pression>";
   echo "<niveau_sonore>" . $bruit  . "</niveau_sonore>";
   echo "<temperature_exterieure>" . $temperature_externe  . "</temperature_exterieure>";   
   echo "<humidite_exterieure>" . $humidite_externe  . "</humidite_exterieure>";
   if (!empty($module_additionnel1)) {
      echo "<temperature_additionnel1>" . $temperature_additionnel1  . "</temperature_additionnel1>";
      echo "<co2_additionnel1>" . $co2_additionnel1  . "</co2_additionnel1>";
      echo "<humidite_additionnel1>" . $humidite_additionnel1  . "</humidite_additionnel1>";
   }
   if (!empty($module_additionnel2)) {
      echo "<temperature_additionnel2>" . $temperature_additionnel2  . "</temperature_additionnel2>";
      echo "<co2_additionnel2>" . $co2_additionnel2  . "</co2_additionnel2>";
      echo "<humidite_additionnel2>" . $humidite_additionnel2  . "</humidite_additionnel2>";
   }
   if (!empty($module_additionnel3)) {
      echo "<temperature_additionnel3>" . $temperature_additionnel3  . "</temperature_additionnel3>";
      echo "<co2_additionnel3>" . $co2_additionnel3  . "</co2_additionnel3>";
      echo "<humidite_additionnel3>" . $humidite_additionnel3  . "</humidite_additionnel3>";   
   }
   echo "</netatmo>";
   
?>


Merci pour votre aide.
Paqueuc
P'tit Guru de domotique
 
Messages: 78
Inscription: 05 Jan 2013, 00:34

Re: Script Netatmo

Messagede domotics » 02 Juin 2014, 06:59

Le script s'execute mĂŞme si l'url netatmo ne repond pas.
Il faudrait mettre une condition pour voir si ca ne repond pas pour un quota ou tout simplement car l'url est parfois trop longue à répondre.
cdt
Domotics
Mon Skype : mr.domotics - Contactez moi pour une démo, des réponses à vos questions, ...
Mon Installation : Eedomus, Zwave, Oregon, Sonos, EnOcean, Chacon, Raspberry Pi, IPX800, WES, RFXTRX, Nas Synology et Cams IP
Mon Conseil : La domotique doit toujours rester simple et demander un minimum de maintenance; Pensez aux autres utilisateurs de la maison ...
Ma Chaine Youtube : https://www.youtube.com/user/tteladomotique/?sub_confirmation=1

Domotics propose ses services via sa société de conseils http://www.id2domotique.com et sa boutique http://laboutiquededomotique.com
Avatar de l’utilisateur
domotics
Administrateur
 
Messages: 5114
Inscription: 15 AoĂ» 2003, 14:38
Localisation: Toulouse

Re: Script Netatmo

Messagede Paqueuc » 03 Juin 2014, 22:27

Merci Domotics.

Mais concrètement, comment écris-je cela dans le script STP ? Désolé, un peu boulet en programmation PHP. :?

Si d'autres ont des idées, n'hésitez pas... Il va faire chaud cette fin de semaine et je vais me faire gronder par Madame si ça ne fonctionne pas (pas d'ombrage automatique = maison trop chaude). :wink:

Merci.
Paqueuc
P'tit Guru de domotique
 
Messages: 78
Inscription: 05 Jan 2013, 00:34

Re: Script Netatmo

Messagede Paqueuc » 08 Juin 2014, 18:14

Bonjour,

Netatmo vient d'envoyer un mail évoquant un changement d'interrogation des API (tout le monde demande la même chose, toutes les dernières données actualisées... Autant ne le faire que via une seule requête).

Y-a-t-il des personnes qui seraient intéressées à re-développer un script ultra simple qui met à disposition ces données dans un fichier XML et qui tiendrait compte de ce nouveau "dashboard_data" à la place de la méthode ci-dessus SVP ? :wink:

Désolé, je suis vraiment mauvais en PHP et mes pauvres tests ne me donnent pas de solutions. :(

Dear developpers,

This short email to let you know that we have recently updated our API.
We have introducted a new field in the devicelist method : dashboard_data
This field contains all data (except forecast) that you could find on our weather station application dashboard.
This field is present in every devices and modules returned from the devicelist method.

If you were using the undocumented last_data_store field, your can update your application with the dashboard_data field.
The last_data_stored will be still returned until July the 15th.

If you are using getmeasure in order to retrieve your dashboard data you can also update your application.
It will be faster and you will consume less API requests.

Thank you for your attention,


Merci.
Paqueuc
P'tit Guru de domotique
 
Messages: 78
Inscription: 05 Jan 2013, 00:34


Retourner vers Les Webservices pour la domotique : Météo, Traffic routier, ...

Qui est en ligne

Utilisateurs parcourant ce forum: MSN [Bot] et 2 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique


cron