Skip to content

Instantly share code, notes, and snippets.

@beezly
Last active April 19, 2023 13:14
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save beezly/9b2de3749d687fdbff3f to your computer and use it in GitHub Desktop.
Save beezly/9b2de3749d687fdbff3f to your computer and use it in GitHub Desktop.
Log Nest temperatures into a Google Spreadsheet. Update the username and password values and create a resource trigger to call "getData" at regular intervals.
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 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, humidity, heater_state, auto_away ] );
}
@beezly
Copy link
Author

beezly commented Jan 14, 2020

I've never tried with a Google migrated account. It might need changing to get it working.

@davelalande
Copy link

I'm having the same issue with a "migrated to Google" account.

Thanks

@AHThomas
Copy link

Migrated accounts broke the login code used here. I don't have a fix, but here's a thread that discusses possible fixes/workarounds: gboudreau/nest-api#95

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