diff --git a/libs/lcd.js b/libs/lcd.js index 64b96f0..aad14b0 100644 --- a/libs/lcd.js +++ b/libs/lcd.js @@ -92,5 +92,10 @@ module.exports = { piHolePage: async (domainsBeingBlocked, queriesToday, queriesBlockedToday, percentageBlocked) => { lcd.printLineSync(2, 'Queries=' + commaNumber(queriesToday)) lcd.printLineSync(3, 'Blocked=' + commaNumber(queriesBlockedToday) + ' (' + percentageBlocked.toFixed() + '%)') + }, + weather: async (city, weatherDescription, currentTemp, highTemp, lowTemp) => { + weatherDescription = weatherDescription.replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase()); + lcd.printLineSync(2, weatherDescription + ' - ' + currentTemp + '\xDF') + lcd.printLineSync(3, 'High-' + highTemp + '\xDF' + ' / ' + 'Low-' + lowTemp + '\xDF') } } \ No newline at end of file diff --git a/modules/mainMenu.js b/modules/mainMenu.js index 66fe1d5..33b43a7 100644 --- a/modules/mainMenu.js +++ b/modules/mainMenu.js @@ -18,6 +18,7 @@ module.exports = { await screen.clearLine(3) await screen.clearLine(4) await screen.time() + await modules.weather.getStatus() }, water: async () => { clearInterval(globalVars.waterPolling); @@ -54,5 +55,5 @@ module.exports = { globalVars.piHolePolling = setInterval(() => { modules.pihole.getStatus() }, 30000); - } + }, } \ No newline at end of file diff --git a/modules/weather.js b/modules/weather.js new file mode 100644 index 0000000..8d11a95 --- /dev/null +++ b/modules/weather.js @@ -0,0 +1,50 @@ +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 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' + }; + let t = new Date().toUTCString() + console.log(t + ' piHole 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 city = data.name + let weatherDescription = data.weather[0].description + let currentTemp = Math.floor(data.main.temp) + let highTemp = Math.floor(data.main.temp_max) + let lowTemp = Math.floor(data.main.temp_min) + + await lcd.weather(city, weatherDescription, currentTemp, highTemp, lowTemp) + + }); + }) + // Report errors + request.on('error', function (error) { + led.set('green') + lcd.heatingStatus('Error No Data') + globalVars.heatingOn = 'error' + }); + request.end(); + } +} \ No newline at end of file