Compare commits
2 Commits
459008d372
...
9e543989b8
Author | SHA1 | Date | |
---|---|---|---|
9e543989b8 | |||
673aa2faf5 |
3
TODO.md
3
TODO.md
@ -1,7 +1,8 @@
|
|||||||
# In Progress
|
# In Progress
|
||||||
1. ~~Strip to bones~~
|
1. ~~Strip to bones~~
|
||||||
2. Better commenting
|
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
|
# Done
|
||||||
1. GPIO Interface
|
1. GPIO Interface
|
||||||
|
@ -1,20 +1,13 @@
|
|||||||
{
|
{
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"address": "wd://broker-url:port",
|
"address": "wss://mqtt.3411.one",
|
||||||
"subscriptions": [
|
"username": "hestia",
|
||||||
{
|
"password": "hestia",
|
||||||
"name": "igniter",
|
"topics": {
|
||||||
"topic": "hestia/status/igniter"
|
"igniter": "hestia/status/igniter",
|
||||||
},
|
"exhaust": "hestia/status/exhaust",
|
||||||
{
|
"auger": "hestia/status/auger"
|
||||||
"name": "exhaust",
|
|
||||||
"topic": "hestia/status/exhaust"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "auger",
|
|
||||||
"topic": "hestia/status/auger"
|
|
||||||
}
|
}
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"pins": [
|
"pins": [
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
const dotenv = require('dotenv').config();
|
const dotenv = require('dotenv').config();
|
||||||
const debug = process.env.DEBUG === "TRUE";
|
const debug = process.env.DEBUG === "TRUE";
|
||||||
const config = require('./config.json');
|
const config = require('./config.json');
|
||||||
const { pins } = require('./config.json');
|
const { pins } = config;
|
||||||
const gpio = require('./VoidGPIO.js');
|
const gpio = require('./VoidGPIO.js');
|
||||||
const pinMap = new Map();
|
const pinMap = new Map();
|
||||||
|
|
||||||
@ -59,10 +59,9 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 'IN':
|
case 'IN':
|
||||||
gpio.readPin(pin.board, (err, state) => {
|
gpio.readPin(pin.board).then(state => {
|
||||||
if (err) throw err;
|
|
||||||
module.exports.log(`${pin.key} state: ${state}`);
|
module.exports.log(`${pin.key} state: ${state}`);
|
||||||
});
|
}).catch(e => console.error(e));
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -75,41 +74,77 @@ module.exports = {
|
|||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
// TODO: Check pin states?
|
// TODO: Check pin states?
|
||||||
|
|
||||||
// T_DONE: Set pins to default states
|
// Set pins to default states
|
||||||
module.exports.gpio.setDefaults().then(changes => {
|
module.exports.gpio.setDefaults().then(changes => {
|
||||||
module.exports.log(changes);
|
module.exports.log(changes);
|
||||||
}).catch(e => console.error(e));
|
}).catch(e => console.error(e));
|
||||||
|
|
||||||
// T_DONE: Power on igniter
|
// Power on igniter
|
||||||
gpio.setPin(pinMap.igniter.board, 1).then(async () => {
|
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);
|
await module.exports.sleep(config.power.start.exhaustDelay);
|
||||||
}).catch(e => console.error(e));
|
}).catch(e => console.error(e));
|
||||||
|
|
||||||
// T_DONE: Start exhaust
|
// Start exhaust
|
||||||
gpio.setPin(pinMap.exhaust.board, 1).then(async () => {
|
gpio.setPin(pinMap.exhaust.board, 1).then(async () => {
|
||||||
// T_DONE: Finish igniter preheat
|
// Finish igniter preheat
|
||||||
await module.exports.sleep(config.power.start.augerDelay);
|
await module.exports.sleep(config.power.start.augerDelay);
|
||||||
}).catch(e => console.error(e));
|
}).catch(e => console.error(e));
|
||||||
|
|
||||||
// Check for vacuum
|
// 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
|
// Start auger
|
||||||
|
gpio.setPin(pinMap.auger.board, 1).then(async () => {
|
||||||
// Wait for fire
|
// Wait for fire
|
||||||
|
await module.exports.sleep(config.power.start.fireCheckDelay);
|
||||||
// Check for fire
|
|
||||||
|
|
||||||
// Power off igniter
|
// 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
|
// 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: {
|
stop: {
|
||||||
init() {
|
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));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,16 @@
|
|||||||
const gpio = require('./custom_modules/VoidGPIO.js');
|
const gpio = require('./custom_modules/VoidGPIO.js');
|
||||||
const { pins } = require('./custom_modules/config.json');
|
const { pins } = require('./custom_modules/config.json');
|
||||||
const fn = require('./custom_modules/functions.js');
|
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();
|
fn.gpio.debugInit();
|
||||||
|
|
||||||
|
// Sensor detection loop
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
for (const pin of pins) {
|
for (const pin of pins) {
|
||||||
if (pin.mode === 'IN') {
|
if (pin.mode === 'IN') {
|
||||||
|
Loading…
Reference in New Issue
Block a user