| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2843,19 +2843,19 @@ exports.motorAction = async (req, reply) => {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const { customerId } = req.params;
 | 
					 | 
					 | 
					 | 
					    const { customerId } = req.params;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const { action, motor_id: motorId, start_instance_id, phone, threshold_type, manual_threshold_time, manual_threshold_litres } = req.body;
 | 
					 | 
					 | 
					 | 
					    const { action, motor_id: motorId, start_instance_id, phone, threshold_type, manual_threshold_time, manual_threshold_litres } = req.body;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    
 | 
					 | 
					 | 
					 | 
					    
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!motorId) throw new Error("Motor ID is required.");
 | 
					 | 
					 | 
					 | 
					    // if (!motorId) throw new Error("Motor ID is required.");
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const users = await User.findOne({ customerId });
 | 
					 | 
					 | 
					 | 
					    // const users = await User.findOne({ customerId });
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!users) return reply.status(404).send({ error: "User not found" });
 | 
					 | 
					 | 
					 | 
					    // if (!users) return reply.status(404).send({ error: "User not found" });
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    
 | 
					 | 
					 | 
					 | 
					    
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    let loggedInUser = users.phone === phone ? 
 | 
					 | 
					 | 
					 | 
					    // let loggedInUser = users.phone === phone ? 
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      { role: "Customer", name: users.username, phone: users.phone } : 
 | 
					 | 
					 | 
					 | 
					    //   { role: "Customer", name: users.username, phone: users.phone } : 
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      users.staff?.staff?.find(staff => staff.phone === phone) ?
 | 
					 | 
					 | 
					 | 
					    //   users.staff?.staff?.find(staff => staff.phone === phone) ?
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      { role: "Staff", name: users.staff.staff.find(staff => staff.phone === phone).name, phone } : null;
 | 
					 | 
					 | 
					 | 
					    //   { role: "Staff", name: users.staff.staff.find(staff => staff.phone === phone).name, phone } : null;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    
 | 
					 | 
					 | 
					 | 
					    
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!loggedInUser) return reply.status(404).send({ error: "User not found" });
 | 
					 | 
					 | 
					 | 
					    // if (!loggedInUser) return reply.status(404).send({ error: "User not found" });
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    
 | 
					 | 
					 | 
					 | 
					    
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const fcmToken = users.fcmIds ? users.fcmIds.filter(id => id) : [];
 | 
					 | 
					 | 
					 | 
					    // const fcmToken = users.fcmIds ? users.fcmIds.filter(id => id) : [];
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const receiverTank = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() });
 | 
					 | 
					 | 
					 | 
					    const receiverTank = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() });
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!receiverTank) throw new Error("Receiver tank not found.");
 | 
					 | 
					 | 
					 | 
					    if (!receiverTank) throw new Error("Receiver tank not found.");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    
 | 
					 | 
					 | 
					 | 
					    
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2892,7 +2892,7 @@ exports.motorAction = async (req, reply) => {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }}
 | 
					 | 
					 | 
					 | 
					        }}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      );
 | 
					 | 
					 | 
					 | 
					      );
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      
 | 
					 | 
					 | 
					 | 
					      
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     eventEmitter.emit("motorStart", customerId, fcmToken, tankName, blockName, startTime, "Mobile APP", manual_threshold_time, typeOfWater, motorId, loggedInUser.phone);
 | 
					 | 
					 | 
					 | 
					    // eventEmitter.emit("motorStart", customerId, fcmToken, tankName, blockName, startTime, "Mobile APP", manual_threshold_time, typeOfWater, motorId, loggedInUser.phone);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      //this.publishMotorStopStatus(motorId, motorStopStatus);
 | 
					 | 
					 | 
					 | 
					      //this.publishMotorStopStatus(motorId, motorStopStatus);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      reply.code(200).send({ message: "Motor started successfully." });
 | 
					 | 
					 | 
					 | 
					      reply.code(200).send({ message: "Motor started successfully." });
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      
 | 
					 | 
					 | 
					 | 
					      
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2958,32 +2958,32 @@ exports.motorAction = async (req, reply) => {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          //    blockName                 
 | 
					 | 
					 | 
					 | 
					          //    blockName                 
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          // );
 | 
					 | 
					 | 
					 | 
					          // );
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const notificationKey = `${customerId}_${motorId}_threshold`;
 | 
					 | 
					 | 
					 | 
					    // const notificationKey = `${customerId}_${motorId}_threshold`;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Check if the notification has already been sent
 | 
					 | 
					 | 
					 | 
					    // // Check if the notification has already been sent
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!notificationTracker.get(notificationKey)) {
 | 
					 | 
					 | 
					 | 
					    // if (!notificationTracker.get(notificationKey)) {
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        console.log("Sending threshold time notification...");
 | 
					 | 
					 | 
					 | 
					    //     console.log("Sending threshold time notification...");
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        
 | 
					 | 
					 | 
					 | 
					        
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        eventEmitter.emit(
 | 
					 | 
					 | 
					 | 
					    //     eventEmitter.emit(
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            "sendThresholdTimeNotification",
 | 
					 | 
					 | 
					 | 
					    //         "sendThresholdTimeNotification",
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            customerId,
 | 
					 | 
					 | 
					 | 
					    //         customerId,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            fcmToken,
 | 
					 | 
					 | 
					 | 
					    //         fcmToken,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            manual_threshold_time,
 | 
					 | 
					 | 
					 | 
					    //         manual_threshold_time,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            motorId,
 | 
					 | 
					 | 
					 | 
					    //         motorId,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            tankName,
 | 
					 | 
					 | 
					 | 
					    //         tankName,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            blockName
 | 
					 | 
					 | 
					 | 
					    //         blockName
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        );
 | 
					 | 
					 | 
					 | 
					    //     );
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // Mark notification as sent
 | 
					 | 
					 | 
					 | 
					    //     // Mark notification as sent
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        notificationTracker.set(notificationKey, true);
 | 
					 | 
					 | 
					 | 
					    //     notificationTracker.set(notificationKey, true);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // Optionally, reset the flag after some time (e.g., 24 hours)
 | 
					 | 
					 | 
					 | 
					    //     // Optionally, reset the flag after some time (e.g., 24 hours)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        setTimeout(() => {
 | 
					 | 
					 | 
					 | 
					    //     setTimeout(() => {
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            notificationTracker.delete(notificationKey);
 | 
					 | 
					 | 
					 | 
					    //         notificationTracker.delete(notificationKey);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }, 24 * 60 * 60 * 1000); // Reset after 24 hours
 | 
					 | 
					 | 
					 | 
					    //     }, 24 * 60 * 60 * 1000); // Reset after 24 hours
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } else {
 | 
					 | 
					 | 
					 | 
					    // } else {
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        console.log("Notification already sent, skipping...");
 | 
					 | 
					 | 
					 | 
					    //     console.log("Notification already sent, skipping...");
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    // }
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const currentTime = moment().tz('Asia/Kolkata').format('DD-MMM-YYYY - HH:mm');
 | 
					 | 
					 | 
					 | 
					    const currentTime = moment().tz('Asia/Kolkata').format('DD-MMM-YYYY - HH:mm');
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            await Tank.updateOne(
 | 
					 | 
					 | 
					 | 
					            await Tank.updateOne(
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3191,7 +3191,7 @@ async function stopMotor(motorId, customerId, start_instance_id) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    delete motorIntervals[motorId];
 | 
					 | 
					 | 
					 | 
					    delete motorIntervals[motorId];
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  eventEmitter.emit("motorStop", customerId, [], "", "", currentTime, "Mobile APP", 0, "", motorId, "");
 | 
					 | 
					 | 
					 | 
					  //eventEmitter.emit("motorStop", customerId, [], "", "", currentTime, "Mobile APP", 0, "", motorId, "");
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  
 | 
					 | 
					 | 
					 | 
					  
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const motorData = await MotorData.findOne({ customerId, motor_id: motorId, start_instance_id });
 | 
					 | 
					 | 
					 | 
					  const motorData = await MotorData.findOne({ customerId, motor_id: motorId, start_instance_id });
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (motorData) {
 | 
					 | 
					 | 
					 | 
					  if (motorData) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |