|
|
|
@ -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;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|