Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- const https = require('https');
- const queryString = require('querystring');
- const url = require('url');
- const nest = require('nest');
- const util = require('util');
- const postalCode = “<zip code here>“; //e.g. 22902
- const username = “<nest-username-here>”;
- const password = “<nest-password-here>”;
- var lambdaCallback = null;
- exports.handler = (event, context, callback) => {
- lambdaCallback = callback;
- getCurrentWeather(onGotCurrentWeather);
- };
- function onGotCurrentWeather(weather) {
- var currentOutsideTempC = weather.now.current_temperature;
- var currentOutsideTempF = convertCtoF(currentOutsideTempC);
- var info = {
- currentOutsideTempF : currentOutsideTempF,
- newTargetHumidity : calculateTargetHumidity(currentOutsideTempF)
- };
- loginAndSetTargetHumidity(info.newTargetHumidity);
- }
- function loginAndSetTargetHumidity(newTargetHumidity) {
- nest.login(username, password, function (err, data) {
- if (err) {
- console.log(err.message);
- process.exit(1);
- return;
- }
- console.log('Logged in.');
- nest.fetchStatus(function (data) {
- for (var deviceId in data.device) {
- if (data.device.hasOwnProperty(deviceId)) {
- var device = data.device[deviceId];
- var currentTargetHumidity = device.target_humidity;
- //console.log("Current device: " + JSON.stringify(device));
- if (currentTargetHumidity !== newTargetHumidity) {
- nest.setHumidity(deviceId, newTargetHumidity);
- lambdaCallback(null, "Set humidity to " + newTargetHumidity);
- } else {
- lambdaCallback(null, "Target humidity is already correct at " + currentTargetHumidity);
- }
- }
- }
- var ids = nest.getDeviceIds();
- });
- });
- }
- function calculateTargetHumidity(temp) {
- if (temp < -20) {
- return 15;
- } else if (-20 < temp && temp < -10) {
- return 20;
- } else if (-10 < temp && temp < 0) {
- return 25;
- } else if ( 0 < temp && temp < 10) {
- return 30;
- } else if ( 10 < temp && temp < 20) {
- return 35;
- } else if ( 20 < temp && temp < 40) {
- return 40;
- } else {
- return 45;
- }
- }
- function convertCtoF(c) {
- return c * 9 / 5 + 32;
- }
- function getCurrentWeather(success) {
- var options = {
- hostname: 'home.nest.com',
- port: 443,
- path: '/api/0.1/weather/forecast/' + postalCode
- };
- doGet(options, success);
- }
- function doGet(options, success) {
- https.get(options, res => {
- res.setEncoding("utf8");
- let body = "";
- res.on("data", data => {
- body += data;
- });
- res.on("end", () => {
- var result = JSON.parse(body);
- success(result);
- });
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement