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

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
};