update weather every 30mins

This commit is contained in:
Karl Hudgell 2020-09-29 10:23:41 +01:00
parent c94bacb71e
commit 3871bf76db
6 changed files with 87 additions and 58 deletions

14
app.js
View File

@ -23,10 +23,12 @@ async function main() {
case 'water':
console.log('Water Switch')
if (globalVars.waterOn === 'true') {
globalVars.lastWaterRequest = ""
await common.request(0)
await common.pause(2000)
await menu.water()
} else {
globalVars.lastWaterRequest = ""
await common.request(1)
await common.pause(2000)
await menu.water()
@ -59,32 +61,20 @@ async function main() {
switch (arr[i]) {
case 'water':
globalVars.currentPage = arr[i]
clearInterval(globalVars.waterPolling)
clearInterval(globalVars.heatingPageSwitch)
clearInterval(globalVars.heatingPolling)
await menu.water()
break;
case 'mainMenu':
globalVars.currentPage = arr[i]
clearInterval(globalVars.waterPolling)
clearInterval(globalVars.heatingPageSwitch)
clearInterval(globalVars.heatingPolling)
led.set('off')
await menu.home()
break;
case 'heating':
globalVars.currentPage = arr[i]
clearInterval(globalVars.waterPolling)
clearInterval(globalVars.heatingPageSwitch)
clearInterval(globalVars.heatingPolling)
led.set('off')
await menu.heating()
break;
case 'pihole':
globalVars.currentPage = arr[i]
clearInterval(globalVars.waterPolling)
clearInterval(globalVars.heatingPageSwitch)
clearInterval(globalVars.heatingPolling)
led.set('off')
await menu.piHole()
break;

View File

@ -1,5 +1,7 @@
const got = require('got');
const moment = require('moment');
const globalVars = require('./globalVars')
module.exports = {
request: async (input) => {
@ -41,5 +43,16 @@ module.exports = {
let currentDate = moment(new Date(new Date().toUTCString()))
nextEvent = moment(nextEvent, "dddd, MMMM Do, YYYY LTS")
return currentDate.isAfter(nextEvent);
},
clearPolling: async () => {
await clearInterval(globalVars.waterPolling);
await clearInterval(globalVars.heatingPolling)
await clearInterval(globalVars.piHolePolling)
await clearInterval(globalVars.weatherPolling)
},
clearGlobalVars: async () => {
globalVars.lastHeatingRequest = ""
globalVars.lastWaterRequest = ""
globalVars.lastWeatherRequest = ""
}
}

View File

@ -6,9 +6,12 @@ class globalVariables {
heatingPolling = "";
currentPage = "";
heatingPageSwitch = "";
heatingPageSwitchActive = "";
heatingPageS = 1;
piHolePolling = "";
lastWeatherRequest = ""
lastWaterRequest = ""
lastHeatingRequest = ""
weatherPolling = ""
}
module.exports = new globalVariables();

View File

@ -9,21 +9,22 @@ var modules = requireDir('../modules');
module.exports = {
home: async () => {
clearInterval(globalVars.waterPolling);
clearInterval(globalVars.heatingPolling)
clearInterval(globalVars.piHolePolling)
common.clearPolling()
common.clearGlobalVars()
await screen.clearScreen()
await screen.heading('Main Menu')
await screen.heading('Home')
await screen.clearLine(2)
await screen.clearLine(3)
await screen.clearLine(4)
await screen.time()
await modules.weather.getStatus()
globalVars.weatherPolling = setInterval(() => {
modules.weather.getStatus()
}, 1800000);
},
water: async () => {
clearInterval(globalVars.waterPolling);
clearInterval(globalVars.heatingPolling)
clearInterval(globalVars.piHolePolling)
common.clearPolling()
common.clearGlobalVars()
await screen.clearScreen()
await screen.heading('Hot Water')
await screen.time()
@ -33,9 +34,8 @@ module.exports = {
}, 60000);
},
heating: async () => {
clearInterval(globalVars.waterPolling);
clearInterval(globalVars.heatingPolling)
clearInterval(globalVars.piHolePolling)
common.clearPolling()
common.clearGlobalVars()
await screen.clearScreen()
await screen.heading('Heating')
await screen.time()
@ -45,9 +45,8 @@ module.exports = {
}, 60000);
},
piHole: async () => {
clearInterval(globalVars.waterPolling);
clearInterval(globalVars.heatingPolling)
clearInterval(globalVars.piHolePolling)
common.clearPolling()
common.clearGlobalVars()
await screen.clearScreen()
await screen.heading('PiHole')
await screen.time()

View File

@ -26,34 +26,45 @@ module.exports = {
// Once we're done streaming the response, parse it as json.
response.on('end', async function () {
var data = JSON.parse(content);
let waterOn = data.waterOn
let waterdata = {
"waterOn": data.waterOn,
"time": await common.nextEvent(data.nextScheduleEventUtcTime),
}
globalVars.waterNextEvent = waterdata.time
var time = await common.nextEvent(data.nextScheduleEventUtcTime)
globalVars.waterNextEvent = time
let m = await common.time(data.nextScheduleEventUtcTime)
if (globalVars.waterOn === "" || globalVars.waterOn === "error") {
if (waterOn === 'true') {
globalVars.waterOn = waterOn
lcd.waterPageOne('Heating', globalVars.waterNextEvent)
led.set('red')
// let m = await common.time(data.nextScheduleEventUtcTime)
async function updateWater() {
if (globalVars.waterOn === "" || globalVars.waterOn === "error") {
if (waterdata.waterOn === 'true') {
globalVars.waterOn = waterdata.waterOn
lcd.waterPageOne('Heating', globalVars.waterNextEvent)
led.set('red')
} else {
globalVars.waterOn = waterdata.waterOn
lcd.waterPageOne('Not Heating', globalVars.waterNextEvent)
led.set('blue')
}
} else {
globalVars.waterOn = waterOn
lcd.waterPageOne('Not Heating', globalVars.waterNextEvent)
led.set('blue')
if (waterdata.waterOn === 'true') {
globalVars.waterOn = waterdata.waterOn
lcd.waterPageOne('Heating', globalVars.waterNextEvent)
led.set('red')
} else {
globalVars.waterOn = waterdata.waterOn
lcd.waterPageOne('Not Heating', globalVars.waterNextEvent)
led.set('blue')
}
}
}
if (globalVars.lastWaterRequest === "") {
console.log('initial load')
globalVars.lastWaterRequest = waterdata
updateWater()
} else if (globalVars.lastWaterRequest = waterdata) {
console.log('no update')
} else {
if (waterOn === 'true') {
globalVars.waterOn = waterOn
lcd.waterPageOne('Heating', globalVars.waterNextEvent)
led.set('red')
} else {
globalVars.waterOn = waterOn
lcd.waterPageOne('Not Heating', globalVars.waterNextEvent)
led.set('blue')
}
updateWater()
}
});
});

View File

@ -29,14 +29,27 @@ module.exports = {
// 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)
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() {
console.log('weather updated')
globalVars.lastWeatherRequest = weatherData
await lcd.weather(weatherData.city, weatherData.weatherDescription, weatherData.currentTemp, weatherData.highTemp, weatherData.lowTemp)
}
if (globalVars.lastWeatherRequest === "") {
console.log('initial load')
globalVars.lastWeatherRequest = weatherData
updateWeather()
} else if (globalVars.lastWeatherRequest = weatherData) {
console.log('no update')
} else {
updateWeather()
}
});
})
// Report errors