Skip to content
Snippets Groups Projects
Commit a8e9787e authored by James Arcus's avatar James Arcus
Browse files

Refactored door info for multiple doors

parent aeb9cf69
No related merge requests found
......@@ -5,6 +5,11 @@ const fs = require('node:fs');
// Prepend timestamp and severity to all console messages
require('console-stamp')(console);
class DoorInfo {
state = null;
opener = null;
}
const web_host = process.env.HTTP_BIND;
const web_port = process.env.HTTP_PORT;
......@@ -27,35 +32,64 @@ client.on('connect', () => {
client.subscribe('door/#', () => {});
});
let doorState = null;
let doorOpener = null;
let doors = {
'ucc-door': new DoorInfo(),
};
const update_door_state = (door, state) => {
if (doors[door] === undefined) {
console.log(`Tried to update state for unknown door ${door}`);
return;
}
switch (state) {
case "ON":
console.log(`Door ${door} opened!`);
doors[door].state = true;
break;
case "OFF":
console.log(`Door ${door} closed!`);
doors[door].state = false;
break;
default:
console.log(`Unknown message received for door ${door}`);
break;
}
};
const update_door_opener = (door, opener) => {
if (doors[door] === undefined) {
console.log(`Tried to update opener for unknown door ${door}`);
return;
}
if (opener) {
console.log(`Marked door ${door} as opened by ${opener}`);
doors[door].opener = opener;
}
};
// Receive messages
client.on('message', (topic, message) => {
console.log(`Received message on topic ${topic}`);
if (topic === 'door/ucc-door/state') {
switch (message.toString()) {
case "ON":
console.log("Door opened!");
doorState = true;
break;
case "OFF":
console.log("Door closed!");
doorState = false;
break;
default:
console.log("Unknown message received...");
break;
}
const topicparts = topic.split('/');
if (topicparts.length != 3) {
console.log(`Unknown topic ${topic} received`);
return;
}
else if (topic === 'door/ucc-door/openedby') {
const opener = message.toString();
if (opener) {
doorOpener = opener;
}
if (topicparts[0] === 'door' && topicparts[2] === 'state') {
update_door_state(topicparts[1], message.toString());
}
else if (topicparts[0] === 'door' && topicparts[2] === 'openedby') {
update_door_opener(topicparts[1], message.toString());
}
else {
console.log(`Unknown topic ${topic} received`);
}
});
......@@ -85,28 +119,28 @@ const server = http.createServer((req, res) => {
}
if (req.url === '/') {
if (doorState === null) {
if (doors['ucc-door'].state === null) {
return send_file(res, 500, './pages/ucc_door_unavail.html', 'text/html');
}
const fname = doorState ? './pages/ucc_door_open.html' : './pages/ucc_door_closed.html';
const fname = doors['ucc-door'].state ? './pages/ucc_door_open.html' : './pages/ucc_door_closed.html';
return send_file(res, 200, fname, 'text/html');
}
if (req.url === '/state') {
if (doorState === null) {
if (doors['ucc-door'].state === null) {
return send_json(res, 500, null);
}
return send_json(res, 200, doorState);
return send_json(res, 200, doors['ucc-door'].state);
}
if (req.url === '/opener') {
if (doorOpener === null) {
if (doors['ucc-door'].opener === null) {
return send_json(res, 500, null);
}
return send_json(res, 200, doorState ? doorOpener : null);
return send_json(res, 200, doors['ucc-door'].state ? doors['ucc-door'].opener : null);
}
if (req.url === '/static/door_ucc_open.jpg') {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment