From f0e897076ba557692fc804ddbecb862a967e4b30 Mon Sep 17 00:00:00 2001 From: Varun Date: Tue, 21 Jan 2025 11:42:34 +0530 Subject: [PATCH] changes in motoraction and added all motor is on functionality --- src/controllers/tanksController.js | 142 ++++++++++++++++++++++++----- src/models/tanks.js | 1 + 2 files changed, 121 insertions(+), 22 deletions(-) diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index 8bf74b93..a2be8b22 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -216,24 +216,29 @@ exports.getTank = async (req, reply) => { const transformedDocs = docs.map((tank) => { const inputConnections = tank.connections?.inputConnections || []; + + // Count switches const switchCount = inputConnections.reduce((count, connection) => { return count + (connection.inputismotor === true ? 1 : 0); }, 0); + totalSwitchCount += switchCount; - totalSwitchCount += switchCount; // Accumulate the switch_count - - // Check if the tank has need_sensor set to "yes" + // Count sensors if (tank.need_sensor?.toLowerCase() === "yes") { totalSensorCount++; } - // Add the switch_count field inside connections + // Determine all_motor_status + const allMotorStatus = inputConnections.some(connection => connection.motor_status === "2"); + + // Add switch_count and all_motor_status to the response return { ...tank.toObject(), // Convert Mongoose document to plain object connections: { ...tank.connections, switch_count: switchCount, }, + all_motor_status: allMotorStatus, // Add all_motor_status field }; }); @@ -241,8 +246,8 @@ exports.getTank = async (req, reply) => { status_code: 200, data: transformedDocs, count: transformedDocs.length, - total_switch_count: totalSwitchCount, // Add the total switch count - total_sensor_count: totalSensorCount, // Add the total sensor count + total_switch_count: totalSwitchCount, + total_sensor_count: totalSensorCount, }); }) .catch((err) => { @@ -2262,22 +2267,8 @@ console.log(fcmToken) // const stopMessage = `The motor supplying water to '${tankName}' in block '${blockName}' was stopped manually at ${stopTime}.`; // eventEmitter.emit("sendMotorStopNotification", fcmToken, stopMessage); - await Tank.updateOne( - { customerId, "connections.inputConnections.motor_id": motorId }, - { - $set: { - "connections.inputConnections.$.motor_stop_status": motorStopStatus, - "connections.inputConnections.$.motor_on_type": "manual", - "connections.inputConnections.$.stopTime": stopTime - } - } - ); - - // Clear intervals if any - if (motorIntervals[motorId]) { - clearInterval(motorIntervals[motorId]); - delete motorIntervals[motorId]; - } + + eventEmitter.emit( "motorStop", fcmToken, @@ -2456,7 +2447,114 @@ console.log(fcmToken) }, 30000); // Check every minute } + }else if (req.body.threshold_type === "litres") { + console.log("entered litres") + const receiver_tank_info7 = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() }); + const supplier_tank_info7 = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() }); + + const newMotorData = new MotorData({ + customerId: customerId, + motor_id: motorId, + start_instance_id: start_instance_id, + supplierTank: req.body.from, + receiverTank: req.body.to, + supplier_type: req.body.from_type, + receiver_type: req.body.to_type, + startTime: req.body.startTime, + receiverInitialwaterlevel:parseInt(receiver_tank_info7.waterlevel, 10), + supplierInitialwaterlevel:parseInt(supplier_tank_info7.waterlevel, 10) + }); + await newMotorData.save(); + // If threshold type is percentage, calculate percentage threshold + const receiver_tank_info = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() }); + const supplier_tank_info = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() }); + if (!receiver_tank_info) { + throw new Error("Receiver tank not found."); + } + if (!supplier_tank_info) { + throw new Error("Supplierr tank not found."); + } + const supplier_capacity = parseInt(supplier_tank_info.capacity, 10); + const supplier_waterLevel = parseInt(supplier_tank_info.waterlevel, 10); + + const capacity = parseInt(receiver_tank_info.capacity, 10); + const waterLevel = parseInt(receiver_tank_info.waterlevel, 10); + const desired_percentage = parseInt(req.body.manual_threshold_litres.replace(/,/g, ''), 10); + + console.log(desired_percentage) + const threshold_water_level = waterLevel+desired_percentage; + + const supplier_threshold = supplier_waterLevel-desired_percentage + console.log(supplier_threshold,"supplier_threshold") + for await (const tank of Tank.find({ "connections.inputConnections.motor_id": motorId })) { + this.publishMotorStopStatus(motorId, motorStopStatus); + for await (const tank of Tank.find({ "connections.inputConnections.motor_id": motorId })) { + const index = tank.connections.inputConnections.findIndex(connection => connection.motor_id === motorId); + if (index !== -1) { + await Tank.updateOne( + { customerId, "connections.inputConnections.motor_id": motorId }, + { $set: { [`connections.inputConnections.${index}.manual_threshold_percentage`]: supplier_threshold.toString(), [`connections.inputConnections.${index}.startTime`]: req.body.startTime } } + ); + } + } + + + + // Update water level threshold + + + // Start monitoring water level based on threshold percentage + motorIntervals[motorId] = setInterval(async () => { + // Check if water level has reached the threshold percentage + const supplier_tank_info1 = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() }); + const current_water_level = parseInt(supplier_tank_info1.waterlevel, 10); + if (current_water_level <= supplier_threshold) { + // Stop the motor pump + await Tank.updateOne( + { customerId, "connections.inputConnections.motor_id": motorId }, + { + $set: { + "connections.inputConnections.$.motor_stop_status": "1", + + "connections.inputConnections.$.threshold_type": null, + "connections.inputConnections.$.manual_threshold_time": null, + "connections.inputConnections.$.manual_threshold_percentage": null + } + } + ); + clearInterval(motorIntervals[motorId]); // Clear interval + delete motorIntervals[motorId]; + + this.publishMotorStopStatus(motorId, "1"); + await delay(300000); + + const motorData = await MotorData.findOne({ customerId, motor_id: motorId, start_instance_id: start_instance_id }); + if (motorData) { + const receiverTank = await Tank.findOne({ customerId, tankName: motorData.receiverTank, tankLocation: motorData.receiver_type.toLowerCase() }); + const receiverFinalWaterLevel = parseInt(receiverTank.waterlevel, 10); + const quantityDelivered = receiverFinalWaterLevel - parseInt(motorData.receiverInitialwaterlevel, 10); + + + const stopTime = formatDate(new Date()); + + await MotorData.updateOne( + { customerId, motor_id: motorId, start_instance_id: start_instance_id }, + { + $set: { + stopTime:stopTime, + receiverfinalwaterlevel: receiverFinalWaterLevel.toString(), + quantity_delivered: quantityDelivered.toString() + } + } + ); + } + } + }, 20000); } + + } + + } // Respond with success message reply.code(200).send({ message: `Motor ${action === "start" ? "started" : "stopped"} successfully.` }); diff --git a/src/models/tanks.js b/src/models/tanks.js index 9118b338..86506184 100644 --- a/src/models/tanks.js +++ b/src/models/tanks.js @@ -61,6 +61,7 @@ const tanksSchema = new mongoose.Schema({ notificationSentCriticalHigh: { type: Boolean }, notificationSentVeryHigh: { type: Boolean }, notificationSentHigh: { type: Boolean }, + all_motor_status: { type: Boolean }, connections: { source: { type: String },