reverted motoraction

master
Bhaskar 1 year ago
parent 6b0dc667f4
commit b593cd6cc3

@ -1336,13 +1336,14 @@ const sendPushNotification = async (registrationToken, title, body) => {
} }
}; };
exports.motorAction = async (req, reply) => { exports.motorAction = async (req, reply) => {
try { try {
const customerId = req.params.customerId; const customerId = req.params.customerId;
const action = req.body.action; const action = req.body.action;
const motorId = req.body.motor_id; const motorId = req.body.motor_id;
const start_instance_id = req.body.start_instance_id; const start_instance_id = req.body.start_instance_id
console.log(req.body.startTime)
// Ensure motor_id is provided // Ensure motor_id is provided
if (!motorId) { if (!motorId) {
throw new Error("Motor ID is required."); throw new Error("Motor ID is required.");
@ -1358,10 +1359,7 @@ exports.motorAction = async (req, reply) => {
throw new Error("Invalid action provided."); throw new Error("Invalid action provided.");
} }
const users = await User.find({ customerId: customerId }); // Update the motor stop status immediately if action is stop
const fcmIds = users.map(user => user.fcmId).filter(fcmId => fcmId);
// Handle motor stop action
if (action === "stop") { if (action === "stop") {
// Update the motor stop status and other fields // Update the motor stop status and other fields
await Tank.updateOne( await Tank.updateOne(
@ -1380,21 +1378,6 @@ exports.motorAction = async (req, reply) => {
// Send immediate response to the client // Send immediate response to the client
reply.code(200).send({ message: "Motor stopped successfully." }); reply.code(200).send({ message: "Motor stopped successfully." });
// Send notification for motor stop
for (const fcmId of fcmIds) {
try {
const response = await sendPushNotification(fcmId, 'Motor Stopped', `Motor has stopped at ${req.body.stopTime}.`);
console.log('Notification sent successfully:', response);
if (response.results[0].error === 'NotRegistered') {
await User.updateOne({ fcmId: fcmId }, { $unset: { fcmId: "" } });
console.log(`Removed unregistered FCM ID: ${fcmId}`);
}
} catch (error) {
console.error('Error sending notification:', error);
}
}
// Perform stop operations in the background // Perform stop operations in the background
(async () => { (async () => {
await delay(300000); await delay(300000);
@ -1433,26 +1416,16 @@ exports.motorAction = async (req, reply) => {
{ customerId, "connections.inputConnections.motor_id": motorId }, { customerId, "connections.inputConnections.motor_id": motorId },
{ $set: { "connections.inputConnections.$.motor_stop_status": "2" } } { $set: { "connections.inputConnections.$.motor_stop_status": "2" } }
); );
// Send notification for motor start
for (const fcmId of fcmIds) {
try {
const response = await sendPushNotification(fcmId, 'Motor Started', `Motor has started at ${req.body.startTime}.`);
console.log('Notification sent successfully:', response);
if (response.results[0].error === 'NotRegistered') {
await User.updateOne({ fcmId: fcmId }, { $unset: { fcmId: "" } });
console.log(`Removed unregistered FCM ID: ${fcmId}`);
}
} catch (error) {
console.error('Error sending notification:', error);
}
}
} }
// Check threshold settings if action is start // Check threshold settings if action is start
if (action === "start") { if (action === "start") {
if (req.body.threshold_type === "time") { if (req.body.threshold_type === "time") {
// If threshold type is time, update threshold time
// await Tank.updateOne(
// { customerId, "connections.inputConnections.motor_id": motorId },
// { $set: { "connections.inputConnections.$.manual_threshold_time": req.body.manual_threshold_time,startTime:req.body.startTime } }
// );
const receiver_tank_info7 = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() }); const receiver_tank_info7 = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() });
const newMotorData = new MotorData({ const newMotorData = new MotorData({
@ -1464,7 +1437,7 @@ exports.motorAction = async (req, reply) => {
supplier_type: req.body.from_type, supplier_type: req.body.from_type,
receiver_type: req.body.to_type, receiver_type: req.body.to_type,
startTime: req.body.startTime, startTime: req.body.startTime,
receiverInitialwaterlevel: parseInt(receiver_tank_info7.waterlevel, 10) receiverInitialwaterlevel:parseInt(receiver_tank_info7.waterlevel, 10)
}); });
await newMotorData.save(); await newMotorData.save();
@ -1473,35 +1446,26 @@ exports.motorAction = async (req, reply) => {
if (index !== -1) { if (index !== -1) {
await Tank.updateOne( await Tank.updateOne(
{ customerId, "connections.inputConnections.motor_id": motorId }, { customerId, "connections.inputConnections.motor_id": motorId },
{ $set: { [`connections.inputConnections.${index}.manual_threshold_time`]: req.body.manual_threshold_time, [`connections.inputConnections.${index}.startTime`]: req.body.startTime, [`connections.inputConnections.${index}.start_instance_id`]: start_instance_id } } { $set: { [`connections.inputConnections.${index}.manual_threshold_time`]: req.body.manual_threshold_time, [`connections.inputConnections.${index}.startTime`]: req.body.startTime,[`connections.inputConnections.${index}.start_instance_id`]: start_instance_id } }
); );
} }
} }
// Start monitoring water level based on threshold time // Start monitoring water level based on threshold time
const thresholdTime = moment().add(req.body.manual_threshold_time, 'minutes').toDate(); const thresholdTime = moment().add(req.body.manual_threshold_time, 'minutes').toDate();
const intervalId = setInterval(async () => { const intervalId = setInterval(async () => {
const splr_tank_info3 = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() }); const splr_tank_info3 = await Tank.findOne({ customerId, tankName: req.body.from, tankLocation: req.body.from_type.toLowerCase() });
const splr_tank_info3_waterlevel = parseInt(splr_tank_info3.waterlevel, 10); const splr_tank_info3_waterlevel = parseInt(splr_tank_info3.waterlevel, 10);
//console.log(splr_tank_info3_waterlevel,"splr_tank_info3_waterlevel")
const splr_tank_info3_capacity = parseInt(splr_tank_info3.capacity.replace(/,/g, ''), 10); const splr_tank_info3_capacity = parseInt(splr_tank_info3.capacity.replace(/,/g, ''), 10);
// const splr_tank_info3_capacity = parseInt(splr_tank_info3.capacity, 10);
// console.log(splr_tank_info3.capacity,splr_tank_info3_capacity,"splr_tank_info3_capacity")
const splr_tank_info3_percentage = (splr_tank_info3_waterlevel / splr_tank_info3_capacity) * 100; const splr_tank_info3_percentage = (splr_tank_info3_waterlevel / splr_tank_info3_capacity) * 100;
// console.log(splr_tank_info3_percentage, "percentage for less than 20");
if (new Date() >= thresholdTime || splr_tank_info3_percentage <= 20) { if (new Date() >= thresholdTime || splr_tank_info3_percentage <= 20) {
// Send notification for low supplier tank percentage console.log(splr_tank_info3_percentage,)
for (const fcmId of fcmIds) {
try {
const response = await sendPushNotification(fcmId, 'Low Water Level Alert', `Supplier tank water level is below 20% (${splr_tank_info3_percentage.toFixed(2)}%).`);
console.log('Notification sent successfully:', response);
if (response.results[0].error === 'NotRegistered') {
await User.updateOne({ fcmId: fcmId }, { $unset: { fcmId: "" } });
console.log(`Removed unregistered FCM ID: ${fcmId}`);
}
} catch (error) {
console.error('Error sending notification:', error);
}
}
await Tank.updateOne( await Tank.updateOne(
{ customerId, "connections.inputConnections.motor_id": motorId }, { customerId, "connections.inputConnections.motor_id": motorId },
{ {
@ -1523,74 +1487,113 @@ exports.motorAction = async (req, reply) => {
const receiverFinalWaterLevel = parseInt(receiverTank.waterlevel, 10); const receiverFinalWaterLevel = parseInt(receiverTank.waterlevel, 10);
const quantityDelivered = receiverFinalWaterLevel - parseInt(motorData.receiverInitialwaterlevel, 10); const quantityDelivered = receiverFinalWaterLevel - parseInt(motorData.receiverInitialwaterlevel, 10);
const water_pumped_till_now = parseInt(receiverTank.total_water_added_from_midnight, 10); const water_pumped_till_now = parseInt(receiverTank.total_water_added_from_midnight, 10);
const totalwaterpumped = quantityDelivered + water_pumped_till_now; const totalwaterpumped = quantityDelivered + water_pumped_till_now
await Tank.findOneAndUpdate( await Tank.findOneAndUpdate({customerId, tankName: motorData.receiverTank, tankLocation: motorData.receiver_type.toLowerCase()}, { $set: { total_water_added_from_midnight: totalwaterpumped } })
{ customerId, tankName: motorData.receiverTank, tankLocation: motorData.receiver_type.toLowerCase() },
{ $set: { total_water_added_from_midnight: totalwaterpumped } } const stopTime = formatDate(new Date());
);
await MotorData.updateOne( await MotorData.updateOne(
{ customerId, motor_id: motorId, start_instance_id: start_instance_id }, { customerId, motor_id: motorId, start_instance_id: start_instance_id },
{ {
$set: { $set: {
stopTime: formatDate(new Date()), stopTime:stopTime,
receiverfinalwaterlevel: receiverFinalWaterLevel.toString(), receiverfinalwaterlevel: receiverFinalWaterLevel.toString(),
quantity_delivered: quantityDelivered.toString() quantity_delivered: quantityDelivered.toString()
} }
} }
); );
} }
} else { }
// Monitor the receiver tank's water level and send notification if max capacity is reached }, 60000);
const receiverTank = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() }); } else if (req.body.threshold_type === "litres") {
const currentWaterLevel = parseInt(receiverTank.waterlevel, 10); console.log("entered litres")
const receiverTankCapacity = parseInt(receiverTank.capacity, 10); const receiver_tank_info7 = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() });
if (currentWaterLevel >= receiverTankCapacity) {
// Send a notification for maximum water level reached
for (const fcmId of fcmIds) {
try {
const response = await sendPushNotification(fcmId, 'Maximum Water Level Alert', `The receiver tank has reached its maximum capacity.`);
console.log('Notification sent successfully:', response);
if (response.results[0].error === 'NotRegistered') { const newMotorData = new MotorData({
await User.updateOne({ fcmId: fcmId }, { $unset: { fcmId: "" } }); customerId: customerId,
console.log(`Removed unregistered FCM ID: ${fcmId}`); 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)
});
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.");
} }
} catch (error) { if (!supplier_tank_info) {
console.error('Error sending notification:', error); 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 })) {
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 } }
);
} }
} }
// Stop the motor
// Update water level threshold
// Start monitoring water level based on threshold percentage
const intervalId = 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( await Tank.updateOne(
{ customerId, "connections.inputConnections.motor_id": motorId }, { customerId, "connections.inputConnections.motor_id": motorId },
{ {
$set: { $set: {
"connections.inputConnections.$.motor_stop_status": "1", "connections.inputConnections.$.motor_stop_status": "1",
"connections.inputConnections.$.threshold_type": null, "connections.inputConnections.$.threshold_type": null,
"connections.inputConnections.$.manual_threshold_time": null, "connections.inputConnections.$.manual_threshold_time": null,
"connections.inputConnections.$.manual_threshold_percentage": null "connections.inputConnections.$.manual_threshold_percentage": null
} }
} }
); );
clearInterval(intervalId); // Stop monitoring water level
clearInterval(intervalId); // Stop monitoring
await delay(300000); await delay(300000);
const motorData = await MotorData.findOne({ customerId, motor_id: motorId, start_instance_id: start_instance_id }); const motorData = await MotorData.findOne({ customerId, motor_id: motorId, start_instance_id: start_instance_id });
if (motorData) { if (motorData) {
const receiverFinalWaterLevel = currentWaterLevel; 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 quantityDelivered = receiverFinalWaterLevel - parseInt(motorData.receiverInitialwaterlevel, 10);
const stopTime = formatDate(new Date()); const stopTime = formatDate(new Date());
await MotorData.updateOne( await MotorData.updateOne(
{ customerId, motor_id: motorId, start_instance_id: start_instance_id }, { customerId, motor_id: motorId, start_instance_id: start_instance_id },
{ {
$set: { $set: {
stopTime: stopTime, stopTime:stopTime,
receiverfinalwaterlevel: receiverFinalWaterLevel.toString(), receiverfinalwaterlevel: receiverFinalWaterLevel.toString(),
quantity_delivered: quantityDelivered.toString() quantity_delivered: quantityDelivered.toString()
} }
@ -1598,19 +1601,21 @@ exports.motorAction = async (req, reply) => {
); );
} }
} }
} }, 20000); // Check water level every minute
}, 20000); // Check every 20 seconds
} }
} }
reply.code(200).send({ message: "Motor action processed successfully." }); // Respond with success message
} catch (error) { reply.code(200).send({ message: `Motor ${action === "start" ? "started" : "stopped"} successfully.` });
console.error(error); } catch (err) {
reply.code(500).send({ error: error.message }); // Handle errors
throw boom.boomify(err);
} }
}; };
// exports.motorAction = async (req, reply) => { // exports.motorAction = async (req, reply) => {
// try { // try {
// const customerId = req.params.customerId; // const customerId = req.params.customerId;

Loading…
Cancel
Save