Advertisement
Guest User

Lambda function to set nest humidity

a guest
Nov 13th, 2018
273
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 =<zip code here>; //e.g. 22902
  9. const username =<nest-username-here>;
  10. const password =<nest-password-here>;
  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 info = {
  23.         currentOutsideTempF : currentOutsideTempF,
  24.         newTargetHumidity : calculateTargetHumidity(currentOutsideTempF)
  25.     };
  26.     loginAndSetTargetHumidity(info.newTargetHumidity);
  27. }
  28. function loginAndSetTargetHumidity(newTargetHumidity) {
  29.     nest.login(username, password, function (err, data) {
  30.         if (err) {
  31.             console.log(err.message);
  32.             process.exit(1);
  33.             return;
  34.         }
  35.         console.log('Logged in.');
  36.         nest.fetchStatus(function (data) {
  37.             for (var deviceId in data.device) {
  38.                 if (data.device.hasOwnProperty(deviceId)) {
  39.                     var device = data.device[deviceId];
  40.                     var currentTargetHumidity = device.target_humidity;
  41.                     //console.log("Current device: " + JSON.stringify(device));
  42.                     if (currentTargetHumidity !== newTargetHumidity) {
  43.                         nest.setHumidity(deviceId, newTargetHumidity);
  44.                         lambdaCallback(null, "Set humidity to " + newTargetHumidity);
  45.                     } else {
  46.                         lambdaCallback(null, "Target humidity is already correct at " + currentTargetHumidity);
  47.                     }
  48.                 }
  49.             }
  50.             var ids = nest.getDeviceIds();
  51.         });
  52.     });
  53. }
  54.  
  55. function calculateTargetHumidity(temp) {
  56.     if (temp < -20) {
  57.         return 15;
  58.     } else if (-20 < temp && temp < -10) {
  59.         return 20;
  60.     } else if (-10 < temp && temp < 0) {
  61.         return 25;
  62.     } else if (  0 < temp && temp < 10) {
  63.         return 30;
  64.     } else if ( 10 < temp && temp < 20) {
  65.         return 35;
  66.     } else if ( 20 < temp && temp < 40) {
  67.         return 40;
  68.     } else {
  69.         return 45;
  70.     }
  71. }
  72.  
  73. function convertCtoF(c) {
  74.     return c * 9 / 5 + 32;
  75. }
  76.  
  77. function getCurrentWeather(success) {
  78.     var options = {
  79.         hostname: 'home.nest.com',
  80.         port: 443,
  81.         path: '/api/0.1/weather/forecast/' + postalCode
  82.     };
  83.     doGet(options, success);
  84. }
  85.  
  86. function doGet(options, success) {
  87.     https.get(options, res => {
  88.         res.setEncoding("utf8");
  89.         let body = "";
  90.         res.on("data", data => {
  91.             body += data;
  92.         });
  93.         res.on("end", () => {
  94.             var result = JSON.parse(body);
  95.             success(result);  
  96.         });
  97.     });
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement