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 ] );
}
@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