master^2
Bhaskar 6 months ago
parent 8a318c49ff
commit fbdac2bbf3

@ -749,6 +749,7 @@ exports.getByHardwareAndTankId = async (req, reply) => {
console.log("📡 Fetching data for:", { hardwareId, tankhardwareId }); console.log("📡 Fetching data for:", { hardwareId, tankhardwareId });
// Get the latest IoT data for the master hardwareId
const latestData = await IotData.findOne({ hardwareId }).sort({ date: -1 }).lean(); const latestData = await IotData.findOne({ hardwareId }).sort({ date: -1 }).lean();
if (!latestData || !Array.isArray(latestData.tanks)) { if (!latestData || !Array.isArray(latestData.tanks)) {
@ -757,18 +758,28 @@ exports.getByHardwareAndTankId = async (req, reply) => {
const now = new Date(); const now = new Date();
const dataDate = new Date(latestData.date); const dataDate = new Date(latestData.date);
// Check master GSM connection (threshold 60 sec)
const isGSMConnected = now - dataDate <= 60000; const isGSMConnected = now - dataDate <= 60000;
// Find the tank for the slave
const matchedTank = latestData.tanks.find(tank => tank.tankhardwareId === tankhardwareId); const matchedTank = latestData.tanks.find(tank => tank.tankhardwareId === tankhardwareId);
if (!matchedTank) { if (!matchedTank) {
return reply.code(404).send({ message: "Tank not found in latest record" }); return reply.code(404).send({ message: "Tank not found in latest record" });
} }
const tankHeight = parseFloat(matchedTank.tankHeight || "0"); const tankHeight = parseFloat(matchedTank.tankHeight || "0");
const isLoraConnected = isGSMConnected && tankHeight > 0;
// Format date and time // If master is disconnected => slave is disconnected too
let isLoraConnected = false;
if (!isGSMConnected) {
isLoraConnected = false;
} else {
// Otherwise use tankHeight to determine LoRa connection
isLoraConnected = tankHeight > 0;
}
// Format tank date/time to IST
const matchedTankDateObj = new Date(matchedTank.date); const matchedTankDateObj = new Date(matchedTank.date);
const formattedDate = moment(matchedTankDateObj).tz("Asia/Kolkata").format("DD-MM-YYYY"); const formattedDate = moment(matchedTankDateObj).tz("Asia/Kolkata").format("DD-MM-YYYY");
const formattedTime = matchedTank.time || moment(matchedTankDateObj).tz("Asia/Kolkata").format("HH:mm:ss"); const formattedTime = matchedTank.time || moment(matchedTankDateObj).tz("Asia/Kolkata").format("HH:mm:ss");
@ -776,33 +787,31 @@ exports.getByHardwareAndTankId = async (req, reply) => {
matchedTank.date = formattedDate; matchedTank.date = formattedDate;
matchedTank.time = formattedTime; matchedTank.time = formattedTime;
// Prepare update object for Insensors collection
const updateFields = { const updateFields = {
connected_status: isLoraConnected ? "connected" : "disconnected", connected_status: isLoraConnected ? "connected" : "disconnected",
connected_lora_date: formattedDate, connected_lora_date: formattedDate,
connected_lora_time: formattedTime, connected_lora_time: formattedTime,
lora_last_check_time: moment().tz("Asia/Kolkata").format("DD-MM-YYYY HH:mm:ss") lora_last_check_time: moment().tz("Asia/Kolkata").format("DD-MM-YYYY HH:mm:ss")
}; };
// Find and update Insensors
const sensorDoc = await Insensors.findOne({ const sensorDoc = await Insensors.findOne({
hardwareId: tankhardwareId, tankhardwareId: tankhardwareId,
connected_to: hardwareId connected_to: hardwareId
}); });
if (!sensorDoc) { if (!sensorDoc) {
console.warn("⚠️ No Insensors doc found for LoRa update:", { tankhardwareId, connected_to: hardwareId }); console.warn("⚠️ No Insensors doc found for LoRa update:", { tankhardwareId, connected_to: hardwareId });
// Optional fallback update only by hardwareId const fallbackDoc = await Insensors.findOne({ tankhardwareId: tankhardwareId });
const fallbackDoc = await Insensors.findOne({ hardwareId: tankhardwareId });
if (fallbackDoc) { if (fallbackDoc) {
await Insensors.updateOne({ _id: fallbackDoc._id }, { $set: updateFields }); await Insensors.updateOne({ _id: fallbackDoc._id }, { $set: updateFields });
console.log("⚠️ Fallback Insensors updated by hardwareId:", fallbackDoc._id); console.log("⚠️ Fallback Insensors updated by tankhardwareId:", fallbackDoc._id);
} }
} else { } else {
await Insensors.updateOne({ _id: sensorDoc._id }, { $set: updateFields }); await Insensors.updateOne({ _id: sensorDoc._id }, { $set: updateFields });
console.log("✅ Insensors LoRa status updated:", sensorDoc._id); console.log("✅ Insensors LoRa status updated:", sensorDoc._id);
} }
return reply.send({ return reply.send({
status_code: 200, status_code: 200,
message: isLoraConnected ? "LoRa connected" : "LoRa not connected", message: isLoraConnected ? "LoRa connected" : "LoRa not connected",
@ -823,6 +832,7 @@ exports.getByHardwareAndTankId = async (req, reply) => {
exports.getByHardwareAndTankIdSupport = async (req, reply) => { exports.getByHardwareAndTankIdSupport = async (req, reply) => {
try { try {
const { hardwareId, tankhardwareId } = req.params; const { hardwareId, tankhardwareId } = req.params;

Loading…
Cancel
Save