diff --git a/API.md b/API.md index 26ceb7b..4cbd12c 100644 --- a/API.md +++ b/API.md @@ -120,4 +120,17 @@ { "deviceId": 0 } + ``` + +* Card read + + Topic: `card/read` + + Data example: + + ```json + { + "deviceId": 0, + "cardUID": "6XjCwg==" + } ``` \ No newline at end of file diff --git a/functions.js b/functions.js index 8913b1b..672add4 100644 --- a/functions.js +++ b/functions.js @@ -48,7 +48,6 @@ function armAlarm(deviceId) { function armingTimerRunout(deviceId) { if (StateManager.alarmStatus === Arming) { mqttClient.publish("alarm/state", JSON.stringify({ status: Armed })); - mqttClient.publish("door/lock", JSON.stringify({ deviceId: 2, lock: true })); StateManager.alarmStatus = Armed; console.log("Alarm has been set to Armed"); insertEvent(deviceId, Armed); @@ -57,13 +56,24 @@ function armingTimerRunout(deviceId) { function disarmAlarm(deviceId) { mqttClient.publish("alarm/state", JSON.stringify({ status: Disarmed })); - mqttClient.publish("door/lock", JSON.stringify({ deviceId: 2, lock: false })); StateManager.alarmStatus = Disarmed; clearTimeout(timer); console.log("Alarm has been set to Disarmed"); insertEvent(deviceId, Disarmed); } +function lockDoor() { + mqttClient.publish("door/lock", JSON.stringify({ deviceId: 2, lock: true })); +} + +let doorTimer; + +function unlockDoor() { + mqttClient.publish("door/lock", JSON.stringify({ deviceId: 2, lock: false })); + clearTimeout(doorTimer); + doorTimer = setTimeout(lockDoor, 5000); +} + let timer; module.exports = { @@ -73,5 +83,7 @@ module.exports = { disarmingTimerRunout, armAlarm, armingTimerRunout, - disarmAlarm + disarmAlarm, + lockDoor, + unlockDoor }; \ No newline at end of file diff --git a/index.js b/index.js index 837a8b3..d215736 100644 --- a/index.js +++ b/index.js @@ -22,13 +22,15 @@ app.listen(process.env.PORT || 8080, () => { console.log(`Listening on port ${process.env.PORT || 8080}`); }); -const {insertEvent, +const { insertEvent, triggerAlarm, disarmingAlarm, disarmingTimerRunout, armAlarm, armingTimerRunout, - disarmAlarm} = require("./functions"); + disarmAlarm, + unlockDoor, + lockDoor } = require("./functions"); mqttClient.on("message", (topic, message, packet) => { // console.log(packet); @@ -59,20 +61,24 @@ mqttClient.on("message", (topic, message, packet) => { console.log("door sensor"); triggerAlarm(data.deviceId); } + if (data.open === false) { + lockDoor(); + } break; } case "display/arm": { const data = JSON.parse(message); console.log(topic, data); - armAlarm(data.deviceId); - break; - } - case "display/disarm": { - const data = JSON.parse(message); - console.log(topic, data); - disarmAlarm(data.deviceId); + if (StateManager.alarmStatus === Disarmed) + armAlarm(data.deviceId); break; } + // case "display/disarm": { + // const data = JSON.parse(message); + // console.log(topic, data); + // disarmAlarm(data.deviceId); + // break; + // } case "light": { const data = JSON.parse(message); db.query(` @@ -95,6 +101,18 @@ mqttClient.on("message", (topic, message, packet) => { ]); break; } + case "card/read": { + const data = JSON.parse(message); + console.log(data); + const uids = ["s8K/CQ==", "fo3S0VABBOA=", "6XjCwg=="] + if (uids.includes(data.cardUID)) { + if (StateManager.alarmStatus != Disarmed) { + disarmAlarm(); + } + unlockDoor(); + } + break; + } default: console.log("Unsupported topic received: " + topic); break;