/* Pellet Stove Control Panel * Web Configuration Server * v0.0.0 by Skylar Grant * * TODOs: * Implement Express to make it easier * Add actual data into the responses */ // Modules const express = require('express'); const http = require('http'); const fs = require('fs'); const fn = require('./functions.js').functions; const { dbfn } = require('./functions.js'); // Grab the current configuration settings from the database to display var config; fn.commands.refreshConfig().then(newConfig => { config = newConfig.config; }); // Create the server const app = express(); const server = http.createServer(app); app.use(express.urlencoded()); // Our root directory for the public web files app.use(express.static(__dirname + '/../www/public')); // Our directory for views used to render the pages app.set('views', __dirname + '/../www/views'); // Set .html as the file extension for views app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); // A normal load of the root page app.get('/', (req, res) => { // Render the page, passing the config along for the front end to use res.render('index', { config: JSON.stringify(config) }); }); // A POST form submission to the root page app.post('/', (req, response) => { if (req.body.augerOn != undefined) { fn.commands.augerOn(); fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); return; } if (req.body.augerOff != undefined) { fn.commands.augerOff(); fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); return; } if (req.body.igniterOn != undefined) { fn.commands.igniterOn(); fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); return; } if (req.body.igniterOff != undefined) { fn.commands.igniterOff(); fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); return; } if (req.body.exhaustOn != undefined) { fn.commands.exhaustOn(); fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); return; } if (req.body.exhaustOff != undefined) { fn.commands.exhaustOff(); fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); return; } if (req.body.reload != undefined) { const updateAugerOffIntervalQuery = `UPDATE intervals SET value = '${2000 - req.body.feedRate}' WHERE key = 'auger_off'`; const updateAugerOnIntervalQuery = `UPDATE intervals SET value = '${req.body.feedRate}' WHERE key = 'auger_on'`; dbfn.run(updateAugerOffIntervalQuery).then(res => { if (process.env.DEBUG) console.log(`[${(Date.now() - config.timestamps.procStart)/1000}] I: Auger off interval updated: ${res.data.changes}`); dbfn.run(updateAugerOnIntervalQuery).then(res => { if (process.env.DEBUG) console.log(`[${(Date.now() - config.timestamps.procStart)/1000}] I: Auger on interval updated: ${res.data.changes}`); fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); }).catch(err => console.log(`E: ${err}`)); }).catch(err => console.log(`E: ${err}`)); return; } if (req.body.quit != undefined) { fs.appendFile('quit', ".", err => { if (err) console.error(err); }); fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); return; } fn.commands.refreshConfig().then(res => { config = res.config; response.render('index', { config: JSON.stringify(config) }); return; }); }); module.exports = { start: () => { server.listen(8080, "0.0.0.0"); } };