You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.3 KiB
JavaScript
89 lines
2.3 KiB
JavaScript
const db = require("./db");
|
|
const mqttClient = require("./mqtt");
|
|
|
|
const StateManager = require("./StateManager");
|
|
const { Armed, Disarmed, Triggered, Arming, Disarming } = require("./states");
|
|
|
|
function insertEvent(deviceId, eventType) {
|
|
db.query(`
|
|
INSERT INTO events (deviceId, type)
|
|
VALUES ($1, $2)
|
|
`, [
|
|
deviceId,
|
|
eventType
|
|
]);
|
|
}
|
|
|
|
function triggerAlarm(deviceId) {
|
|
mqttClient.publish("alarm/state", JSON.stringify({ status: Triggered, changed: true }));
|
|
StateManager.alarmStatus = Triggered;
|
|
console.log("Alarm has been triggered", deviceId);
|
|
insertEvent(deviceId, Triggered);
|
|
}
|
|
|
|
function disarmingAlarm(deviceId) {
|
|
mqttClient.publish("alarm/state", JSON.stringify({ status: Disarming, changed: true }));
|
|
StateManager.alarmStatus = Disarming;
|
|
console.log("Alarm has been set to Disarming");
|
|
clearTimeout(timer);
|
|
timer = setTimeout(disarmingTimerRunout, 10000, deviceId);
|
|
insertEvent(deviceId, Disarming);
|
|
}
|
|
|
|
function disarmingTimerRunout(deviceId) {
|
|
if (StateManager.alarmStatus === Disarming) {
|
|
disarmAlarm(deviceId);
|
|
}
|
|
}
|
|
|
|
function armAlarm(deviceId) {
|
|
mqttClient.publish("alarm/state", JSON.stringify({ status: Arming, changed: true }));
|
|
StateManager.alarmStatus = Arming;
|
|
console.log("Alarm has been set to Arming");
|
|
clearTimeout(timer);
|
|
timer = setTimeout(armingTimerRunout, 10000, deviceId);
|
|
insertEvent(deviceId, Arming);
|
|
}
|
|
|
|
function armingTimerRunout(deviceId) {
|
|
if (StateManager.alarmStatus === Arming) {
|
|
mqttClient.publish("alarm/state", JSON.stringify({ status: Armed, changed: true }));
|
|
StateManager.alarmStatus = Armed;
|
|
console.log("Alarm has been set to Armed");
|
|
insertEvent(deviceId, Armed);
|
|
}
|
|
}
|
|
|
|
function disarmAlarm(deviceId) {
|
|
mqttClient.publish("alarm/state", JSON.stringify({ status: Disarmed, changed: true }));
|
|
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 = {
|
|
insertEvent,
|
|
triggerAlarm,
|
|
disarmingAlarm,
|
|
disarmingTimerRunout,
|
|
armAlarm,
|
|
armingTimerRunout,
|
|
disarmAlarm,
|
|
lockDoor,
|
|
unlockDoor
|
|
}; |