From c337761d0b9bd40ed68b3bd25c67fe2d3408a224 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 23 Apr 2025 16:34:40 +0530 Subject: [PATCH 1/3] changes --- src/controllers/tanksController.js | 14 ++++++++++++++ src/models/tanks.js | 2 ++ 2 files changed, 16 insertions(+) diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index 30cdffc9..64218f80 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -6147,9 +6147,23 @@ async function processIotData(hw_Id, data) { const waterLevel = parseInt(waterLevelHeight * waterCapacityPerCm, 10); 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}`); + } else { + console.log(`⏩ Slave already marked as not_working for tank [${tankhardwareId}], skipping update.`); + } + } + if (tankHeight > 0 && waterLevel >= 0) { existingTank.waterlevel = waterLevel; + existingTank.slave_status = "working"; + existingTank.slave_disconnected_time = null; await existingTank.save(); for (const outputConnection of existingTank.connections.outputConnections) { diff --git a/src/models/tanks.js b/src/models/tanks.js index c6d700d3..5627fa8f 100644 --- a/src/models/tanks.js +++ b/src/models/tanks.js @@ -64,6 +64,8 @@ const tanksSchema = new mongoose.Schema({ notificationSentHigh: { type: Boolean }, all_motor_status: { type: Boolean }, status:{ type: String, default: "active" }, + slave_status:{ type: String, default: "working" }, + slave_disconnected_time :{ type: String, default: null }, connections: { source: { type: String }, From 7760469c4983d89779faa8114def1587f04e10ba Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 23 Apr 2025 17:00:46 +0530 Subject: [PATCH 2/3] changes --- src/controllers/tanksController.js | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) 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; From 8f7bf46f1d21bebe05cc40eb7093394a3361018f Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 23 Apr 2025 17:07:19 +0530 Subject: [PATCH 3/3] changes --- src/controllers/tanksController.js | 31 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index e4afd07d..69f80fc9 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -6149,32 +6149,37 @@ async function processIotData(hw_Id, data) { console.log(`🚰 Tank [${tankhardwareId}] - Level: ${tankHeight}, Calculated Water Level: ${waterLevel}`); if (tankHeight <= 0) { const now = moment().tz('Asia/Kolkata'); + const formattedNow = now.format('DD-MMM-YYYY - HH:mm:ss'); - if (!existingTank.slave_status || existingTank.slave_status !== "not_working") { + if (existingTank.slave_status !== "not_working") { if (!existingTank.slave_disconnected_time) { - // First time signal lost - const disconnectedTime = now.format('DD-MMM-YYYY - HH:mm:ss'); + // First time signal is lost existingTank.slave_status = "signal_lost"; - existingTank.slave_disconnected_time = disconnectedTime; + existingTank.slave_disconnected_time = formattedNow; await existingTank.save(); - console.log(`⚠️ Slave signal lost for tank [${tankhardwareId}] at ${disconnectedTime}`); + console.log(`⚠️ Slave signal lost for tank [${tankhardwareId}] at ${formattedNow}`); } 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`); + if (!disconnectedMoment.isValid()) { + console.error(`❌ Invalid slave_disconnected_time format for tank [${tankhardwareId}]`); } else { - console.log(`⏳ Slave still within grace period (${minutesDiff} min) for tank [${tankhardwareId}]`); + const minutesDiff = now.diff(disconnectedMoment, 'minutes'); + console.log(`⏳ Minutes since disconnect for tank [${tankhardwareId}]: ${minutesDiff} min`); + + 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(`ℹ️ Still within 5-minute window for tank [${tankhardwareId}], no update yet`); + } } } } else { - console.log(`⏩ Slave already marked as not_working for tank [${tankhardwareId}], skipping update.`); + console.log(`⏩ Slave already marked as not_working for tank [${tankhardwareId}], skipping update`); } } - if (tankHeight > 0 && waterLevel >= 0) { existingTank.waterlevel = waterLevel;