|
|
@ -216,24 +216,29 @@ exports.getTank = async (req, reply) => {
|
|
|
|
|
|
|
|
|
|
|
|
const transformedDocs = docs.map((tank) => {
|
|
|
|
const transformedDocs = docs.map((tank) => {
|
|
|
|
const inputConnections = tank.connections?.inputConnections || [];
|
|
|
|
const inputConnections = tank.connections?.inputConnections || [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Count switches
|
|
|
|
const switchCount = inputConnections.reduce((count, connection) => {
|
|
|
|
const switchCount = inputConnections.reduce((count, connection) => {
|
|
|
|
return count + (connection.inputismotor === true ? 1 : 0);
|
|
|
|
return count + (connection.inputismotor === true ? 1 : 0);
|
|
|
|
}, 0);
|
|
|
|
}, 0);
|
|
|
|
|
|
|
|
totalSwitchCount += switchCount;
|
|
|
|
|
|
|
|
|
|
|
|
totalSwitchCount += switchCount; // Accumulate the switch_count
|
|
|
|
// Count sensors
|
|
|
|
|
|
|
|
|
|
|
|
// Check if the tank has need_sensor set to "yes"
|
|
|
|
|
|
|
|
if (tank.need_sensor?.toLowerCase() === "yes") {
|
|
|
|
if (tank.need_sensor?.toLowerCase() === "yes") {
|
|
|
|
totalSensorCount++;
|
|
|
|
totalSensorCount++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Add the switch_count field inside connections
|
|
|
|
// Determine all_motor_status
|
|
|
|
|
|
|
|
const allMotorStatus = inputConnections.some(connection => connection.motor_status === "2");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Add switch_count and all_motor_status to the response
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
...tank.toObject(), // Convert Mongoose document to plain object
|
|
|
|
...tank.toObject(), // Convert Mongoose document to plain object
|
|
|
|
connections: {
|
|
|
|
connections: {
|
|
|
|
...tank.connections,
|
|
|
|
...tank.connections,
|
|
|
|
switch_count: switchCount,
|
|
|
|
switch_count: switchCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
all_motor_status: allMotorStatus, // Add all_motor_status field
|
|
|
|
};
|
|
|
|
};
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
@ -241,8 +246,8 @@ exports.getTank = async (req, reply) => {
|
|
|
|
status_code: 200,
|
|
|
|
status_code: 200,
|
|
|
|
data: transformedDocs,
|
|
|
|
data: transformedDocs,
|
|
|
|
count: transformedDocs.length,
|
|
|
|
count: transformedDocs.length,
|
|
|
|
total_switch_count: totalSwitchCount, // Add the total switch count
|
|
|
|
total_switch_count: totalSwitchCount,
|
|
|
|
total_sensor_count: totalSensorCount, // Add the total sensor count
|
|
|
|
total_sensor_count: totalSensorCount,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.catch((err) => {
|
|
|
|
.catch((err) => {
|
|
|
@ -2262,22 +2267,8 @@ console.log(fcmToken)
|
|
|
|
// const stopMessage = `The motor supplying water to '${tankName}' in block '${blockName}' was stopped manually at ${stopTime}.`;
|
|
|
|
// const stopMessage = `The motor supplying water to '${tankName}' in block '${blockName}' was stopped manually at ${stopTime}.`;
|
|
|
|
// eventEmitter.emit("sendMotorStopNotification", fcmToken, stopMessage);
|
|
|
|
// eventEmitter.emit("sendMotorStopNotification", fcmToken, stopMessage);
|
|
|
|
|
|
|
|
|
|
|
|
await Tank.updateOne(
|
|
|
|
|
|
|
|
{ customerId, "connections.inputConnections.motor_id": motorId },
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
$set: {
|
|
|
|
|
|
|
|
"connections.inputConnections.$.motor_stop_status": motorStopStatus,
|
|
|
|
|
|
|
|
"connections.inputConnections.$.motor_on_type": "manual",
|
|
|
|
|
|
|
|
"connections.inputConnections.$.stopTime": stopTime
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Clear intervals if any
|
|
|
|
|
|
|
|
if (motorIntervals[motorId]) {
|
|
|
|
|
|
|
|
clearInterval(motorIntervals[motorId]);
|
|
|
|
|
|
|
|
delete motorIntervals[motorId];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
eventEmitter.emit(
|
|
|
|
eventEmitter.emit(
|
|
|
|
"motorStop",
|
|
|
|
"motorStop",
|
|
|
|
fcmToken,
|
|
|
|
fcmToken,
|
|
|
@ -2456,8 +2447,115 @@ console.log(fcmToken)
|
|
|
|
|
|
|
|
|
|
|
|
}, 30000); // Check every minute
|
|
|
|
}, 30000); // Check every minute
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}else if (req.body.threshold_type === "litres") {
|
|
|
|
|
|
|
|
console.log("entered litres")
|
|
|
|
|
|
|
|
const receiver_tank_info7 = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() });
|
|
|
|
|
|
|
|
const supplier_tank_info7 = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const newMotorData = new MotorData({
|
|
|
|
|
|
|
|
customerId: customerId,
|
|
|
|
|
|
|
|
motor_id: motorId,
|
|
|
|
|
|
|
|
start_instance_id: start_instance_id,
|
|
|
|
|
|
|
|
supplierTank: req.body.from,
|
|
|
|
|
|
|
|
receiverTank: req.body.to,
|
|
|
|
|
|
|
|
supplier_type: req.body.from_type,
|
|
|
|
|
|
|
|
receiver_type: req.body.to_type,
|
|
|
|
|
|
|
|
startTime: req.body.startTime,
|
|
|
|
|
|
|
|
receiverInitialwaterlevel:parseInt(receiver_tank_info7.waterlevel, 10),
|
|
|
|
|
|
|
|
supplierInitialwaterlevel:parseInt(supplier_tank_info7.waterlevel, 10)
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
await newMotorData.save();
|
|
|
|
|
|
|
|
// If threshold type is percentage, calculate percentage threshold
|
|
|
|
|
|
|
|
const receiver_tank_info = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() });
|
|
|
|
|
|
|
|
const supplier_tank_info = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() });
|
|
|
|
|
|
|
|
if (!receiver_tank_info) {
|
|
|
|
|
|
|
|
throw new Error("Receiver tank not found.");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!supplier_tank_info) {
|
|
|
|
|
|
|
|
throw new Error("Supplierr tank not found.");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const supplier_capacity = parseInt(supplier_tank_info.capacity, 10);
|
|
|
|
|
|
|
|
const supplier_waterLevel = parseInt(supplier_tank_info.waterlevel, 10);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const capacity = parseInt(receiver_tank_info.capacity, 10);
|
|
|
|
|
|
|
|
const waterLevel = parseInt(receiver_tank_info.waterlevel, 10);
|
|
|
|
|
|
|
|
const desired_percentage = parseInt(req.body.manual_threshold_litres.replace(/,/g, ''), 10);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log(desired_percentage)
|
|
|
|
|
|
|
|
const threshold_water_level = waterLevel+desired_percentage;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const supplier_threshold = supplier_waterLevel-desired_percentage
|
|
|
|
|
|
|
|
console.log(supplier_threshold,"supplier_threshold")
|
|
|
|
|
|
|
|
for await (const tank of Tank.find({ "connections.inputConnections.motor_id": motorId })) {
|
|
|
|
|
|
|
|
this.publishMotorStopStatus(motorId, motorStopStatus);
|
|
|
|
|
|
|
|
for await (const tank of Tank.find({ "connections.inputConnections.motor_id": motorId })) {
|
|
|
|
|
|
|
|
const index = tank.connections.inputConnections.findIndex(connection => connection.motor_id === motorId);
|
|
|
|
|
|
|
|
if (index !== -1) {
|
|
|
|
|
|
|
|
await Tank.updateOne(
|
|
|
|
|
|
|
|
{ customerId, "connections.inputConnections.motor_id": motorId },
|
|
|
|
|
|
|
|
{ $set: { [`connections.inputConnections.${index}.manual_threshold_percentage`]: supplier_threshold.toString(), [`connections.inputConnections.${index}.startTime`]: req.body.startTime } }
|
|
|
|
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Update water level threshold
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Start monitoring water level based on threshold percentage
|
|
|
|
|
|
|
|
motorIntervals[motorId] = setInterval(async () => {
|
|
|
|
|
|
|
|
// Check if water level has reached the threshold percentage
|
|
|
|
|
|
|
|
const supplier_tank_info1 = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() });
|
|
|
|
|
|
|
|
const current_water_level = parseInt(supplier_tank_info1.waterlevel, 10);
|
|
|
|
|
|
|
|
if (current_water_level <= supplier_threshold) {
|
|
|
|
|
|
|
|
// Stop the motor pump
|
|
|
|
|
|
|
|
await Tank.updateOne(
|
|
|
|
|
|
|
|
{ customerId, "connections.inputConnections.motor_id": motorId },
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
$set: {
|
|
|
|
|
|
|
|
"connections.inputConnections.$.motor_stop_status": "1",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"connections.inputConnections.$.threshold_type": null,
|
|
|
|
|
|
|
|
"connections.inputConnections.$.manual_threshold_time": null,
|
|
|
|
|
|
|
|
"connections.inputConnections.$.manual_threshold_percentage": null
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
clearInterval(motorIntervals[motorId]); // Clear interval
|
|
|
|
|
|
|
|
delete motorIntervals[motorId];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.publishMotorStopStatus(motorId, "1");
|
|
|
|
|
|
|
|
await delay(300000);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const motorData = await MotorData.findOne({ customerId, motor_id: motorId, start_instance_id: start_instance_id });
|
|
|
|
|
|
|
|
if (motorData) {
|
|
|
|
|
|
|
|
const receiverTank = await Tank.findOne({ customerId, tankName: motorData.receiverTank, tankLocation: motorData.receiver_type.toLowerCase() });
|
|
|
|
|
|
|
|
const receiverFinalWaterLevel = parseInt(receiverTank.waterlevel, 10);
|
|
|
|
|
|
|
|
const quantityDelivered = receiverFinalWaterLevel - parseInt(motorData.receiverInitialwaterlevel, 10);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const stopTime = formatDate(new Date());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await MotorData.updateOne(
|
|
|
|
|
|
|
|
{ customerId, motor_id: motorId, start_instance_id: start_instance_id },
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
$set: {
|
|
|
|
|
|
|
|
stopTime:stopTime,
|
|
|
|
|
|
|
|
receiverfinalwaterlevel: receiverFinalWaterLevel.toString(),
|
|
|
|
|
|
|
|
quantity_delivered: quantityDelivered.toString()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}, 20000);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
// Respond with success message
|
|
|
|
// Respond with success message
|
|
|
|
reply.code(200).send({ message: `Motor ${action === "start" ? "started" : "stopped"} successfully.` });
|
|
|
|
reply.code(200).send({ message: `Motor ${action === "start" ? "started" : "stopped"} successfully.` });
|
|
|
|
|
|
|
|
|
|
|
|