diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index 64218f80..e4afd07d 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -6148,17 +6148,33 @@ async function processIotData(hw_Id, data) { console.log(`🚰 Tank [${tankhardwareId}] - Level: ${tankHeight}, Calculated Water Level: ${waterLevel}`); if (tankHeight <= 0) { - if (existingTank.slave_status !== "not_working") { - const disconnectedTime = moment().tz('Asia/Kolkata').format('DD-MMM-YYYY - HH:mm:ss'); - existingTank.slave_status = "not_working"; - existingTank.slave_disconnected_time = disconnectedTime; - await existingTank.save(); - console.log(`⚠️ Slave disconnected for tank [${tankhardwareId}] at ${disconnectedTime}`); + const now = moment().tz('Asia/Kolkata'); + + if (!existingTank.slave_status || existingTank.slave_status !== "not_working") { + if (!existingTank.slave_disconnected_time) { + // First time signal lost + const disconnectedTime = now.format('DD-MMM-YYYY - HH:mm:ss'); + existingTank.slave_status = "signal_lost"; + existingTank.slave_disconnected_time = disconnectedTime; + await existingTank.save(); + console.log(`⚠️ Slave signal lost for tank [${tankhardwareId}] at ${disconnectedTime}`); + } else if (existingTank.slave_status === "signal_lost") { + const disconnectedMoment = moment(existingTank.slave_disconnected_time, 'DD-MMM-YYYY - HH:mm:ss'); + const minutesDiff = now.diff(disconnectedMoment, 'minutes'); + if (minutesDiff >= 5) { + existingTank.slave_status = "not_working"; + await existingTank.save(); + console.log(`❌ Slave marked as not_working for tank [${tankhardwareId}] after ${minutesDiff} minutes`); + } else { + console.log(`⏳ Slave still within grace period (${minutesDiff} min) for tank [${tankhardwareId}]`); + } + } } else { console.log(`⏩ Slave already marked as not_working for tank [${tankhardwareId}], skipping update.`); } } + if (tankHeight > 0 && waterLevel >= 0) { existingTank.waterlevel = waterLevel;