master^2
Varun 5 months ago
parent 4998978158
commit dfd9ae566c

@ -6215,33 +6215,53 @@ async function processIotData(hw_Id, data) {
const waterLevel = parseInt(waterLevelHeight * waterCapacityPerCm, 10); const waterLevel = parseInt(waterLevelHeight * waterCapacityPerCm, 10);
console.log(`🚰 Tank [${tankhardwareId}] - Level: ${tankHeight}, Calculated Water Level: ${waterLevel}`); console.log(`🚰 Tank [${tankhardwareId}] - Level: ${tankHeight}, Calculated Water Level: ${waterLevel}`);
if (tankHeight <= 0) {
const now = moment().tz('Asia/Kolkata'); const now = moment().tz('Asia/Kolkata');
// Log what we fetched from DB
console.log(`📥 Fetched Tank [${tankhardwareId}]`);
console.log("🔍 slave_status:", existingTank.slave_status);
console.log("🔍 slave_signal_lost_time:", existingTank.slave_signal_lost_time);
// ✅ Case 1: Tank is receiving data → set to "working"
// 🚨 Case 2: Tank height is 0 — possible signal loss
if (tankHeight <= 0) {
if ( if (
existingTank.slave_status !== "signal_lost1" && existingTank.slave_status !== "signal_lost1" &&
existingTank.slave_status !== "not_working" existingTank.slave_status !== "not_working"
) { ) {
// First time signal is lost // First time signal lost
existingTank.slave_status = "signal_lost1"; existingTank.slave_status = "signal_lost1";
// Only set signal lost time if it doesn't exist // Only set signal lost time if not already set
if (!existingTank.slave_signal_lost_time) { if (!existingTank.slave_signal_lost_time) {
existingTank.slave_signal_lost_time = now.format('DD-MMM-YYYY - HH:mm:ss'); existingTank.slave_signal_lost_time = now.format('DD-MMM-YYYY - HH:mm:ss');
console.log(`⚠️ Signal lost for tank [${tankhardwareId}] at ${existingTank.slave_signal_lost_time}`); console.log(`⚠️ Signal lost DETECTED for tank [${tankhardwareId}] at ${existingTank.slave_signal_lost_time}`);
} else {
console.log(`⚠️ Signal lost ALREADY SET earlier for tank [${tankhardwareId}] at ${existingTank.slave_signal_lost_time}`);
} }
console.log("💾 Saving signal_lost1...");
await existingTank.save(); await existingTank.save();
return; // ⛔ STOP further processing on this cycle
} else if (existingTank.slave_status === "signal_lost1") { } else if (existingTank.slave_status === "signal_lost1") {
if (!existingTank.slave_signal_lost_time) {
console.log(`❗ ERROR: slave_status is signal_lost1 but no slave_signal_lost_time set.`);
return;
}
const lostTime = moment(existingTank.slave_signal_lost_time, 'DD-MMM-YYYY - HH:mm:ss'); const lostTime = moment(existingTank.slave_signal_lost_time, 'DD-MMM-YYYY - HH:mm:ss');
const minutesElapsed = now.diff(lostTime, 'minutes'); const minutesElapsed = now.diff(lostTime, 'minutes');
console.log(`⏳ Time since signal lost for tank [${tankhardwareId}]: ${minutesElapsed} minutes`);
if (minutesElapsed >= 15) { if (minutesElapsed >= 15) {
existingTank.slave_status = "not_working"; existingTank.slave_status = "not_working";
existingTank.slave_disconnected_time = now.format('DD-MMM-YYYY - HH:mm:ss'); existingTank.slave_disconnected_time = now.format('DD-MMM-YYYY - HH:mm:ss');
console.log(`❌ Signal lost exceeded 15 minutes. Marking tank [${tankhardwareId}] as not_working.`);
await existingTank.save(); await existingTank.save();
// 🔁 Propagate to connected output tanks
for (const outputConnection of existingTank.connections.outputConnections) { for (const outputConnection of existingTank.connections.outputConnections) {
const linkedTank = await Tank.findOne({ const linkedTank = await Tank.findOne({
customerId, customerId,
@ -6254,24 +6274,25 @@ async function processIotData(hw_Id, data) {
if (inputConnection.inputConnections === tank_name) { if (inputConnection.inputConnections === tank_name) {
inputConnection.slave_status = "not_working"; inputConnection.slave_status = "not_working";
await linkedTank.save(); await linkedTank.save();
console.log(`🔗 Updated linked tank [${linkedTank.tankName}] inputConnection slave_status to not_working`);
} }
} }
} }
} }
console.log(`❌ Slave marked as not_working for tank [${tankhardwareId}] at ${existingTank.slave_disconnected_time}`); console.log(`✅ Finalized: Tank [${tankhardwareId}] marked not_working at ${existingTank.slave_disconnected_time}`);
} else { } else {
console.log(`⏳ Still waiting... only ${minutesElapsed} minutes passed for tank [${tankhardwareId}]`); console.log(`⏱ Still within grace period. ${15 - minutesElapsed} minutes left for tank [${tankhardwareId}]`);
} }
} else { } else {
console.log(`Already in ${existingTank.slave_status}, no update.`); console.log(`No action: Tank [${tankhardwareId}] already ${existingTank.slave_status}`);
} }
} }
if (tankHeight > 0 && waterLevel >= 0) { if (tankHeight > 0 && waterLevel >= 0) {
existingTank.waterlevel = waterLevel; existingTank.waterlevel = waterLevel;
existingTank.slave_status = "working"; existingTank.slave_status = "working";

Loading…
Cancel
Save