diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index 7ca2e1af..62c11089 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -1054,19 +1054,13 @@ exports.getMasterSlaveSummary = async (req, reply) => { const hardwareId = device.hardwareId?.trim(); if (!hardwareId) return device.toObject(); - // Fetch latest IoT data - const latestData = await IotData.findOne({ hardwareId }) - .sort({ date: -1 }) - .lean(); - + const latestData = await IotData.findOne({ hardwareId }).sort({ date: -1 }).lean(); const enriched = device.toObject(); - // Add GSM Connection info (date/time/status) for master if (latestData?.date) { const indiaTime = moment.tz(latestData.date, "Asia/Kolkata"); const date = indiaTime.format("DD-MM-YYYY"); const time = indiaTime.format("HH:mm:ss"); - const now = moment.tz("Asia/Kolkata"); const diffInMinutes = now.diff(indiaTime, "minutes"); const isGSMConnected = diffInMinutes <= 1; @@ -1076,16 +1070,15 @@ exports.getMasterSlaveSummary = async (req, reply) => { enriched.connected_gsm_date = date; enriched.connected_gsm_time = time; enriched.gsm_connected_status = gsmStatus; + enriched.gsm_last_check_time = indiaTime.format("YYYY-MM-DD HH:mm:ss"); } } - // Add LoRa Connection info for slaves (per-tank) if (latestData?.tanks && Array.isArray(latestData.tanks)) { const enrichedTanks = latestData.tanks.map(tank => { const tankMoment = moment.tz(tank.date, "Asia/Kolkata"); const tankDiff = moment.tz("Asia/Kolkata").diff(tankMoment, "minutes"); const loraStatus = tankDiff <= 1 ? "connected" : "disconnected"; - return { ...tank, connected_status: loraStatus @@ -1094,36 +1087,36 @@ exports.getMasterSlaveSummary = async (req, reply) => { enriched.tanks = enrichedTanks; - // Update LoRa status for the device itself (if slave) if (device.type === 'slave') { const connectedTank = enrichedTanks.find(tank => tank.tankhardwareId === device.hardwareId); enriched.lora_connected_status = connectedTank ? connectedTank.connected_status : "disconnected"; - enriched.connected_lora_date = connectedTank ? connectedTank.date : null; + enriched.connected_lora_date = connectedTank ? moment(connectedTank.date).tz("Asia/Kolkata").format("DD-MM-YYYY") : null; enriched.connected_lora_time = connectedTank ? connectedTank.time : null; + enriched.lora_last_check_time = connectedTank ? moment(connectedTank.date).tz("Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss") : null; } } - // Remove GSM fields for slave devices and LoRa fields for master devices if (device.type === 'slave') { delete enriched.connected_gsm_date; delete enriched.connected_gsm_time; delete enriched.gsm_connected_status; + delete enriched.gsm_last_check_time; } if (device.type === 'master') { delete enriched.connected_lora_date; delete enriched.connected_lora_time; delete enriched.lora_connected_status; + delete enriched.lora_last_check_time; + delete enriched.tanks; // ✅ Remove tanks for master } return enriched; }; - // Enrich masters and slaves with timestamps and connection statuses const enrichedMasters = await Promise.all(masters.map(enrichDeviceWithTimestamp)); const enrichedSlaves = await Promise.all(slaves.map(enrichDeviceWithTimestamp)); - // Match slaves to their masters const masterSummary = enrichedMasters.map(master => { const connectedSlaves = enrichedSlaves.filter(slave => slave.connected_to === master.connected_to); return {