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()