From a39e198cb966ba1ed1f53784a8e765dac46dbed3 Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Tue, 20 May 2025 10:50:52 +0530 Subject: [PATCH] support all disconnect issues --- src/controllers/installationController.js | 595 ++++++++++++++++------ 1 file changed, 434 insertions(+), 161 deletions(-) diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index 95771a02..db7cafef 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -2760,16 +2760,18 @@ exports.raiseATicket = async (req, reply) => { if (issuesToAdd.length > 0) { const supportRecord = await Support.findOne({ supportId: "AWHYSU64" }); + if (supportRecord) { await Support.findOneAndUpdate( - { _id: supportRecord._id }, + { supportId: "AWHYSU64" }, { $push: { issues: { $each: issuesToAdd } }, - updatedAt: new Date() + $set: { updatedAt: new Date(), lastTicketRaisedAt: moment().tz("Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss") } } ); } } + const masterDetails = { hardwareId: connected_to, @@ -3044,21 +3046,15 @@ exports.raiseATicketBuildingDetails = async (req, reply) => { }; - exports.raiseATicketSlave = async (req, reply) => { try { - const { customerId, connected_to, tankHardwareId } = req.params; + const { customerId, connected_to } = req.params; if (!customerId || !connected_to) { return reply.code(400).send({ error: "customerId and connected_to are required" }); } const sensors = await Insensors.find({ customerId }); - - if (!sensors.length) { - return reply.code(404).send({ message: "No sensors found for this customer." }); - } - const masterSensor = sensors.find(s => s.hardwareId?.trim() === connected_to.trim()); if (!masterSensor) { @@ -3071,121 +3067,385 @@ exports.raiseATicketSlave = async (req, reply) => { return reply.code(404).send({ message: "No IoT data found for this hardwareId." }); } - const now = moment.tz("Asia/Kolkata"); + const now = moment().tz("Asia/Kolkata"); const masterTime = moment.tz(latestMasterRecord.date, "Asia/Kolkata"); - const masterDiff = now.diff(masterTime, "minutes"); + const diff = now.diff(masterTime, "minutes"); - const masterDisconnected = masterDiff > 1 ? [{ + const gsm_connected_status = diff <= 1 ? "connected" : "disconnected"; + const gsmStatus = gsm_connected_status === "connected" ? "GSM Connected" : "GSM Disconnected"; + + const formattedTime = masterTime.format("HH:mm:ss"); + const formattedDate = masterTime.format("DD-MM-YYYY"); + + const tanks = (latestMasterRecord.tanks || []).map(tank => { + const tankTime = moment.tz(tank.date, "Asia/Kolkata"); + const timeDiff = now.diff(tankTime, "minutes"); + + return { + ...tank, + time: tankTime.format("HH:mm:ss"), + connected_status: timeDiff <= 1 ? "connected" : "disconnected" + }; + }); + + const responseData = { hardwareId: connected_to, - masterName: masterSensor.tankName || "Unknown Master", - }] : []; + gsm_connected_status, + gsmStatus, + connected_gsm_date: formattedDate, + connected_gsm_time: formattedTime, + gsm_last_check_time: now.format("DD-MM-YYYY HH:mm:ss"), + tanks, + date: latestMasterRecord.date, + time: formattedTime + }; - let connectedSlaves = sensors.filter(sensor => - sensor.connected_to?.trim() === connected_to.trim() && - sensor.type === "slave" - ); + return reply.send({ + status_code: 200, + message: "Success", + data: responseData + }); - if (tankHardwareId) { - connectedSlaves = connectedSlaves.filter(s => s.hardwareId?.trim() === tankHardwareId.trim()); - } + } catch (error) { + console.error("Error in raiseATicketSlave:", error); + return reply.code(500).send({ error: "Internal server error" }); + } +}; - const disconnectedSlaves = []; - for (const slave of connectedSlaves) { - const slaveId = slave.hardwareId?.trim(); - const matchedTank = latestMasterRecord.tanks.find(tank => tank.tankhardwareId === slaveId); - if (matchedTank?.date) { - const tankTime = moment.tz(matchedTank.date, "Asia/Kolkata"); - const loraDiff = now.diff(tankTime, "minutes"); - if (loraDiff > 1) { - disconnectedSlaves.push({ - hardwareId: connected_to, - slaveHardwareId: slaveId, - slaveName: slave.tankName || "Unknown Slave" - }); - } - } - } - const issuesToAdd = []; - // Check for existing GSM issue - if (masterDisconnected.length > 0) { - const existingGsmIssue = await Support.findOne({ - "issues.hardwareId": connected_to, - "issues.type": "GSM Disconnected" - }); +// exports.getDisconnectedIssuesBySupportId = async (req, reply) => { +// try { +// const { supportId } = req.params; - if (!existingGsmIssue) { - issuesToAdd.push({ - type: "GSM Disconnected", - hardwareId: connected_to, - message: `Master GSM disconnected - ${connected_to}` - }); - } - } +// if (!supportId) { +// return reply.code(400).send({ error: "supportId is required" }); +// } - // Check for new LoRa issues - const newSlaveHardwareIds = []; - const newSlaveNames = []; +// const supportRecord = await Support.findOne({ supportId }).lean(); +// if (!supportRecord) { +// return reply.code(404).send({ message: "No support record found for this supportId" }); +// } - for (const slave of disconnectedSlaves) { - const existingSlaveIssue = await Support.findOne({ - "issues.hardwareIds": slave.slaveHardwareId, - "issues.masterHardwareId": connected_to, - "issues.type": "LoRa Disconnected" - }); +// const allIssues = supportRecord.issues || []; +// const hardwareSet = new Set(); - if (!existingSlaveIssue) { - newSlaveHardwareIds.push(slave.slaveHardwareId); - newSlaveNames.push(slave.slaveName); - } - } +// // Collect all hardware IDs from issues +// for (const issue of allIssues) { +// if (issue.hardwareId) hardwareSet.add(issue.hardwareId); // GSM +// if (Array.isArray(issue.hardwareIds)) { +// issue.hardwareIds.forEach(id => hardwareSet.add(id)); // LoRa slaves +// } +// if (issue.masterHardwareId) hardwareSet.add(issue.masterHardwareId); // LoRa master +// } - if (newSlaveHardwareIds.length > 0) { - issuesToAdd.push({ - type: "LoRa Disconnected", - masterHardwareId: connected_to, - hardwareIds: newSlaveHardwareIds, - slaveNames: newSlaveNames, - message: `Slaves LoRa disconnected under master ${connected_to}` - }); - } +// const hardwareIds = [...hardwareSet]; +// const sensors = await Insensors.find({ hardwareId: { $in: hardwareIds } }).lean(); +// console.log("sensors",sensors) +// // Map sensors by hardwareId +// const sensorMap = {}; +// for (const sensor of sensors) { +// sensorMap[sensor.hardwareId] = sensor; +// } - if (issuesToAdd.length > 0) { - const supportRecord = await Support.findOne({ supportId: "AWHYSU64" }); +// const masterMap = {}; + +// for (const issue of allIssues) { +// // GSM Disconnected +// if (issue.type === "GSM or LoRa Disconnected" && issue.hardwareId) { +// const sensor = sensorMap[issue.hardwareId]; +// if (sensor && sensor.type === "master") { +// masterMap[sensor.hardwareId] = { +// hardwareId: sensor.hardwareId, +// masterName: sensor.masterName || null, +// location: sensor.location || "", +// type: "master", +// connected_status: sensor.connected_status, +// gsm_last_check_time: sensor.gsm_last_check_time, +// gsm_last_disconnect_time: sensor.gsm_last_disconnect_time, +// connected_gsm_date: sensor.connected_gsm_date, +// connected_gsm_time: sensor.connected_gsm_time, +// connected_lora_date: sensor.connected_lora_date, +// connected_lora_time: sensor.connected_lora_time, +// support_gsm_last_check_time: sensor.support_gsm_last_check_time, +// connected_slave_count: 0, +// connected_slaves: [] +// }; +// } +// } - if (supportRecord) { - await Support.findOneAndUpdate( - { _id: supportRecord._id }, - { - $push: { - issues: { $each: issuesToAdd } - }, - updatedAt: new Date() - }, - { new: true } - ); - } else { - console.error("Support record not found for supportId AWHYSU64"); - } - } +// // LoRa Disconnected +// if (issue.type === "GSM or LoRa Disconnected" && issue.masterHardwareId) { +// const masterSensor = sensorMap[issue.masterHardwareId]; +// if (!masterSensor || masterSensor.type !== "master") continue; + +// if (!masterMap[masterSensor.hardwareId]) { +// masterMap[masterSensor.hardwareId] = { +// hardwareId: masterSensor.hardwareId, +// masterName: masterSensor.masterName || null, +// location: masterSensor.location || "", +// type: "master", +// connected_status: masterSensor.connected_status, +// gsm_last_check_time: masterSensor.gsm_last_check_time, +// gsm_last_disconnect_time: masterSensor.gsm_last_disconnect_time, +// connected_gsm_date: masterSensor.connected_gsm_date, +// connected_gsm_time: masterSensor.connected_gsm_time, +// connected_lora_date: masterSensor.connected_lora_date, +// connected_lora_time: masterSensor.connected_lora_time, +// support_lora_last_check_time: masterSensor.support_lora_last_check_time, +// connected_slave_count: 0, +// connected_slaves: [] +// }; +// } - return reply.send({ - status_code: 200, - message: "Checked connection and updated support if needed.", - masterDisconnected, - disconnectedSlaves - }); +// const master = masterMap[masterSensor.hardwareId]; - } catch (error) { - console.error("Error raising ticket (slave):", error); - return reply.code(500).send({ error: "Internal server error" }); - } -}; +// // First try from issue.hardwareIds +// let slaveIds = Array.isArray(issue.hardwareIds) ? issue.hardwareIds : []; +// // If empty, fallback to slaves connected to this master +// // If empty, fallback to slaves connected to this master's tankHardwareId +// console.log("slaveIds",slaveIds) +// if (slaveIds.length === 0) { +// // fallback: find slaves connected to this master hardwareId +// const fallbackSlaves = await Insensors.find({ +// connected_to: issue.masterHardwareId, // or masterSensor.hardwareId +// type: "slave" +// }).lean(); + +// console.log("fallbackSlaves", fallbackSlaves); +// for (const slaveSensor of fallbackSlaves) { +// master.connected_slaves.push({ +// hardwareId: slaveSensor.hardwareId, +// tankName: slaveSensor.tankName || "", +// location: slaveSensor.location || "", +// connected_status: slaveSensor.connected_status, +// connected_lora_time: slaveSensor.connected_lora_time, +// connected_lora_date: slaveSensor.connected_lora_date, +// lora_last_check_time: slaveSensor.lora_last_check_time, +// lora_last_disconnect_time: slaveSensor.lora_last_disconnect_time, +// connected_to: slaveSensor.connected_to, +// masterName: master.masterName, +// type: "slave", +// typeOfWater: slaveSensor.typeOfWater, +// tankHeight: slaveSensor.tankHeight, +// support_lora_last_check_time: slaveSensor.support_lora_last_check_time, +// }); +// master.connected_slave_count++; +// } +// } + +// else { +// // Populate slaves based on provided hardwareIds +// for (const slaveId of slaveIds) { +// const slaveSensor = sensorMap[slaveId]; +// if (slaveSensor && slaveSensor.type === "slave") { +// master.connected_slaves.push({ +// hardwareId: slaveSensor.hardwareId, +// tankName: slaveSensor.tankName || "", +// location: slaveSensor.location || "", +// connected_status: slaveSensor.connected_status, +// connected_lora_time: slaveSensor.connected_lora_time, +// connected_lora_date: slaveSensor.connected_lora_date, +// lora_last_check_time: slaveSensor.lora_last_check_time, +// lora_last_disconnect_time: slaveSensor.lora_last_disconnect_time, +// connected_to: slaveSensor.connected_to, +// masterName: master.masterName, +// type: "slave", +// typeOfWater: slaveSensor.typeOfWater, +// tankHeight: slaveSensor.tankHeight, +// support_lora_last_check_time: slaveSensor.support_lora_last_check_time, +// }); +// master.connected_slave_count++; +// } +// } +// } +// } +// } + +// const finalResponse = Object.values(masterMap); + +// return reply.send({ +// status_code: 200, +// supportId, +// totalMasters: finalResponse.length, +// disconnectedIssues: finalResponse +// }); + +// } catch (error) { +// console.error("Error fetching disconnected issues:", error); +// return reply.code(500).send({ error: "Internal server error" }); +// } +// }; + +// exports.getDisconnectedIssuesBySupportId = async (req, reply) => { +// try { +// const { supportId } = req.params; + +// if (!supportId) { +// return reply.code(400).send({ error: "supportId is required" }); +// } + +// const supportRecord = await Support.findOne({ supportId }).lean(); +// if (!supportRecord) { +// return reply.code(404).send({ message: "No support record found for this supportId" }); +// } + +// const allIssues = supportRecord.issues || []; +// const hardwareSet = new Set(); + +// // Collect all hardware IDs and tankHardwareIds from issues +// for (const issue of allIssues) { +// if (issue.hardwareId) hardwareSet.add(issue.hardwareId); // GSM +// if (Array.isArray(issue.hardwareIds)) { +// issue.hardwareIds.forEach(id => hardwareSet.add(id)); // LoRa slaves +// } +// if (issue.masterHardwareId) hardwareSet.add(issue.masterHardwareId); // LoRa master +// } + +// const hardwareIds = [...hardwareSet]; +// const sensors = await Insensors.find({ +// $or: [ +// { hardwareId: { $in: hardwareIds } }, +// { tankHardwareId: { $in: hardwareIds } } +// ] +// }).lean(); + +// const customerId = supportRecord.customerId; +// const orders = await Order.find({ customerId }).lean(); + +// const orderMap = {}; +// for (const order of orders) { +// if (Array.isArray(order.master_connections)) { +// order.master_connections.forEach(conn => { +// if (conn.hardwareId) { +// orderMap[conn.hardwareId] = { +// masterName: conn.master_name || null, +// location: conn.location || null +// }; +// } +// }); +// } +// } +// // Map sensors by both hardwareId and tankHardwareId +// const sensorMap = {}; +// for (const sensor of sensors) { +// if (sensor.hardwareId) sensorMap[sensor.hardwareId] = sensor; +// if (sensor.tankHardwareId) sensorMap[sensor.tankHardwareId] = sensor; +// } + +// const masterMap = {}; + +// for (const issue of allIssues) { +// // GSM Disconnected +// if (issue.type === "GSM or LoRa Disconnected" && issue.hardwareId) { +// const sensor = sensorMap[issue.hardwareId]; +// if (sensor && sensor.type === "master") { +// const enriched = orderMap[sensor.hardwareId] || {}; +// masterMap[sensor.hardwareId] = { +// hardwareId: sensor.hardwareId, +// masterName: enriched.masterName || sensor.masterName || null, +// location: enriched.location || sensor.location || "", +// type: "master", +// connected_status: sensor.connected_status, +// gsm_last_check_time: sensor.gsm_last_check_time, +// gsm_last_disconnect_time: sensor.gsm_last_disconnect_time, +// connected_gsm_date: sensor.connected_gsm_date, +// connected_gsm_time: sensor.connected_gsm_time, +// connected_lora_date: sensor.connected_lora_date, +// connected_lora_time: sensor.connected_lora_time, +// support_gsm_last_check_time: sensor.support_gsm_last_check_time, +// connected_slave_count: 0, +// connected_slaves: [] +// }; +// } +// } + +// // LoRa Disconnected +// if (issue.type === "GSM or LoRa Disconnected" && issue.masterHardwareId) { +// const masterSensor = sensorMap[issue.masterHardwareId]; +// if (!masterSensor || masterSensor.type !== "master") continue; + +// if (!masterMap[masterSensor.hardwareId]) { +// masterMap[masterSensor.hardwareId] = { +// hardwareId: masterSensor.hardwareId, +// masterName: masterSensor.masterName || null, +// location: masterSensor.location || "", +// type: "master", +// connected_status: masterSensor.connected_status, +// gsm_last_check_time: masterSensor.gsm_last_check_time, +// gsm_last_disconnect_time: masterSensor.gsm_last_disconnect_time, +// connected_gsm_date: masterSensor.connected_gsm_date, +// connected_gsm_time: masterSensor.connected_gsm_time, +// connected_lora_date: masterSensor.connected_lora_date, +// connected_lora_time: masterSensor.connected_lora_time, +// support_lora_last_check_time: masterSensor.support_lora_last_check_time, +// connected_slave_count: 0, +// connected_slaves: [] +// }; +// } + +// const master = masterMap[masterSensor.hardwareId]; +// let slaveIds = Array.isArray(issue.hardwareIds) ? issue.hardwareIds : []; +// console.log("slaveIds",slaveIds) +// let fallbackSlaves = []; + +// if (slaveIds.length > 0) { +// // Try to fetch slaves by hardwareId or tankHardwareId +// fallbackSlaves = await Insensors.find({ +// $or: [ +// { hardwareId: { $in: slaveIds } }, +// { tankhardwareId: { $in: slaveIds } } +// ], +// type: "slave" +// }).lean(); +// } else { +// // Fallback: find by connected_to field +// fallbackSlaves = await Insensors.find({ +// connected_to: issue.masterHardwareId, +// type: "slave" +// }).lean(); +// } + +// for (const slaveSensor of fallbackSlaves) { +// master.connected_slaves.push({ +// hardwareId: slaveSensor.hardwareId, +// tankName: slaveSensor.tankName || "", +// location: slaveSensor.location || "", +// connected_status: slaveSensor.connected_status, +// connected_lora_time: slaveSensor.connected_lora_time, +// connected_lora_date: slaveSensor.connected_lora_date, +// lora_last_check_time: slaveSensor.lora_last_check_time, +// lora_last_disconnect_time: slaveSensor.lora_last_disconnect_time, +// connected_to: slaveSensor.connected_to, +// masterName: master.masterName, +// type: "slave", +// typeOfWater: slaveSensor.typeOfWater, +// tankHeight: slaveSensor.tankHeight, +// support_lora_last_check_time: slaveSensor.support_lora_last_check_time, +// }); +// master.connected_slave_count++; +// } +// } +// } + +// const finalResponse = Object.values(masterMap); + +// return reply.send({ +// status_code: 200, +// supportId, +// totalMasters: finalResponse.length, +// disconnectedIssues: finalResponse +// }); + +// } catch (error) { +// console.error("Error fetching disconnected issues:", error); +// return reply.code(500).send({ error: "Internal server error" }); +// } +// }; exports.getDisconnectedIssuesBySupportId = async (req, reply) => { try { @@ -3203,7 +3463,7 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => { const allIssues = supportRecord.issues || []; const hardwareSet = new Set(); - // Collect all hardware IDs from issues + // Collect all hardware IDs and tankHardwareIds from issues for (const issue of allIssues) { if (issue.hardwareId) hardwareSet.add(issue.hardwareId); // GSM if (Array.isArray(issue.hardwareIds)) { @@ -3213,25 +3473,51 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => { } const hardwareIds = [...hardwareSet]; - const sensors = await Insensors.find({ hardwareId: { $in: hardwareIds } }).lean(); - // Map sensors by hardwareId + const sensors = await Insensors.find({ + $or: [ + { hardwareId: { $in: hardwareIds } }, + { tankHardwareId: { $in: hardwareIds } } + ] + }).lean(); + + // Map sensors by both hardwareId and tankHardwareId const sensorMap = {}; for (const sensor of sensors) { - sensorMap[sensor.hardwareId] = sensor; + if (sensor.hardwareId) sensorMap[sensor.hardwareId] = sensor; + if (sensor.tankHardwareId) sensorMap[sensor.tankHardwareId] = sensor; + } + + // Fetch Orders using customerId and build a map + const customerId = supportRecord.customerId; + const orders = await Order.find({ customerId }).lean(); + + const orderMap = {}; + for (const order of orders) { + if (Array.isArray(order.master_connections)) { + order.master_connections.forEach(conn => { + if (conn.hardwareId) { + orderMap[conn.hardwareId] = { + masterName: conn.master_name || null, + location: conn.location || null + }; + } + }); + } } const masterMap = {}; for (const issue of allIssues) { // GSM Disconnected - if (issue.type === "GSM Disconnected" && issue.hardwareId) { + if (issue.type === "GSM or LoRa Disconnected" && issue.hardwareId) { const sensor = sensorMap[issue.hardwareId]; if (sensor && sensor.type === "master") { + const enriched = orderMap[sensor.hardwareId] || {}; masterMap[sensor.hardwareId] = { hardwareId: sensor.hardwareId, - masterName: sensor.masterName || null, - location: sensor.location || "", + masterName: enriched.masterName || sensor.masterName || null, + location: enriched.location || sensor.location || "", type: "master", connected_status: sensor.connected_status, gsm_last_check_time: sensor.gsm_last_check_time, @@ -3248,15 +3534,16 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => { } // LoRa Disconnected - if (issue.type === "LoRa Disconnected" && issue.masterHardwareId) { + if (issue.type === "GSM or LoRa Disconnected" && issue.masterHardwareId) { const masterSensor = sensorMap[issue.masterHardwareId]; if (!masterSensor || masterSensor.type !== "master") continue; if (!masterMap[masterSensor.hardwareId]) { + const enriched = orderMap[masterSensor.hardwareId] || {}; masterMap[masterSensor.hardwareId] = { hardwareId: masterSensor.hardwareId, - masterName: masterSensor.masterName || null, - location: masterSensor.location || "", + masterName: enriched.masterName || masterSensor.masterName || null, + location: enriched.location || masterSensor.location || "", type: "master", connected_status: masterSensor.connected_status, gsm_last_check_time: masterSensor.gsm_last_check_time, @@ -3272,56 +3559,42 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => { } const master = masterMap[masterSensor.hardwareId]; - - // First try from issue.hardwareIds let slaveIds = Array.isArray(issue.hardwareIds) ? issue.hardwareIds : []; - - // If empty, fallback to slaves connected to this master - if (slaveIds.length === 0) { - const fallbackSlaves = await Insensors.find({ connected_to: masterSensor.hardwareId, type: "slave" }).lean(); - for (const slaveSensor of fallbackSlaves) { - master.connected_slaves.push({ - hardwareId: slaveSensor.hardwareId, - tankName: slaveSensor.tankName || "", - location: slaveSensor.location || "", - connected_status: slaveSensor.connected_status, - connected_lora_time: slaveSensor.connected_lora_time, - connected_lora_date: slaveSensor.connected_lora_date, - lora_last_check_time: slaveSensor.lora_last_check_time, - lora_last_disconnect_time: slaveSensor.lora_last_disconnect_time, - connected_to: slaveSensor.connected_to, - masterName: master.masterName, - type: "slave", - typeOfWater: slaveSensor.typeOfWater, - tankHeight: slaveSensor.tankHeight, - support_lora_last_check_time: slaveSensor.support_lora_last_check_time, - }); - master.connected_slave_count++; - } + let fallbackSlaves = []; + + if (slaveIds.length > 0) { + fallbackSlaves = await Insensors.find({ + $or: [ + { hardwareId: { $in: slaveIds } }, + { tankhardwareId: { $in: slaveIds } } + ], + type: "slave" + }).lean(); } else { - // Populate slaves based on provided hardwareIds - for (const slaveId of slaveIds) { - const slaveSensor = sensorMap[slaveId]; - if (slaveSensor && slaveSensor.type === "slave") { - master.connected_slaves.push({ - hardwareId: slaveSensor.hardwareId, - tankName: slaveSensor.tankName || "", - location: slaveSensor.location || "", - connected_status: slaveSensor.connected_status, - connected_lora_time: slaveSensor.connected_lora_time, - connected_lora_date: slaveSensor.connected_lora_date, - lora_last_check_time: slaveSensor.lora_last_check_time, - lora_last_disconnect_time: slaveSensor.lora_last_disconnect_time, - connected_to: slaveSensor.connected_to, - masterName: master.masterName, - type: "slave", - typeOfWater: slaveSensor.typeOfWater, - tankHeight: slaveSensor.tankHeight, - support_lora_last_check_time: slaveSensor.support_lora_last_check_time, - }); - master.connected_slave_count++; - } - } + fallbackSlaves = await Insensors.find({ + connected_to: issue.masterHardwareId, + type: "slave" + }).lean(); + } + + for (const slaveSensor of fallbackSlaves) { + master.connected_slaves.push({ + hardwareId: slaveSensor.hardwareId, + tankName: slaveSensor.tankName || "", + location: slaveSensor.location || "", + connected_status: slaveSensor.connected_status, + connected_lora_time: slaveSensor.connected_lora_time, + connected_lora_date: slaveSensor.connected_lora_date, + lora_last_check_time: slaveSensor.lora_last_check_time, + lora_last_disconnect_time: slaveSensor.lora_last_disconnect_time, + connected_to: slaveSensor.connected_to, + masterName: master.masterName, + type: "slave", + typeOfWater: slaveSensor.typeOfWater, + tankHeight: slaveSensor.tankHeight, + support_lora_last_check_time: slaveSensor.support_lora_last_check_time, + }); + master.connected_slave_count++; } } }