Help with PHP Script!

The Netatmo API is a set of webservices allowing developers and third parties to access Netatmo device's data.
Post Reply
tslagle13
Posts: 3
Joined: 26 Dec 2012, 22:25

Help with PHP Script!

Post by tslagle13 » 08 May 2014, 16:16

Hey all,

I've had a PHP script running for quite some time and it stopped working recently. Well not fully, but it has stopped reporting the correct tempurature. It only reports 32 degrees for the temprature now. Without fail the tempurate will be 32 degrees when i convert it to farenheight. Not sure what happened. I have looked through the code and i am quite positive i am following the API as best i can tell. Im not a great developer but i can hold my own. Can someone take a look at my code and see if you can find an issue with it?

Code: Select all

#!/usr/bin/php
<?php
date_default_timezone_set('UTC');
/**
 * oAuth settings from http://dev.netatmo.com/dev/listapps
 */
define('APP_ID', '');
define('APP_SECRET', '');
define('USERNAME', '');
define('PASSWORD', '');
define('TOKEN_URL', 'https://api.netatmo.net/oauth2/token');
define('DEVICELIST_URL', 'https://api.netatmo.net/api/devicelist');
 
/**
 * Station ID from http://www.wunderground.com/wxstation/signup.html
 */
define('STATION_URL', 'http://weatherstation.wunderground.com/weatherstation/updateweatherstation.php');
define('STATION_ID', '');
define('STATION_PASSWORD', '');
define('DEBUG', 1);
 
if (APP_ID == '' || APP_SECRET == '' || USERNAME == '' || PASSWORD == '' || STATION_ID == '' || STATION_PASSWORD == '') {
  fwrite(STDERR, "APP_ID, APP_SECRET, USERNAME, PASSWORD, STATION_ID, STATION_PASSWORD cannot be empty.\n");
  exit(1);
}
 
$opts = array(
  'http' => array(
    'method' => 'POST',
    'header' => 'Content-type: application/x-www-form-urlencoded',
    'content' => http_build_query(array(
      'grant_type' => "password",
      'client_id' => APP_ID,
      'client_secret' => APP_SECRET,
      'username' => USERNAME,
      'password' => PASSWORD,
      'scope' => read_station	
    ))
  )
);
if (DEBUG) print_r($opts);
 
$context = stream_context_create($opts);
$response = file_get_contents(TOKEN_URL, FALSE, $context);
$response_json = json_decode($response, TRUE);
if (DEBUG) print_r($response_json);
 
if (!$response || empty($response_json['access_token'])) {
  fwrite(STDERR, "Couldn't retrieve the access_token. Please check your username and password.\n");
  exit(1);
}
 
$access_token = $response_json['access_token'];
$device_list = json_decode(file_get_contents(DEVICELIST_URL . '?access_token=' . $access_token));
if (!$device_list || sizeof($device_list->body->devices) == 0) {
  fwrite(STDERR, "Couldn't find any devices\n");
  exit(1);
}
 
if (sizeof($device_list->body->modules) == 0 || empty($device_list->body->modules[0]->_id)) {
  fwrite(STDERR, "Couldn't find outdoor devices\n");
  exit(1);
}
 
$indoor_id = $device_list->body->devices[0]->_id;
$outdoor_id = $device_list->body->modules[0]->_id;
 
$last_data = $device_list->body->devices[0]->last_data_store;
if (DEBUG) print_r($last_data);
 
 
$params = array(
  'ID' => STATION_ID,
  'PASSWORD' => STATION_PASSWORD,
  'action' => 'updateraw',
  'dateutc' => date("Y-m-d H:i:s",$last_data->$outdoor_id->K),
  'humidity' => $last_data->$outdoor_id->b,
  'temp' => $last_data->$outdoor_id->a,
  'baromhPa' => $last_data->$indoor_id->e,
  'indoortemp' => $last_data->$indoor_id->a,
  'indoorhumidity' => $last_data->$indoor_id->b,
  'softwaretype' => 'Netatmo'
);
 
// calculate dew point using temperature and humidity (optional)
// source: http://www.aprweather.com/pages/calc.htm
$params['dewpt'] = ($params['temp'] - (14.55 + 0.114 * $params['temp']) * (1 - (0.01 * $params['humidity'])) - pow((2.5 + 0.007 * $params['temp']) * (1 - (0.01 * $params['humidity'])), 3) - (15.9 + 0.117 * $params['temp']) * pow(1 - (0.01 * $params['humidity']), 14));
 
// conversion to F
$params['tempf'] = $params['temp'] * 9 / 5 + 32;
$params['dewptf'] = $params['dewpt'] * 9 / 5 + 32;
$params['indoortempf'] = $params['indoortemp'] * 9 / 5 + 32;
$params['baromin'] = $params['baromhPa'] * 0.0295299830714;
// remove SI after conversion
unset($params['temp'],$params['dewpt'],$params['indoortemp'],$params['baromhPa']);
ksort($params);
if (DEBUG) print_r($params);
 
$response = file_get_contents(STATION_URL . '?' . http_build_query($params));
if (DEBUG) print $response;
 
 
?>
Thanks in advance for any help you can provide!

iTuilerie
Posts: 32
Joined: 12 Oct 2012, 01:25
Location: Troyes, France
Contact:

Re: Help with PHP Script!

Post by iTuilerie » 25 May 2014, 18:03

Do you have had new module or rain gauge recently or remove (change) module

Because they change the order of module

Post Reply

Return to “Netatmo API”