diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index fb10db0f..cc03c824 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -1822,64 +1822,48 @@ exports.getMasterSlaveSummary = async (req, reply) => { for (const slave of slaves) { - const slaveIot = await IotData.findOne({ hardwareId: slave.connected_to }) - .sort({ date: -1, time: -1 }) - .lean(); - console.log("slaveIot",slaveIot) + const now = moment.tz("Asia/Kolkata"); let connectedLoraDate = null; let connectedLoraTime = null; - - // if (slaveIot?.date && slaveIot?.time) { - // const indiaTime = moment.tz(`${slaveIot.date} ${slaveIot.time}`, "Asia/Kolkata"); - // connectedLoraDate = indiaTime.format("DD-MM-YYYY"); - // connectedLoraTime = indiaTime.format("HH:mm:ss"); - // } - - // const tankHeight = await getTankHeight(slave.tankhardwareId); - // let loraStatus = (tankHeight === null || tankHeight === 0) ? "disconnected" : "connected"; - - // const loraLastDisconnect = loraStatus === "disconnected" && connectedLoraDate && connectedLoraTime - // ? `${connectedLoraDate} ${connectedLoraTime}` - // : slave.lora_last_disconnect_time || null; let loraStatus = "disconnected"; let loraLastDisconnect = slave.lora_last_disconnect_time || null; + let loraLastCheckTime = now.format("DD-MM-YYYY HH:mm:ss"); let tankHeight = null; + // Fetch latest IotData for slave's hardwareId (NOT master's) + const slaveIot = await IotData.findOne({ hardwareId: slave.connected_to }) + .sort({ date: -1, time: -1 }) + .lean(); + if (slaveIot?.tanks?.length && slave.tankhardwareId) { const matchedTank = slaveIot.tanks.find( t => t.tankhardwareId === slave.tankhardwareId ); if (matchedTank) { - tankHeight = parseFloat(matchedTank.tankHeight) || 0; - const indiaTime = moment.tz( `${moment(matchedTank.date).format("YYYY-MM-DD")} ${matchedTank.time}`, "YYYY-MM-DD HH:mm:ss", "Asia/Kolkata" ); - + connectedLoraDate = indiaTime.format("DD-MM-YYYY"); connectedLoraTime = indiaTime.format("HH:mm:ss"); - - loraStatus = tankHeight > 0 ? "connected" : "disconnected"; - - // ⛔ Override if master is disconnected - if (gsmStatus === "disconnected") { - loraStatus = "disconnected"; - } - + + tankHeight = parseFloat(matchedTank.tankHeight) || 0; + + const diffMinutes = now.diff(indiaTime, "minutes"); + + // Connected if tankHeight > 0 and data not older than 5 mins + loraStatus = (tankHeight > 0 && diffMinutes <= 1) ? "connected" : "disconnected"; + if (loraStatus === "disconnected") { - if (connectedLoraDate && connectedLoraTime) { - loraLastDisconnect = `${connectedLoraDate} ${connectedLoraTime}`; - } else { - loraLastDisconnect = slave.lora_last_disconnect_time || null; - } + loraLastDisconnect = `${connectedLoraDate} ${connectedLoraTime}`; } } - } - // Update in DB + + // Update DB with new status and timestamps await Insensors.updateOne( { hardwareId: slave.hardwareId }, { @@ -1887,8 +1871,9 @@ exports.getMasterSlaveSummary = async (req, reply) => { connected_status: loraStatus, connected_lora_date: connectedLoraDate, connected_lora_time: connectedLoraTime, - lora_last_disconnect_time: loraLastDisconnect - } + lora_last_check_time: loraLastCheckTime, + lora_last_disconnect_time: loraLastDisconnect, + }, } ); @@ -1900,12 +1885,15 @@ exports.getMasterSlaveSummary = async (req, reply) => { connected_status: loraStatus, connected_lora_date: connectedLoraDate, connected_lora_time: connectedLoraTime, + lora_last_check_time: loraLastCheckTime, lora_last_disconnect_time: loraLastDisconnect, type: slave.type || "slave", - connected_to: slave.connected_to || null + connected_to: slave.connected_to || null, }); } + + result.push({ hardwareId: master.hardwareId, masterName,