Skip to content

Instantly share code, notes, and snippets.

@davidrea
Forked from beezly/gist:9b2de3749d687fdbff3f
Last active January 13, 2020 11:28
Show Gist options
  • Save davidrea/17ba3aebfa65c933daca to your computer and use it in GitHub Desktop.
Save davidrea/17ba3aebfa65c933daca to your computer and use it in GitHub Desktop.
Script to fetch Nest and outdoor temperature data and log to Google Sheets
function performLogin(email, password) {
var payload = {
"username" : email,
"password" : password
};
var options = {
"method" : "post",
"payload" : payload
};
var response = JSON.parse(UrlFetchApp.fetch('https://home.nest.com/user/login', options).getContentText());
if ('error' in response) {
throw "Invalid login credentials";
}
return response
}
function getData() {
var login_auth = performLogin('<YOUR NEST USERNAME>','<YOUR NEST PASSWORD>');
var headers = {
"Authorization" : 'Basic '+login_auth['access_token'],
"X-nl-user-id" : login_auth['userid'],
"X-nl-protocol-version" : '1',
'Accept-Language': 'en-us',
'Connection' : 'keep-alive',
'Accept' : '*/*',
};
var options = {
'headers' : headers
};
var request=UrlFetchApp.fetch(login_auth['urls']['transport_url']+'/v2/mobile/user.'+login_auth['userid'], options);
var result=JSON.parse(request.getContentText());
var structure_id = result['user'][login_auth['userid']]['structures'][0].split('.')[1]
var device_id = result['structure'][structure_id]['devices'][0].split('.')[1]
var current_temp = result["shared"][device_id]["current_temperature"];
var target_temp = result["shared"][device_id]["target_temperature"];
var humidity = result["device"][device_id]["current_humidity"]/100;
var auto_away = result["shared"][device_id]["auto_away"];
var heater_state = result["shared"][device_id]["hvac_heater_state"];
Logger.log("Current Temp: "+current_temp+", Target Temp: "+ target_temp +", Humidity: "+ humidity*100 + "%" );
var time = new Date();
var wxrequest=UrlFetchApp.fetch('http://api.openweathermap.org/data/2.5/weather?q=<YOUR ZIP CODE>');
var wxresult=JSON.parse(wxrequest.getContentText());
var outside_temp = (wxresult["main"]["temp"] - 273);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// Appends a new row with 3 columns to the bottom of the
// spreadsheet containing the values in the array
sheet.appendRow( [ time, current_temp, target_temp, outside_temp, humidity, heater_state, auto_away ] );
}
@N8-KC
Copy link

N8-KC commented May 18, 2015

Any ideas why im getting this error?

Start Function Error Message Trigger End
5/17/15 1:26 PM getData SyntaxError: Empty JSON string (line 37, file "Code") time-based 5/17/15 1:28 PM
5/17/15 1:41 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 1:42 PM
5/17/15 1:43 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 1:44 PM
5/17/15 1:56 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 1:57 PM
5/17/15 2:11 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 2:12 PM
5/17/15 2:26 PM getData Unexpected error: https://transport04-rts08-iad01.transport.home.nest.com:443/v2/mobile/user.44835 (line 36, file "Code") time-based 5/17/15 2:28 PM
5/17/15 2:41 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 2:42 PM
5/17/15 2:56 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 2:57 PM
5/17/15 3:11 PM getData SyntaxError: Empty JSON string (line 37, file "Code") time-based 5/17/15 3:13 PM
5/17/15 3:26 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 3:27 PM
5/17/15 3:41 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 3:42 PM
5/17/15 3:56 PM getData SyntaxError: Empty JSON string (line 37, file "Code") time-based 5/17/15 3:57 PM
5/17/15 4:11 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 4:12 PM
5/17/15 4:26 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 4:27 PM
5/17/15 4:41 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 4:42 PM
5/17/15 4:56 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 4:57 PM
5/17/15 5:11 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 5:12 PM
5/17/15 5:26 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 5:27 PM
5/17/15 5:41 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 5:42 PM
5/17/15 5:56 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 5:57 PM
5/17/15 6:26 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 6:27 PM
5/17/15 6:41 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 6:42 PM
5/17/15 6:56 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 6:57 PM
5/17/15 7:11 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 7:12 PM
5/17/15 7:35 PM getData Request failed for https://home.nest.com/user/login returned code 429. Truncated server response: Too many requests (use muteHttpExceptions option to examine full response) (line 12, file "Code") time-based 5/17/15 7:36 PM
5/17/15 7:56 PM getData SyntaxError: Empty JSON string (line 37, file "Code") time-based 5/17/15 7:58 PM
5/17/15 8:26 PM getData Request failed for https://home.nest.com/user/login returned code 429. Truncated server response: Too many requests (use muteHttpExceptions option to examine full response) (line 12, file "Code") time-based 5/17/15 8:27 PM
5/17/15 8:41 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 8:42 PM
5/17/15 8:56 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 8:57 PM
5/17/15 9:11 PM getData SyntaxError: Empty JSON string (line 37, file "Code") time-based 5/17/15 9:13 PM
5/17/15 9:26 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 9:27 PM
5/17/15 9:41 PM getData Unexpected error: https://home.nest.com/user/login (line 12, file "Code") time-based 5/17/15 9:42 PM
5/17/15 10:26 PM getData SyntaxError: Empty JSON string (line 12, file "Code") time-based 5/17/15 10:27 PM

@gobindbi
Copy link

gobindbi commented Jul 7, 2015

The outside temperature API is not pulling right data. Might be an issue with the API itself but the lat/long it pulled for my zipcode is wrong and so was the outside temp. any ideas?

@emily-pesce
Copy link

@gobindbi, if you're in the US just add a ",us" after your zip code. The code should be:

var wxrequest=UrlFetchApp.fetch('http://api.openweathermap.org/data/2.5/weather?q=,us');

This worked for me.

@georg3003
Copy link

Since October 2015
please add this

&APPID=
to openwheathtermap URL But you need to Sign Up to get an APPID

var wxrequest=UrlFetchApp.fetch('http://api.openweathermap.org/data/2.5/weather?q=,us');

it becomes this

var wxrequest=UrlFetchApp.fetch('http://api.openweathermap.org/data/2.5/weather?q=,us&APPID=XXXXXXXXXXXXXXXXXX');

This is because fetching live temp doesnt work any more with out APPID

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment