|  |  |  | @ -1000,14 +1000,12 @@ exports.getMasterSlaveSummary = async (req, reply) => { | 
			
		
	
		
			
				
					|  |  |  |  |       return reply.status(400).send({ message: "Missing customerId" }); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Get all devices for customer
 | 
			
		
	
		
			
				
					|  |  |  |  |     const allDevices = await Insensors.find({ customerId }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Separate masters and slaves
 | 
			
		
	
		
			
				
					|  |  |  |  |     const masters = allDevices.filter(device => device.type === 'master'); | 
			
		
	
		
			
				
					|  |  |  |  |     const slaves = allDevices.filter(device => device.type === 'slave'); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Update connected_status for each sensor
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Update connection status and timestamps
 | 
			
		
	
		
			
				
					|  |  |  |  |     const updateStatusPromises = allDevices.map(async device => { | 
			
		
	
		
			
				
					|  |  |  |  |       const hwId = device.connected_to; | 
			
		
	
		
			
				
					|  |  |  |  |       if (!hwId) return; | 
			
		
	
	
		
			
				
					|  |  |  | @ -1017,11 +1015,13 @@ exports.getMasterSlaveSummary = async (req, reply) => { | 
			
		
	
		
			
				
					|  |  |  |  |         .lean(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       let status = "disconnected"; | 
			
		
	
		
			
				
					|  |  |  |  |       let updateFields = {}; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (latestData?.date) { | 
			
		
	
		
			
				
					|  |  |  |  |         const now = moment(); | 
			
		
	
		
			
				
					|  |  |  |  |         const lastSeen = moment(latestData.date); | 
			
		
	
		
			
				
					|  |  |  |  |         const diff = now.diff(lastSeen, 'minutes'); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (diff <= 10) { | 
			
		
	
		
			
				
					|  |  |  |  |           status = "connected"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1030,46 +1030,47 @@ exports.getMasterSlaveSummary = async (req, reply) => { | 
			
		
	
		
			
				
					|  |  |  |  |           const time = dateObj.toTimeString().split(" ")[0]; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |           if (device.type === 'master') { | 
			
		
	
		
			
				
					|  |  |  |  |             updateFields.connected_gsm_date = date; | 
			
		
	
		
			
				
					|  |  |  |  |             updateFields.connected_gsm_time = time; | 
			
		
	
		
			
				
					|  |  |  |  |             device.connected_gsm_date = date; | 
			
		
	
		
			
				
					|  |  |  |  |             device.connected_gsm_time = time; | 
			
		
	
		
			
				
					|  |  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |           if (device.type === 'slave') { | 
			
		
	
		
			
				
					|  |  |  |  |             updateFields.connected_lora_date = date; | 
			
		
	
		
			
				
					|  |  |  |  |             updateFields.connected_lora_time = time; | 
			
		
	
		
			
				
					|  |  |  |  |             device.connected_lora_date = date; | 
			
		
	
		
			
				
					|  |  |  |  |             device.connected_lora_time = time; | 
			
		
	
		
			
				
					|  |  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       await Insensors.updateOne( | 
			
		
	
		
			
				
					|  |  |  |  |         { _id: device._id }, | 
			
		
	
		
			
				
					|  |  |  |  |         { $set: { connected_status: status } } | 
			
		
	
		
			
				
					|  |  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       updateFields.connected_status = status; | 
			
		
	
		
			
				
					|  |  |  |  |       await Insensors.updateOne({ _id: device._id }, { $set: updateFields }); | 
			
		
	
		
			
				
					|  |  |  |  |       device.connected_status = status; | 
			
		
	
		
			
				
					|  |  |  |  |     }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     await Promise.all(updateStatusPromises); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Map masters to their connected slaves
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Build enriched masters and exclude irrelevant fields
 | 
			
		
	
		
			
				
					|  |  |  |  |     const enrichedMasters = masters.map(master => { | 
			
		
	
		
			
				
					|  |  |  |  |       const masterConnectionId = master.connected_to; | 
			
		
	
		
			
				
					|  |  |  |  |       const masterObj = master.toObject(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       // Remove lora fields for master
 | 
			
		
	
		
			
				
					|  |  |  |  |       const masterObj = { | 
			
		
	
		
			
				
					|  |  |  |  |         ...master.toObject(), | 
			
		
	
		
			
				
					|  |  |  |  |         connected_lora_date: undefined, | 
			
		
	
		
			
				
					|  |  |  |  |         connected_lora_time: undefined | 
			
		
	
		
			
				
					|  |  |  |  |       }; | 
			
		
	
		
			
				
					|  |  |  |  |       // Remove LoRa fields from master response
 | 
			
		
	
		
			
				
					|  |  |  |  |       delete masterObj.connected_lora_date; | 
			
		
	
		
			
				
					|  |  |  |  |       delete masterObj.connected_lora_time; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       const masterConnectionId = master.connected_to; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       const connectedSlaves = slaves | 
			
		
	
		
			
				
					|  |  |  |  |         .filter(slave => slave.connected_to === masterConnectionId) | 
			
		
	
		
			
				
					|  |  |  |  |         .map(slave => { | 
			
		
	
		
			
				
					|  |  |  |  |           const slaveObj = { | 
			
		
	
		
			
				
					|  |  |  |  |             ...slave.toObject(), | 
			
		
	
		
			
				
					|  |  |  |  |             connected_gsm_date: undefined, | 
			
		
	
		
			
				
					|  |  |  |  |             connected_gsm_time: undefined | 
			
		
	
		
			
				
					|  |  |  |  |           }; | 
			
		
	
		
			
				
					|  |  |  |  |           const slaveObj = slave.toObject(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |           // Remove GSM fields from slave response
 | 
			
		
	
		
			
				
					|  |  |  |  |           delete slaveObj.connected_gsm_date; | 
			
		
	
		
			
				
					|  |  |  |  |           delete slaveObj.connected_gsm_time; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |           return slaveObj; | 
			
		
	
		
			
				
					|  |  |  |  |         }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |