2020-10-10 16:06:06 +01:00

123 lines
3.2 KiB
JavaScript

const { Gpio } = require('onoff');
const hotwater = require('./modules/water')
const common = require('./libs/common')
const globalVars = require('./libs/globalVars')
const led = require('./libs/led')
const lcd = require('./libs/lcd')
const menu = require('./modules/mainMenu')
const logger = require('perfect-logger');
require('dotenv').config()
logger.initialize('houseStatus', {
logLevelFile: 0, // Log level for file
logLevelConsole: 0, // Log level for STDOUT/STDERR
logDirectory: 'logs/', // Log directory
// customBannerHeaders: 'This is a custom banner' // Custom Log Banner
});
async function main() {
lcd.clearScreen()
await lcd.intro()
menu.home()
const functionSwitch = new Gpio('17', 'in', 'both');
const appSwitch = new Gpio('23', 'in', 'both');
functionSwitch.watch(async (err, value) => {
if (err) {
logger.info('Error', err);
}
if (value === 1) {
switch (globalVars.currentPage) {
case 'water':
logger.info('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()
}
break;
case 'heating':
if (globalVars.heatingPageS === 1) {
clearInterval(globalVars.heatingPolling)
globalVars.heatingPageS = 2
} else {
clearInterval(globalVars.heatingPolling)
globalVars.heatingPageS = 1
}
await menu.heating(globalVars.heatingPageS)
break;
default:
break;
}
}
})
const arr = ['hassOcto', 'water', 'heating', 'pihole', 'capitalXtra', 'mainMenu']
arrLength = arr.length
let i = 0
appSwitch.watch(async (err, value) => {
if (err) {
logger.info('Error', err);
}
if (value === 1) {
switch (arr[i]) {
case 'water':
globalVars.currentPage = arr[i]
await menu.water()
break;
case 'mainMenu':
globalVars.currentPage = arr[i]
led.set('off')
await menu.home()
break;
case 'heating':
globalVars.currentPage = arr[i]
led.set('off')
await menu.heating()
break;
case 'pihole':
globalVars.currentPage = arr[i]
led.set('off')
await menu.piHole()
break;
case 'capitalXtra':
globalVars.currentPage = arr[i]
led.set('off')
await menu.capitalXtra()
break;
case 'hassOcto':
globalVars.currentPage = arr[i]
led.set('off')
await menu.hassOcto()
break;
default:
break;
}
logger.info(arr[i])
i = i + 1
if (i === arrLength) {
i = 0
}
}
})
}
process.stdin.resume();
process.on('SIGINT', function () {
lcd.clearScreen()
led.set('off')
process.exit(1)
});
setInterval(lcd.time, 55000)
main()