Blank mostly
This commit is contained in:
parent
c7ffc0c296
commit
288d19e95b
15
package.json
Normal file
15
package.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "hestia",
|
||||
"version": "1.0.0",
|
||||
"description": "Hestia Pellet Stove Controller by Skylar Grant",
|
||||
"main": "src/main.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://git.vfsh.dev/voidf1sh/hestia"
|
||||
},
|
||||
"author": "Skylar Grant",
|
||||
"license": "MIT"
|
||||
}
|
@ -1,71 +0,0 @@
|
||||
export class State {
|
||||
constructor(config) {
|
||||
config.mqtt.subscriptions.forEach(subscription => {
|
||||
this[subscription.name] = {
|
||||
on: false,
|
||||
topic: subscription.topic,
|
||||
power: () => {
|
||||
// This *should* toggle the state, asks if state is true, if it is set it false, otherwise set it true
|
||||
this[subscription.name].on ? this[subscription.name].on = false : this[subscription.name].on = true;
|
||||
}
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
export class Communicator {
|
||||
constructor(state) {
|
||||
// Connect to the MQTT Broker
|
||||
this.client = mqtt.connect(config.mqtt.address);
|
||||
|
||||
// Subscribe to status topics
|
||||
config.mqtt.subscriptions.forEach(subscription => {
|
||||
this.client.subscribe(subscription.topic);
|
||||
state[subscription.name].topic = subscription.topic;
|
||||
});
|
||||
}
|
||||
|
||||
powerOn(element, state) {
|
||||
// Send the enable igniter message
|
||||
// Publish with retain flag set to true
|
||||
this.client.publish(topic, message, { retain: true }, (err) => {
|
||||
if (err) {
|
||||
console.error('Failed to publish message:', err);
|
||||
} else {
|
||||
console.log('Message published and retained on topic:', topic);
|
||||
}
|
||||
|
||||
// Optionally close the connection
|
||||
client.end();
|
||||
});
|
||||
// Confirm
|
||||
|
||||
// Update state
|
||||
state.igniterOn();
|
||||
return state;
|
||||
}
|
||||
|
||||
igniterOn(state) {
|
||||
|
||||
}
|
||||
|
||||
augerOn(state) {
|
||||
// Send the enable auger message
|
||||
|
||||
// Confirm
|
||||
|
||||
// Update state
|
||||
state.augerOn();
|
||||
return state;
|
||||
}
|
||||
|
||||
exhaustOn(state) {
|
||||
// Send the enable exhaust message
|
||||
|
||||
// Confirm
|
||||
|
||||
// Update state
|
||||
state.exhaustOn();
|
||||
return state;
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 163 KiB |
@ -1,39 +0,0 @@
|
||||
import { Communicator,State } from './HestiaClasses.js';
|
||||
|
||||
window.onload = async function() {
|
||||
await fetch('/assets/config.json')
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
return response.json(); // Parse the JSON data from the response
|
||||
})
|
||||
.then(data => {
|
||||
const config = data;
|
||||
console.log(config);
|
||||
const psState = new State(config);
|
||||
refreshState(window.document, psState);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('There was a problem with the fetch operation:', error);
|
||||
});
|
||||
};
|
||||
|
||||
function refreshState(doc, state) {
|
||||
const igniterStatus = doc.getElementById("igniter-status");
|
||||
const exhaustStatus = doc.getElementById("exhaust-status");
|
||||
const augerStatus = doc.getElementById("auger-status");
|
||||
let statusString;
|
||||
|
||||
statusString = '';
|
||||
if (state.igniter.on) statusString = "On"; else statusString = "Off";
|
||||
igniterStatus.innerHTML = statusString;
|
||||
|
||||
statusString = '';
|
||||
if (state.exhaust.on) statusString = "On"; else statusString = "Off";
|
||||
exhaustStatus.innerHTML = statusString;
|
||||
|
||||
statusString = '';
|
||||
if (state.auger.on) statusString = "On"; else statusString = "Off";
|
||||
augerStatus.innerHTML = statusString;
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Hestia</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
|
||||
<script type="module" src="./assets/hestia.js"></script>
|
||||
</head>
|
||||
|
||||
<body class="bg-gray-900 text-white font-sans">
|
||||
<marquee style="color: yellow; background-color: red; font-weight: bold;">
|
||||
PELLET STOVE FREE TRIAL HAS ENDED, PLEASE PURCHASE A LICENSE NOW!
|
||||
</marquee>
|
||||
|
||||
<div class="container mx-auto py-8 max-w-md">
|
||||
<h1 class="text-3xl text-center text-purple-400 font-bold mb-8">Hestia Control Panel</h1>
|
||||
|
||||
<div class="controls-container bg-gray-800 p-6 rounded-lg shadow-lg space-y-4">
|
||||
<table class="min-w-full bg-gray-900 text-white rounded-lg shadow-lg">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="py-2 px-4 text-left text-purple-400">Element</th>
|
||||
<th class="py-2 px-4 text-left text-purple-400">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="border-b border-gray-700">
|
||||
<td class="py-2 px-4">Igniter</td>
|
||||
<td class="py-2 px-4" id="igniter-status">Placeholder</td>
|
||||
</tr>
|
||||
<tr class="border-b border-gray-700">
|
||||
<td class="py-2 px-4">Exhaust</td>
|
||||
<td class="py-2 px-4" id="exhaust-status">Placeholder</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="py-2 px-4">Auger</td>
|
||||
<td class="py-2 px-4" id="auger-status">Placeholder</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<form action="/" method="post">
|
||||
<!-- Start | Shutdown | Reload Settings -->
|
||||
<div class="button-container flex">
|
||||
<input class="btn bg-gray-700 hover:bg-purple-600 text-white py-2 w-full rounded mx-auto" type="submit" id="igniter-toggle-btn" value="Toggle Igniter" name="igniterToggle">
|
||||
</div>
|
||||
<div class="button-container flex mt-4">
|
||||
<input class="btn bg-gray-700 hover:bg-purple-600 text-white py-2 w-full rounded mx-auto" type="submit" id="exhaust-toggle-btn" value="Toggle Exhaust" name="exhaustToggle">
|
||||
</div>
|
||||
<div class="button-container flex mt-4">
|
||||
<input class="btn bg-gray-700 hover:bg-purple-600 text-white py-2 w-full rounded mx-auto" type="submit" id="auger-toggle-btn" value="Toggle Auger" name="augerToggle">
|
||||
</div>
|
||||
|
||||
<!-- Set feed rates -->
|
||||
<div class="form-group mt-4">
|
||||
<label for="feedRate" class="block text-sm font-medium text-purple-400">Feed Rate:</label>
|
||||
<select name="feedRate" class="form-control bg-gray-700 text-white mt-1 block w-full rounded border-gray-600 focus:border-purple-500 focus:ring-purple-500 py-2 px-4">
|
||||
<option value="500">Low</option>
|
||||
<option value="625">Medium-Low</option>
|
||||
<option value="750">Medium</option>
|
||||
<option value="875">Medium-High</option>
|
||||
<option value="1000">High</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="button-container flex justify-end mt-4">
|
||||
<input class="btn bg-purple-600 hover:bg-purple-700 text-white py-2 px-4 rounded w-full" type="submit" id="reload" value="Set Feed Rate" name="reload">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="text-center my-8">
|
||||
<img src="./assets/dancing_jesus.gif" class="img-fluid mx-auto rounded-lg shadow-lg" alt="Dancing Jesus">
|
||||
</div>
|
||||
|
||||
<div class="controls-container bg-gray-800 p-6 rounded-lg shadow-lg hidden" id="quitContainer">
|
||||
<form action="/" method="POST">
|
||||
<input class="btn bg-red-600 hover:bg-red-700 text-white py-2 px-4 rounded w-full" type="submit" id="quit" value="Quit!!" name="quit">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
1
src/main.js
Normal file
1
src/main.js
Normal file
@ -0,0 +1 @@
|
||||
// Hestia Control Panel Back-End
|
Loading…
Reference in New Issue
Block a user