Compare commits

..

2 Commits

Author SHA1 Message Date
9e543989b8 Update config to match frontend 2024-08-21 21:16:48 -04:00
673aa2faf5 Logic and MQTT Basics added not tested 2024-08-21 21:01:55 -04:00
4 changed files with 73 additions and 36 deletions

View File

@ -1,7 +1,8 @@
# In Progress
1. ~~Strip to bones~~
2. Better commenting
2. Add startup and shutdown logic (start half implemented, not tested)
3. Add startup and shutdown logic (implemented, not tested)
4. Connect to MQTT
# Done
1. GPIO Interface

View File

@ -1,20 +1,13 @@
{
"mqtt": {
"address": "wd://broker-url:port",
"subscriptions": [
{
"name": "igniter",
"topic": "hestia/status/igniter"
},
{
"name": "exhaust",
"topic": "hestia/status/exhaust"
},
{
"name": "auger",
"topic": "hestia/status/auger"
"address": "wss://mqtt.3411.one",
"username": "hestia",
"password": "hestia",
"topics": {
"igniter": "hestia/status/igniter",
"exhaust": "hestia/status/exhaust",
"auger": "hestia/status/auger"
}
]
},
"pins": [
{

View File

@ -1,7 +1,7 @@
const dotenv = require('dotenv').config();
const debug = process.env.DEBUG === "TRUE";
const config = require('./config.json');
const { pins } = require('./config.json');
const { pins } = config;
const gpio = require('./VoidGPIO.js');
const pinMap = new Map();
@ -59,10 +59,9 @@ module.exports = {
});
break;
case 'IN':
gpio.readPin(pin.board, (err, state) => {
if (err) throw err;
gpio.readPin(pin.board).then(state => {
module.exports.log(`${pin.key} state: ${state}`);
});
}).catch(e => console.error(e));
default:
break;
}
@ -75,41 +74,77 @@ module.exports = {
return new Promise(async (resolve, reject) => {
// TODO: Check pin states?
// T_DONE: Set pins to default states
// Set pins to default states
module.exports.gpio.setDefaults().then(changes => {
module.exports.log(changes);
}).catch(e => console.error(e));
// T_DONE: Power on igniter
// Power on igniter
gpio.setPin(pinMap.igniter.board, 1).then(async () => {
// T_DONE: Wait for igniter preheat
// Wait for igniter preheat
await module.exports.sleep(config.power.start.exhaustDelay);
}).catch(e => console.error(e));
// T_DONE: Start exhaust
// Start exhaust
gpio.setPin(pinMap.exhaust.board, 1).then(async () => {
// T_DONE: Finish igniter preheat
// Finish igniter preheat
await module.exports.sleep(config.power.start.augerDelay);
}).catch(e => console.error(e));
// Check for vacuum
gpio.readPin(pinMap.vacuum.board).then(state => {
if (state === '0') {
// Power off exhaust
gpio.setPin(pinMap.exhaust.board, 0).then(() => {
// Report vacuum failure
reject(new Error('Vacuum failure.'));
return;
}).catch(e => console.error(e));
} else {
// Start auger
gpio.setPin(pinMap.auger.board, 1).then(async () => {
// Wait for fire
// Check for fire
await module.exports.sleep(config.power.start.fireCheckDelay);
// Power off igniter
gpio.setPin(pinMap.igniter.board, 0).then(() => {
// Check for fire on pof
gpio.readPin(pinMap.pof.board).then(state => {
if (state === '0') {
// Power off auger
gpio.setPin(pinMap.auger.board, 0).then(() => {
// Report failed ignition
reject(new Error('Failed ignition.'));
}).catch(e => console.error(e));
} else {
// Power off auger
gpio.setPin(pinMap.auger.board, 0).then(() => {
// Report successful ignition
resolve('Successful ignition.');
}).catch(e => console.error(e));
}
}).catch(e => console.error(e));
}).catch(e => console.error(e));
}).catch(e => console.error(e));
}
}).catch(e => console.error(e));
});
}
},
stop: {
init() {
return new Promise(async (resolve, reject) => {
// Power off auger
gpio.setPin(pinMap.auger.board, 0).then(async () => {
// Wait for exhaust shutdown delay
await module.exports.sleep(config.power.stop.exhaustDelay);
// Power off exhaust
gpio.setPin(pinMap.exhaust.board, 0).then(() => {
// Report successful shutdown
resolve('Successful shutdown.');
}).catch(e => console.error(e));
}).catch(e => console.error(e));
});
}
}
}

View File

@ -2,8 +2,16 @@
const gpio = require('./custom_modules/VoidGPIO.js');
const { pins } = require('./custom_modules/config.json');
const fn = require('./custom_modules/functions.js');
const { State, Communicator } = require('./custom_modules/HestiaClasses.js');
const psState = new State(config);
const comms = new Communicator(psState);
comms.init(psState, config);
fn.gpio.debugInit();
// Sensor detection loop
setInterval(() => {
for (const pin of pins) {
if (pin.mode === 'IN') {