Advertisement
Guest User

Lambda function to set nest humidity

a guest
Nov 15th, 2018
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2. const https = require('https');
  3. const queryString = require('querystring');
  4. const url = require('url');
  5. const nest = require('nest');
  6. const util = require('util');
  7.  
  8. const postalCode = "22902";
  9. const username = "bhspencer@gmail.com";
  10. const password = "youcanthack1T@";
  11.  
  12. var lambdaCallback = null;
  13.  
  14. exports.handler = (event, context, callback) => {
  15.     lambdaCallback = callback;
  16.     getCurrentWeather(onGotCurrentWeather);
  17. };
  18.  
  19. function onGotCurrentWeather(weather) {
  20.     var currentOutsideTempC = weather.now.current_temperature;
  21.     var currentOutsideTempF = convertCtoF(currentOutsideTempC);
  22.     var newTargetHumidity = calculateTargetHumidity(currentOutsideTempF);
  23.     loginAndSetTargetHumidity(newTargetHumidity);
  24. }
  25. function loginAndSetTargetHumidity(newTargetHumidity) {
  26.     nest.login(username, password, function (err, data) {
  27.         if (err) {
  28.             console.log(err.message);
  29.             process.exit(1);
  30.             return;
  31.         }
  32.         console.log('Logged in.');
  33.         nest.fetchStatus(function (data) {
  34.             for (var deviceId in data.device) {
  35.                 if (data.device.hasOwnProperty(deviceId)) {
  36.                     var device = data.device[deviceId];
  37.                     var currentTargetHumidity = device.target_humidity;
  38.                     //console.log("Current device: " + JSON.stringify(device));
  39.                     if (currentTargetHumidity !== newTargetHumidity) {
  40.                         nest.setHumidity(deviceId, newTargetHumidity);
  41.                         lambdaCallback(null, "Set humidity to " + newTargetHumidity);
  42.                     } else {
  43.                         lambdaCallback(null, "Target humidity is already correct at " + currentTargetHumidity);
  44.                     }
  45.                 }
  46.             }
  47.         });
  48.     });
  49. }
  50.  
  51. function calculateTargetHumidity(temp) {
  52.     if (temp < -20) {
  53.         return 15;
  54.     } else if (-20 <= temp && temp < -10) {
  55.         return 20;
  56.     } else if (-10 <= temp && temp < 0) {
  57.         return 25;
  58.     } else if (  0 <= temp && temp < 10) {
  59.         return 30;
  60.     } else if ( 10 <= temp && temp < 20) {
  61.         return 35;
  62.     } else if ( 20 <= temp && temp < 40) {
  63.         return 40;
  64.     } else {
  65.         return 45;
  66.     }
  67. }
  68.  
  69. function convertCtoF(c) {
  70.     return c * 9 / 5 + 32;
  71. }
  72.  
  73. function getCurrentWeather(success) {
  74.     var options = {
  75.         hostname: 'home.nest.com',
  76.         port: 443,
  77.         path: '/api/0.1/weather/forecast/' + postalCode
  78.     };
  79.     doGet(options, success);
  80. }
  81.  
  82. function doGet(options, success) {
  83.     https.get(options, res => {
  84.         res.setEncoding("utf8");
  85.         let body = "";
  86.         res.on("data", data => {
  87.             body += data;
  88.         });
  89.         res.on("end", () => {
  90.             var result = JSON.parse(body);
  91.             success(result);  
  92.         });
  93.     });
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement