ashok 6 months ago
commit 041f55efc2

@ -1054,19 +1054,13 @@ exports.getMasterSlaveSummary = async (req, reply) => {
const hardwareId = device.hardwareId?.trim();
if (!hardwareId) return device.toObject();
// Fetch latest IoT data
const latestData = await IotData.findOne({ hardwareId })
.sort({ date: -1 })
.lean();
const latestData = await IotData.findOne({ hardwareId }).sort({ date: -1 }).lean();
const enriched = device.toObject();
// Add GSM Connection info (date/time/status) for master
if (latestData?.date) {
const indiaTime = moment.tz(latestData.date, "Asia/Kolkata");
const date = indiaTime.format("DD-MM-YYYY");
const time = indiaTime.format("HH:mm:ss");
const now = moment.tz("Asia/Kolkata");
const diffInMinutes = now.diff(indiaTime, "minutes");
const isGSMConnected = diffInMinutes <= 1;
@ -1076,16 +1070,15 @@ exports.getMasterSlaveSummary = async (req, reply) => {
enriched.connected_gsm_date = date;
enriched.connected_gsm_time = time;
enriched.gsm_connected_status = gsmStatus;
enriched.gsm_last_check_time = indiaTime.format("YYYY-MM-DD HH:mm:ss");
}
}
// Add LoRa Connection info for slaves (per-tank)
if (latestData?.tanks && Array.isArray(latestData.tanks)) {
const enrichedTanks = latestData.tanks.map(tank => {
const tankMoment = moment.tz(tank.date, "Asia/Kolkata");
const tankDiff = moment.tz("Asia/Kolkata").diff(tankMoment, "minutes");
const loraStatus = tankDiff <= 1 ? "connected" : "disconnected";
return {
...tank,
connected_status: loraStatus
@ -1094,36 +1087,36 @@ exports.getMasterSlaveSummary = async (req, reply) => {
enriched.tanks = enrichedTanks;
// Update LoRa status for the device itself (if slave)
if (device.type === 'slave') {
const connectedTank = enrichedTanks.find(tank => tank.tankhardwareId === device.hardwareId);
enriched.lora_connected_status = connectedTank ? connectedTank.connected_status : "disconnected";
enriched.connected_lora_date = connectedTank ? connectedTank.date : null;
enriched.connected_lora_date = connectedTank ? moment(connectedTank.date).tz("Asia/Kolkata").format("DD-MM-YYYY") : null;
enriched.connected_lora_time = connectedTank ? connectedTank.time : null;
enriched.lora_last_check_time = connectedTank ? moment(connectedTank.date).tz("Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss") : null;
}
}
// Remove GSM fields for slave devices and LoRa fields for master devices
if (device.type === 'slave') {
delete enriched.connected_gsm_date;
delete enriched.connected_gsm_time;
delete enriched.gsm_connected_status;
delete enriched.gsm_last_check_time;
}
if (device.type === 'master') {
delete enriched.connected_lora_date;
delete enriched.connected_lora_time;
delete enriched.lora_connected_status;
delete enriched.lora_last_check_time;
delete enriched.tanks; // ✅ Remove tanks for master
}
return enriched;
};
// Enrich masters and slaves with timestamps and connection statuses
const enrichedMasters = await Promise.all(masters.map(enrichDeviceWithTimestamp));
const enrichedSlaves = await Promise.all(slaves.map(enrichDeviceWithTimestamp));
// Match slaves to their masters
const masterSummary = enrichedMasters.map(master => {
const connectedSlaves = enrichedSlaves.filter(slave => slave.connected_to === master.connected_to);
return {

Loading…
Cancel
Save