require("dotenv").config(); const express = require("express"); const cors = require("cors"); const db = require("./db"); const mqttClient = require("./mqtt"); const StateManager = require("./StateManager"); const { Armed, Disarmed, Triggered, Arming, Disarming } = require("./states"); const app = express(); app.use(express.json()); app.use(cors()); app.use(require("./routes")); // app.use(express.static("public")); app.listen(process.env.PORT || 8080, () => { console.log(`Listening on port ${process.env.PORT || 8080}`); }); const {insertEvent, triggerAlarm, disarmingAlarm, disarmingTimerRunout, armAlarm, armingTimerRunout, disarmAlarm} = require("./functions"); mqttClient.on("message", (topic, message, packet) => { // console.log(packet); if (packet.retain) return; // console.log(topic, message.toString()); switch (topic) { case "motion": { const data = JSON.parse(message); if ((StateManager.alarmStatus === Armed || StateManager.alarmStatus === Triggered) && data.value === true) { console.log("motion"); triggerAlarm(data.deviceId); } break; } case "sound": { const data = JSON.parse(message); if (StateManager.alarmStatus === Armed || StateManager.alarmStatus === Triggered) { console.log("sound", data.value); triggerAlarm(data.deviceId); } break; } case "door/status": { const data = JSON.parse(message); console.log(data); if ((StateManager.alarmStatus === Armed || StateManager.alarmStatus === Triggered) && data.open === true) { console.log("door sensor"); triggerAlarm(data.deviceId); } 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); break; } case "light": { const data = JSON.parse(message); db.query(` INSERT INTO light_measurements (deviceId, value) VALUES ($1, $2) `, [ data.deviceId, data.value ]); break; } case "temperature": { const data = JSON.parse(message); db.query(` INSERT INTO temperature_measurements (deviceId, value) VALUES ($1, $2) `, [ data.deviceId, data.value ]); break; } default: console.log("Unsupported topic received: " + topic); break; } });