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.
77 lines
2.1 KiB
JavaScript
77 lines
2.1 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 }));
|
|
StateManager.alarmStatus = Triggered;
|
|
console.log("Alarm has been triggered", deviceId);
|
|
insertEvent(deviceId, Triggered);
|
|
}
|
|
|
|
function disarmingAlarm(deviceId) {
|
|
mqttClient.publish("alarm/state", JSON.stringify({ status: Disarming }));
|
|
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 }));
|
|
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 }));
|
|
mqttClient.publish("door/lock", JSON.stringify({ deviceId: 2, lock: 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 }));
|
|
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);
|
|
}
|
|
|
|
let timer;
|
|
|
|
module.exports = {
|
|
insertEvent,
|
|
triggerAlarm,
|
|
disarmingAlarm,
|
|
disarmingTimerRunout,
|
|
armAlarm,
|
|
armingTimerRunout,
|
|
disarmAlarm
|
|
}; |