const http = require('http') const globalVars = require('../libs/globalVars') const led = require('../libs/led') const common = require('../libs/common') const lcd = require('../libs/lcd') const logger = require('perfect-logger'); const city = "Basingstoke" const appid = "ba24c6018ddd72041749018d0c1b1ef8" module.exports = { getStatus: () => { var rest_options = { host: 'api.openweathermap.org', port: 80, path: '/data/2.5/weather?q=' + city + '&appid=' + appid + '&units=metric', method: 'GET' }; logger.info('weather request') var request = http.request(rest_options, function (response) { var content = ""; // Handle data chunks response.on('data', function (chunk) { content += chunk; }); // Once we're done streaming the response, parse it as json. response.on('end', async function () { var data = JSON.parse(content); let weatherData = { "city": data.name, "weatherDescription": data.weather[0].description, "currentTemp": Math.floor(data.main.temp), "highTemp": Math.floor(data.main.temp_max), "lowTemp": Math.floor(data.main.temp_min) } async function updateWeather() { logger.info('weather updated') globalVars.lastWeatherRequest = weatherData await lcd.weather(weatherData.city, weatherData.weatherDescription, weatherData.currentTemp, weatherData.highTemp, weatherData.lowTemp) } if (globalVars.lastWeatherRequest === "") { logger.info('initial load') globalVars.lastWeatherRequest = weatherData updateWeather() } else if (JSON.stringify(globalVars.lastWeatherRequest) == JSON.stringify(weatherData)) { logger.info('no update') } else { updateWeather() } }); }) // Report errors request.on('error', function (error) { led.set('green') lcd.heatingStatus('Error No Data') globalVars.heatingOn = 'error' }); request.end(); } }