@ -1021,13 +1021,300 @@ const formatDate = (date) => {
 
			
		
	
		
			
				
					} ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// exports.motorAction = async (req, reply) => {
  
			
		
	
		
			
				
					//   try {
  
			
		
	
		
			
				
					//     const customerId = req.params.customerId;
  
			
		
	
		
			
				
					//     const action = req.body.action;
  
			
		
	
		
			
				
					//     const motorId = req.body.motor_id;
  
			
		
	
		
			
				
					//     const start_instance_id = req.body.start_instance_id
  
			
		
	
		
			
				
					//     console.log(req.body.startTime)
  
			
		
	
		
			
				
					//     // Ensure motor_id is provided
  
			
		
	
		
			
				
					//     if (!motorId) {
  
			
		
	
		
			
				
					//       throw new Error("Motor ID is required.");
  
			
		
	
		
			
				
					//     }
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//     // Determine the motor stop status based on the action
  
			
		
	
		
			
				
					//     let motorStopStatus;
  
			
		
	
		
			
				
					//     if (action === "start") {
  
			
		
	
		
			
				
					//       motorStopStatus = "2"; // If action is start, set stop status to "2"
  
			
		
	
		
			
				
					//     } else if (action === "stop") {
  
			
		
	
		
			
				
					//       motorStopStatus = "1"; // If action is stop, set stop status to "1"
  
			
		
	
		
			
				
					//     } else {
  
			
		
	
		
			
				
					//       throw new Error("Invalid action provided.");
  
			
		
	
		
			
				
					//     }
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//     // Update the motor stop status immediately if action is stop
  
			
		
	
		
			
				
					//     if (action === "stop") {
  
			
		
	
		
			
				
					//       // Update the motor stop status and other fields
  
			
		
	
		
			
				
					//       await Tank.updateOne(
  
			
		
	
		
			
				
					//         { customerId, "connections.inputConnections.motor_id": motorId },
  
			
		
	
		
			
				
					//         { 
  
			
		
	
		
			
				
					//           $set: { 
  
			
		
	
		
			
				
					//             "connections.inputConnections.$.motor_stop_status": "1",
  
			
		
	
		
			
				
					//             "connections.inputConnections.$.stopTime": req.body.stopTime,
  
			
		
	
		
			
				
					//             "connections.inputConnections.$.threshold_type": null,
  
			
		
	
		
			
				
					//             "connections.inputConnections.$.manual_threshold_time": null,
  
			
		
	
		
			
				
					//             "connections.inputConnections.$.manual_threshold_percentage": null
  
			
		
	
		
			
				
					//           }
  
			
		
	
		
			
				
					//         }
  
			
		
	
		
			
				
					//       );
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//       // Send immediate response to the client
  
			
		
	
		
			
				
					//       reply.code(200).send({ message: "Motor stopped successfully." });
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//       // Perform stop operations in the background
  
			
		
	
		
			
				
					//       (async () => {
  
			
		
	
		
			
				
					//         await delay(300000);
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//         // Update the existing motor data entry with stop details
  
			
		
	
		
			
				
					//         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 water_pumped_till_now = parseInt(receiverTank.total_water_added_from_midnight, 10);
  
			
		
	
		
			
				
					//           const totalwaterpumped = quantityDelivered + water_pumped_till_now;
  
			
		
	
		
			
				
					//           await Tank.findOneAndUpdate(
  
			
		
	
		
			
				
					//             { customerId, tankName: motorData.receiverTank, tankLocation: motorData.receiver_type.toLowerCase() },
  
			
		
	
		
			
				
					//             { $set: { total_water_added_from_midnight: totalwaterpumped } }
  
			
		
	
		
			
				
					//           );
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//           await MotorData.updateOne(
  
			
		
	
		
			
				
					//             { customerId, motor_id: motorId, start_instance_id: start_instance_id },
  
			
		
	
		
			
				
					//             { 
  
			
		
	
		
			
				
					//               $set: { 
  
			
		
	
		
			
				
					//                 stopTime: req.body.stopTime,
  
			
		
	
		
			
				
					//                 receiverfinalwaterlevel: receiverFinalWaterLevel.toString(),
  
			
		
	
		
			
				
					//                 quantity_delivered: quantityDelivered.toString()
  
			
		
	
		
			
				
					//               }
  
			
		
	
		
			
				
					//             }
  
			
		
	
		
			
				
					//           );
  
			
		
	
		
			
				
					//         }
  
			
		
	
		
			
				
					//       })();
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//       // Return here to ensure the rest of the code is not executed for the stop action
  
			
		
	
		
			
				
					//       return;
  
			
		
	
		
			
				
					//     } else {
  
			
		
	
		
			
				
					//       // Update the motor stop status to "2" for start action
  
			
		
	
		
			
				
					//       await Tank.updateOne(
  
			
		
	
		
			
				
					//         { customerId, "connections.inputConnections.motor_id": motorId },
  
			
		
	
		
			
				
					//         { $set: { "connections.inputConnections.$.motor_stop_status": "2" } }
  
			
		
	
		
			
				
					//       );
  
			
		
	
		
			
				
					//     }
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//     // Check threshold settings if action is start
  
			
		
	
		
			
				
					//     if (action === "start") {
  
			
		
	
		
			
				
					//       if (req.body.threshold_type === "time") {
  
			
		
	
		
			
				
					//         // If threshold type is time, update threshold time
  
			
		
	
		
			
				
					//         // await Tank.updateOne(
  
			
		
	
		
			
				
					//         //   { customerId, "connections.inputConnections.motor_id": motorId },
  
			
		
	
		
			
				
					//         //   { $set: { "connections.inputConnections.$.manual_threshold_time": req.body.manual_threshold_time,startTime:req.body.startTime } }
  
			
		
	
		
			
				
					//         // );
  
			
		
	
		
			
				
					//         const receiver_tank_info7 = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_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)
  
			
		
	
		
			
				
					//         });
  
			
		
	
		
			
				
					//         await newMotorData.save();
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//         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_time`]: req.body.manual_threshold_time, [`connections.inputConnections.${index}.startTime`]: req.body.startTime,[`connections.inputConnections.${index}.start_instance_id`]: start_instance_id } }
  
			
		
	
		
			
				
					//             );
  
			
		
	
		
			
				
					//           }
  
			
		
	
		
			
				
					//         }
  
			
		
	
		
			
				
					        
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//         // Start monitoring water level based on threshold time
  
			
		
	
		
			
				
					//         const thresholdTime = moment().add(req.body.manual_threshold_time, 'minutes').toDate();
  
			
		
	
		
			
				
					//         const intervalId = setInterval(async () => {
  
			
		
	
		
			
				
					//           const splr_tank_info3 = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() });
  
			
		
	
		
			
				
					//           const splr_tank_info3_waterlevel = parseInt(splr_tank_info3.waterlevel, 10);
  
			
		
	
		
			
				
					//           //console.log(splr_tank_info3_waterlevel,"splr_tank_info3_waterlevel")
  
			
		
	
		
			
				
					//           const splr_tank_info3_capacity = parseInt(splr_tank_info3.capacity.replace(/,/g, ''), 10);
  
			
		
	
		
			
				
					//          // const splr_tank_info3_capacity = parseInt(splr_tank_info3.capacity, 10);
  
			
		
	
		
			
				
					//          // console.log(splr_tank_info3.capacity,splr_tank_info3_capacity,"splr_tank_info3_capacity")
  
			
		
	
		
			
				
					//           const splr_tank_info3_percentage = (splr_tank_info3_waterlevel / splr_tank_info3_capacity) * 100;
  
			
		
	
		
			
				
					//          // console.log(splr_tank_info3_percentage, "percentage for less than 20");
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//           if (new Date() >= thresholdTime || splr_tank_info3_percentage <= 20) {
  
			
		
	
		
			
				
					//             console.log(splr_tank_info3_percentage,)
  
			
		
	
		
			
				
					//             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(intervalId);
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//             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 water_pumped_till_now = parseInt(receiverTank.total_water_added_from_midnight, 10);
  
			
		
	
		
			
				
					//               const totalwaterpumped = quantityDelivered + water_pumped_till_now
  
			
		
	
		
			
				
					//               await  Tank.findOneAndUpdate({customerId, tankName: motorData.receiverTank, tankLocation: motorData.receiver_type.toLowerCase()}, { $set: { total_water_added_from_midnight: totalwaterpumped } })
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//               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()
  
			
		
	
		
			
				
					//                   }
  
			
		
	
		
			
				
					//                 }
  
			
		
	
		
			
				
					//               );
  
			
		
	
		
			
				
					//             }
  
			
		
	
		
			
				
					//           }
  
			
		
	
		
			
				
					//         }, 60000);
  
			
		
	
		
			
				
					//       } 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 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)
  
			
		
	
		
			
				
					//         });
  
			
		
	
		
			
				
					//         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 })) {
  
			
		
	
		
			
				
					//           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
  
			
		
	
		
			
				
					//         const intervalId = 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(intervalId); // Stop monitoring water level
  
			
		
	
		
			
				
					//             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); // Check water level every minute
  
			
		
	
		
			
				
					//       }
  
			
		
	
		
			
				
					//     }
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//     // Respond with success message
  
			
		
	
		
			
				
					//     reply.code(200).send({ message: `Motor ${action === "start" ? "started" : "stopped"} successfully.` });
  
			
		
	
		
			
				
					//   } catch (err) {
  
			
		
	
		
			
				
					//     // Handle errors
  
			
		
	
		
			
				
					//     throw boom.boomify(err);
  
			
		
	
		
			
				
					//   }
  
			
		
	
		
			
				
					// };
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					const  admin  =  require ( 'firebase-admin' ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// Initialize Firebase Admin SDK (make sure this is done once in your app)
  
			
		
	
		
			
				
					// const serviceAccount = require('../waternotifications-ab81a-firebase-adminsdk-ereny-8b0bdac787.json');
  
			
		
	
		
			
				
					const  serviceAccount  =  require ( '../waternotifications-ab81a-firebase-adminsdk-ereny-8b0bdac787.json' ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					admin . initializeApp ( {  
			
		
	
		
			
				
					  credential :  admin . credential . cert ( serviceAccount ) , 
 
			
		
	
		
			
				
					} ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					exports . motorAction  =  async  ( req ,  reply )  =>  {  
			
		
	
		
			
				
					  try  { 
 
			
		
	
		
			
				
					    const  customerId  =  req . params . customerId ; 
 
			
		
	
		
			
				
					    const  action  =  req . body . action ; 
 
			
		
	
		
			
				
					    const  motorId  =  req . body . motor _id ; 
 
			
		
	
		
			
				
					    const  start _instance _id  =  req . body . start _instance _id 
 
			
		
	
		
			
				
					    console . log ( req . body . startTime ) 
 
			
		
	
		
			
				
					    const  start _instance _id  =  req . body . start _instance _id ; 
 
			
		
	
		
			
				
					    //const fcmIds = req.body.fcmIds; // Assume this is provided in the request to notify users
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Ensure motor_id is provided
 
 
			
		
	
		
			
				
					    if  ( ! motorId )  { 
 
			
		
	
		
			
				
					      throw  new  Error ( "Motor ID is required." ) ; 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -1042,8 +1329,10 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					    }  else  { 
 
			
		
	
		
			
				
					      throw  new  Error ( "Invalid action provided." ) ; 
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					    const  users  =  await  User . find ( {  customerId :  customerId  } ) ; 
 
			
		
	
		
			
				
					    const  fcmIds  =  users . map ( user  =>  user . fcmId ) . filter ( fcmId  =>  fcmId ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Update the motor stop status immediately if action is stop
 
 
			
		
	
		
			
				
					    //  Handle motor stop action 
 
			
		
	
		
			
				
					    if  ( action  ===  "stop" )  { 
 
			
		
	
		
			
				
					      // Update the motor stop status and other fields
 
 
			
		
	
		
			
				
					      await  Tank . updateOne ( 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -1062,6 +1351,21 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					      // Send immediate response to the client
 
 
			
		
	
		
			
				
					      reply . code ( 200 ) . send ( {  message :  "Motor stopped successfully."  } ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					      // Send notification for motor stop
 
 
			
		
	
		
			
				
					      for  ( const  fcmId  of  fcmIds )  { 
 
			
		
	
		
			
				
					        try  { 
 
			
		
	
		
			
				
					          const  response  =  await  sendPushNotification ( fcmId ,  'Motor Stopped' ,  ` Motor has stopped at  ${ req . body . stopTime } . ` ) ; 
 
			
		
	
		
			
				
					          console . log ( 'Notification sent successfully:' ,  response ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					          if  ( response . results [ 0 ] . error  ===  'NotRegistered' )  { 
 
			
		
	
		
			
				
					            await  User . updateOne ( {  fcmId :  fcmId  } ,  {  $unset :  {  fcmId :  ""  }  } ) ; 
 
			
		
	
		
			
				
					            console . log ( ` Removed unregistered FCM ID:  ${ fcmId } ` ) ; 
 
			
		
	
		
			
				
					          } 
 
			
		
	
		
			
				
					        }  catch  ( error )  { 
 
			
		
	
		
			
				
					          console . error ( 'Error sending notification:' ,  error ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					      } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					      // Perform stop operations in the background
 
 
			
		
	
		
			
				
					      ( async  ( )  =>  { 
 
			
		
	
		
			
				
					        await  delay ( 300000 ) ; 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1100,16 +1404,26 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					        {  customerId ,  "connections.inputConnections.motor_id" :  motorId  } , 
 
			
		
	
		
			
				
					        {  $set :  {  "connections.inputConnections.$.motor_stop_status" :  "2"  }  } 
 
			
		
	
		
			
				
					      ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					      // Send notification for motor start
 
 
			
		
	
		
			
				
					      for  ( const  fcmId  of  fcmIds )  { 
 
			
		
	
		
			
				
					        try  { 
 
			
		
	
		
			
				
					          const  response  =  await  sendPushNotification ( fcmId ,  'Motor Started' ,  ` Motor has started at  ${ req . body . startTime } . ` ) ; 
 
			
		
	
		
			
				
					          console . log ( 'Notification sent successfully:' ,  response ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					          if  ( response . results [ 0 ] . error  ===  'NotRegistered' )  { 
 
			
		
	
		
			
				
					            await  User . updateOne ( {  fcmId :  fcmId  } ,  {  $unset :  {  fcmId :  ""  }  } ) ; 
 
			
		
	
		
			
				
					            console . log ( ` Removed unregistered FCM ID:  ${ fcmId } ` ) ; 
 
			
		
	
		
			
				
					          } 
 
			
		
	
		
			
				
					        }  catch  ( error )  { 
 
			
		
	
		
			
				
					          console . error ( 'Error sending notification:' ,  error ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					      } 
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Check threshold settings if action is start
 
 
			
		
	
		
			
				
					    if  ( action  ===  "start" )  { 
 
			
		
	
		
			
				
					      if  ( req . body . threshold _type  ===  "time" )  { 
 
			
		
	
		
			
				
					        // If threshold type is time, update threshold time
 
 
			
		
	
		
			
				
					        // await Tank.updateOne(
 
 
			
		
	
		
			
				
					        //   { customerId, "connections.inputConnections.motor_id": motorId },
 
 
			
		
	
		
			
				
					        //   { $set: { "connections.inputConnections.$.manual_threshold_time": req.body.manual_threshold_time,startTime:req.body.startTime } }
 
 
			
		
	
		
			
				
					        // );
 
 
			
		
	
		
			
				
					        const  receiver _tank _info7  =  await  Tank . findOne ( {  customerId ,  tankName :  req . body . to ,  tankLocation :  req . body . to _type . toLowerCase ( )  } ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        const  newMotorData  =  new  MotorData ( { 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -1121,35 +1435,44 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					          supplier _type :  req . body . from _type , 
 
			
		
	
		
			
				
					          receiver _type :  req . body . to _type , 
 
			
		
	
		
			
				
					          startTime :  req . body . startTime , 
 
			
		
	
		
			
				
					          receiverInitialwaterlevel : parseInt ( receiver _tank _info7 . waterlevel ,  10 ) 
 
			
		
	
		
			
				
					          receiverInitialwaterlevel :   parseInt ( receiver _tank _info7 . waterlevel ,  10 ) 
 
			
		
	
		
			
				
					        } ) ; 
 
			
		
	
		
			
				
					        await  newMotorData . save ( ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        for  await  ( const  tank  of  Tank . find ( {    "connections.inputConnections.motor_id" :  motorId  } ) )  { 
 
			
		
	
		
			
				
					        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_time ` ] :  req . body . manual _threshold _time ,  [ ` connections.inputConnections. ${ index } .startTime ` ] :  req . body . startTime , [ ` connections.inputConnections. ${ index } .start_instance_id ` ] :  start _instance _id  }  } 
 
			
		
	
		
			
				
					              {  $set :  {  [ ` connections.inputConnections. ${ index } .manual_threshold_time ` ] :  req . body . manual _threshold _time ,  [ ` connections.inputConnections. ${ index } .startTime ` ] :  req . body . startTime ,   [ ` connections.inputConnections. ${ index } .start_instance_id ` ] :  start _instance _id  }  } 
 
			
		
	
		
			
				
					            ) ; 
 
			
		
	
		
			
				
					          } 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Start monitoring water level based on threshold time
 
 
			
		
	
		
			
				
					        const  thresholdTime  =  moment ( ) . add ( req . body . manual _threshold _time ,  'minutes' ) . toDate ( ) ; 
 
			
		
	
		
			
				
					        const  intervalId  =  setInterval ( async  ( )  =>  { 
 
			
		
	
		
			
				
					          const  splr _tank _info3  =  await  Tank . findOne ( {  customerId ,  tankName :  req . body . from ,  tankLocation :  req . body . from _type . toLowerCase ( )  } ) ; 
 
			
		
	
		
			
				
					          const  splr _tank _info3 _waterlevel  =  parseInt ( splr _tank _info3 . waterlevel ,  10 ) ; 
 
			
		
	
		
			
				
					          //console.log(splr_tank_info3_waterlevel,"splr_tank_info3_waterlevel")
 
 
			
		
	
		
			
				
					          const  splr _tank _info3 _capacity  =  parseInt ( splr _tank _info3 . capacity . replace ( /,/g ,  '' ) ,  10 ) ; 
 
			
		
	
		
			
				
					         // const splr_tank_info3_capacity = parseInt(splr_tank_info3.capacity, 10);
 
 
			
		
	
		
			
				
					         // console.log(splr_tank_info3.capacity,splr_tank_info3_capacity,"splr_tank_info3_capacity")
 
 
			
		
	
		
			
				
					          const  splr _tank _info3 _percentage  =  ( splr _tank _info3 _waterlevel  /  splr _tank _info3 _capacity )  *  100 ; 
 
			
		
	
		
			
				
					         // console.log(splr_tank_info3_percentage, "percentage for less than 20");
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					          if  ( new  Date ( )  >=  thresholdTime  ||  splr _tank _info3 _percentage  <=  20 )  { 
 
			
		
	
		
			
				
					            console . log ( splr _tank _info3 _percentage , ) 
 
			
		
	
		
			
				
					            // Send notification for low supplier tank percentage
 
 
			
		
	
		
			
				
					            for  ( const  fcmId  of  fcmIds )  { 
 
			
		
	
		
			
				
					              try  { 
 
			
		
	
		
			
				
					                const  response  =  await  sendPushNotification ( fcmId ,  'Low Water Level Alert' ,  ` Supplier tank water level is below 20% ( ${ splr _tank _info3 _percentage . toFixed ( 2 ) } %). ` ) ; 
 
			
		
	
		
			
				
					                console . log ( 'Notification sent successfully:' ,  response ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( response . results [ 0 ] . error  ===  'NotRegistered' )  { 
 
			
		
	
		
			
				
					                  await  User . updateOne ( {  fcmId :  fcmId  } ,  {  $unset :  {  fcmId :  ""  }  } ) ; 
 
			
		
	
		
			
				
					                  console . log ( ` Removed unregistered FCM ID:  ${ fcmId } ` ) ; 
 
			
		
	
		
			
				
					                } 
 
			
		
	
		
			
				
					              }  catch  ( error )  { 
 
			
		
	
		
			
				
					                console . error ( 'Error sending notification:' ,  error ) ; 
 
			
		
	
		
			
				
					              } 
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            await  Tank . updateOne ( 
 
			
		
	
		
			
				
					              {  customerId ,  "connections.inputConnections.motor_id" :  motorId  } , 
 
			
		
	
		
			
				
					              { 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -1171,16 +1494,17 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					              const  receiverFinalWaterLevel  =  parseInt ( receiverTank . waterlevel ,  10 ) ; 
 
			
		
	
		
			
				
					              const  quantityDelivered  =  receiverFinalWaterLevel  -  parseInt ( motorData . receiverInitialwaterlevel ,  10 ) ; 
 
			
		
	
		
			
				
					              const  water _pumped _till _now  =  parseInt ( receiverTank . total _water _added _from _midnight ,  10 ) ; 
 
			
		
	
		
			
				
					              const  totalwaterpumped  =  quantityDelivered  +  water _pumped _till _now 
 
			
		
	
		
			
				
					              await   Tank . findOneAndUpdate ( { customerId ,  tankName :  motorData . receiverTank ,  tankLocation :  motorData . receiver _type . toLowerCase ( ) } ,  {  $set :  {  total _water _added _from _midnight :  totalwaterpumped  }  } ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					              const  stopTime  =  formatDate ( new  Date ( ) ) ; 
 
			
		
	
		
			
				
					              const  totalwaterpumped  =  quantityDelivered  +  water _pumped _till _now ; 
 
			
		
	
		
			
				
					              await  Tank . findOneAndUpdate ( 
 
			
		
	
		
			
				
					                {  customerId ,  tankName :  motorData . receiverTank ,  tankLocation :  motorData . receiver _type . toLowerCase ( )  } , 
 
			
		
	
		
			
				
					                {  $set :  {  total _water _added _from _midnight :  totalwaterpumped  }  } 
 
			
		
	
		
			
				
					              ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					              await  MotorData . updateOne ( 
 
			
		
	
		
			
				
					                {  customerId ,  motor _id :  motorId ,  start _instance _id :  start _instance _id  } , 
 
			
		
	
		
			
				
					                { 
 
			
		
	
		
			
				
					                  $set :  { 
 
			
		
	
		
			
				
					                    stopTime : stopTime , 
 
			
		
	
		
			
				
					                    stopTime :  req . body .  stopTime , 
 
			
		
	
		
			
				
					                    receiverfinalwaterlevel :  receiverFinalWaterLevel . toString ( ) , 
 
			
		
	
		
			
				
					                    quantity _delivered :  quantityDelivered . toString ( ) 
 
			
		
	
		
			
				
					                  } 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -1188,8 +1512,8 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					              ) ; 
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					          } 
 
			
		
	
		
			
				
					        } ,  60000 ) ; 
 
			
		
	
		
			
				
					      }  else  if  ( req . body . threshold _type  ===  "litres" )  { 
 
			
		
	
		
			
				
					        } ,  60000 ) ;  // 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 ( )  } ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1239,7 +1563,6 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					        
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Update water level threshold
 
 
			
		
	
		
			
				
					       
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Start monitoring water level based on threshold percentage
 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1285,11 +1608,10 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					              ) ; 
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					          } 
 
			
		
	
		
			
				
					        } ,  20000 ) ;  // Check water level every minute
 
 
			
		
	
		
			
				
					        } ,  20000 ) ;  
 
			
		
	
		
			
				
					      } 
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Respond with success message
 
 
			
		
	
		
			
				
					    reply . code ( 200 ) . send ( {  message :  ` Motor  ${ action  ===  "start"  ?  "started"  :  "stopped" }  successfully. `  } ) ; 
 
			
		
	
		
			
				
					  }  catch  ( err )  { 
 
			
		
	
		
			
				
					    // Handle errors
 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -1297,8 +1619,6 @@ exports.motorAction = async (req, reply) => {
 
			
		
	
		
			
				
					  } 
 
			
		
	
		
			
				
					} ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					const  motorActionAuto  =  async  ( req ,  reply )  =>  {  
			
		
	
		
			
				
					  try  { 
 
			
		
	
		
			
				
					    const  customerId  =  req . params . customerId ;