diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index c9462ff8..eb765a1d 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -355,473 +355,473 @@ const intervals = {}; let sump_water_levels=[]; let supplier_tanks = []; -exports.motorAction = async (req, reply) => { - try { +// exports.motorAction = async (req, reply) => { +// try { -7 - const customerId = req.params.customerId; - const action = req.body.action - const receiver_tank = req.body.to - const receiver_tank_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:(req.body.to_type).toLowerCase()}); - const receiver_capacity = parseInt((receiver_tank_info.capacity).replace(/,/g, ''), 10) - const desired_water_percentage = parseInt((req.body.percentage).replace(/,/g, ''), 10) +// 7 +// const customerId = req.params.customerId; +// const action = req.body.action +// const receiver_tank = req.body.to +// const receiver_tank_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:(req.body.to_type).toLowerCase()}); +// const receiver_capacity = parseInt((receiver_tank_info.capacity).replace(/,/g, ''), 10) +// const desired_water_percentage = parseInt((req.body.percentage).replace(/,/g, ''), 10) - const supplier_tank = req.body.from - const supplier_tank_type = (req.body.from_type).toLowerCase() - const receiver_type = (req.body.to_type).toLowerCase() - // console.log(supplier_tank) - // const suplr_tank_info1 = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); - const interval_variable = supplier_tank+receiver_tank - let currentTank = supplier_tanks.find(tank => tank.supplier_tank === supplier_tank); - let currentSump = sump_water_levels.find(tank => tank.supplier_tank === supplier_tank); - - if(action === "start"){ +// const supplier_tank = req.body.from +// const supplier_tank_type = (req.body.from_type).toLowerCase() +// const receiver_type = (req.body.to_type).toLowerCase() +// // console.log(supplier_tank) +// // const suplr_tank_info1 = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); +// const interval_variable = supplier_tank+receiver_tank +// let currentTank = supplier_tanks.find(tank => tank.supplier_tank === supplier_tank); +// let currentSump = sump_water_levels.find(tank => tank.supplier_tank === supplier_tank); + +// if(action === "start"){ - if (!currentTank) { - currentTank = { - supplier_tank: supplier_tank, - start_time: new Date().toLocaleString('en-US', { timeZone: 'Asia/Kolkata' }) - }; - supplier_tanks.push(currentTank); - } - // start_time = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'}) - console.log(supplier_tanks) - // const stop_at = req.body.stop_at +// if (!currentTank) { +// currentTank = { +// supplier_tank: supplier_tank, +// start_time: new Date().toLocaleString('en-US', { timeZone: 'Asia/Kolkata' }) +// }; +// supplier_tanks.push(currentTank); +// } +// // start_time = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'}) +// console.log(supplier_tanks) +// // const stop_at = req.body.stop_at - if(supplier_tank_type==="sump" && receiver_type === "overhead"){ +// if(supplier_tank_type==="sump" && receiver_type === "overhead"){ - await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: "1" } }); +// await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: "1" } }); - const supplier_tank_info1 = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); - //console.log(supplier_tank_info1) - //const initial_update = parseInt(supplier_tank_info1.waterlevel.replace(/,/g, ''), 10)-200; - // await Tank.findOneAndUpdate({customerId, tankName: supplier_tank,tankLocation:supplier_tank_type}, { $set: { waterlevel: initial_update } }); - const supplier_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); - const sump_water_level= parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10) - const receiver_tank_info2 = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:(req.body.to_type).toLowerCase()}); +// const supplier_tank_info1 = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); +// //console.log(supplier_tank_info1) +// //const initial_update = parseInt(supplier_tank_info1.waterlevel.replace(/,/g, ''), 10)-200; +// // await Tank.findOneAndUpdate({customerId, tankName: supplier_tank,tankLocation:supplier_tank_type}, { $set: { waterlevel: initial_update } }); +// const supplier_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); +// const sump_water_level= parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10) +// const receiver_tank_info2 = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:(req.body.to_type).toLowerCase()}); - const water_added_from_midnight = parseInt((receiver_tank_info2.total_water_added_from_midnight).replace(/,/g, ''), 10) +// const water_added_from_midnight = parseInt((receiver_tank_info2.total_water_added_from_midnight).replace(/,/g, ''), 10) - if (!currentSump) { - currentSump = { - supplier_tank: supplier_tank, - supplier_initial_waterlevel:sump_water_level, - receiver_tank_total_water_added_from_midnight:water_added_from_midnight +// if (!currentSump) { +// currentSump = { +// supplier_tank: supplier_tank, +// supplier_initial_waterlevel:sump_water_level, +// receiver_tank_total_water_added_from_midnight:water_added_from_midnight - }; - sump_water_levels.push(currentSump); - } +// }; +// sump_water_levels.push(currentSump); +// } - console.log(sump_water_levels) - const overheadTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - const connection = overheadTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); +// console.log(sump_water_levels) +// const overheadTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const connection = overheadTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); - if (connection) { - connection.motor_status = "1"; - await overheadTank.save(); - } +// if (connection) { +// connection.motor_status = "1"; +// await overheadTank.save(); +// } - // await changingfrom_tankwaterlevel(customerId,initial_update,supplier_tank_info); - // let supplier_waterlevel = parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10) - // console.log(supplier_waterlevel) - // let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) - intervals[interval_variable] = setInterval(async function () { - // Calculate new water levels - const supplier_tank_info2 = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); - const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); - let receiver_waterlevel = parseInt(rcvr_info.waterlevel.replace(/,/g, ''), 10) - - let supplier_waterlevel = parseInt(supplier_tank_info2.waterlevel.replace(/,/g, ''), 10) - const newWaterLevel = receiver_waterlevel + 250//Math.floor(supplier_waterlevel * 0.1); - const newSupplierWaterLevel = supplier_waterlevel-250//Math.floor(supplier_waterlevel * 0.1); - const supplier_capacity = parseInt(supplier_tank_info.capacity.replace(/,/g, ''), 10) - console.log((newSupplierWaterLevel/supplier_capacity)*100) - // Check if updating should stop - if ((newSupplierWaterLevel/supplier_capacity)*100 <= 5 || (newWaterLevel/receiver_capacity)*100 >= 95 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === "0") { - console.log((newSupplierWaterLevel/supplier_capacity)*100,(newWaterLevel/receiver_capacity)*100,(newWaterLevel/receiver_capacity)*100,) - clearInterval(intervals[interval_variable]); // Clear the interval for this tank - delete intervals[interval_variable]; +// // await changingfrom_tankwaterlevel(customerId,initial_update,supplier_tank_info); +// // let supplier_waterlevel = parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10) +// // console.log(supplier_waterlevel) +// // let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) +// intervals[interval_variable] = setInterval(async function () { +// // Calculate new water levels +// const supplier_tank_info2 = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); +// const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); +// let receiver_waterlevel = parseInt(rcvr_info.waterlevel.replace(/,/g, ''), 10) + +// let supplier_waterlevel = parseInt(supplier_tank_info2.waterlevel.replace(/,/g, ''), 10) +// const newWaterLevel = receiver_waterlevel + 250//Math.floor(supplier_waterlevel * 0.1); +// const newSupplierWaterLevel = supplier_waterlevel-250//Math.floor(supplier_waterlevel * 0.1); +// const supplier_capacity = parseInt(supplier_tank_info.capacity.replace(/,/g, ''), 10) +// console.log((newSupplierWaterLevel/supplier_capacity)*100) +// // Check if updating should stop +// if ((newSupplierWaterLevel/supplier_capacity)*100 <= 5 || (newWaterLevel/receiver_capacity)*100 >= 95 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === "0") { +// console.log((newSupplierWaterLevel/supplier_capacity)*100,(newWaterLevel/receiver_capacity)*100,(newWaterLevel/receiver_capacity)*100,) +// clearInterval(intervals[interval_variable]); // Clear the interval for this tank +// delete intervals[interval_variable]; - const overheadTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - const connection = overheadTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); +// const overheadTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const connection = overheadTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); - if (connection) { - connection.motor_status = "0"; - await overheadTank.save(); - } - // Find the tank based on customerId, tankName, and tankLocation - const tankToUpdate = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - -// Check if all objects in inputConnections have motor_status === "0" - const allMotorStatusZero = tankToUpdate.connections.inputConnections.every(connection => connection.motor_status === "0"); - - if (allMotorStatusZero) { - // Update the motor_status field to "0" for the tank - await Tank.findOneAndUpdate( - { customerId, tankName: receiver_tank, tankLocation: receiver_type }, - { $set: { motor_status: "0" } } - ); - } +// if (connection) { +// connection.motor_status = "0"; +// await overheadTank.save(); +// } +// // Find the tank based on customerId, tankName, and tankLocation +// const tankToUpdate = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); + +// // Check if all objects in inputConnections have motor_status === "0" +// const allMotorStatusZero = tankToUpdate.connections.inputConnections.every(connection => connection.motor_status === "0"); + +// if (allMotorStatusZero) { +// // Update the motor_status field to "0" for the tank +// await Tank.findOneAndUpdate( +// { customerId, tankName: receiver_tank, tankLocation: receiver_type }, +// { $set: { motor_status: "0" } } +// ); +// } - console.log("end for"+receiver_tank); - } else { - // Update water levels in database - //supplier_waterlevel = newSupplierWaterLevel; - // receiver_waterlevel = newWaterLevel; - console.log((newSupplierWaterLevel/supplier_capacity)*100) - // console.log((newWaterLevel/receiver_capacity)*100) - console.log(newWaterLevel+""+receiver_type) - console.log(newSupplierWaterLevel+""+supplier_tank) - - await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { waterlevel: newWaterLevel } }) - await Tank.findOneAndUpdate({customerId, tankName: supplier_tank,tankLocation:supplier_tank_type}, { $set: { waterlevel: newSupplierWaterLevel } }) - - //if (supplier_tank_info2.motor_status==="0"){ - // await Tank.findOneAndUpdate({customerId, tankName: supplier_tank,tankLocation:supplier_tank_type}, { $set: { waterlevel: supplier_waterlevel } }) - // } +// console.log("end for"+receiver_tank); +// } else { +// // Update water levels in database +// //supplier_waterlevel = newSupplierWaterLevel; +// // receiver_waterlevel = newWaterLevel; +// console.log((newSupplierWaterLevel/supplier_capacity)*100) +// // console.log((newWaterLevel/receiver_capacity)*100) +// console.log(newWaterLevel+""+receiver_type) +// console.log(newSupplierWaterLevel+""+supplier_tank) + +// await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { waterlevel: newWaterLevel } }) +// await Tank.findOneAndUpdate({customerId, tankName: supplier_tank,tankLocation:supplier_tank_type}, { $set: { waterlevel: newSupplierWaterLevel } }) + +// //if (supplier_tank_info2.motor_status==="0"){ +// // await Tank.findOneAndUpdate({customerId, tankName: supplier_tank,tankLocation:supplier_tank_type}, { $set: { waterlevel: supplier_waterlevel } }) +// // } + +// } +// }, 2000); - } - }, 2000); - - } +// } - // if(supplier_tank_type==="sump" && receiver_type === "sump"){ - // await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: 1 } }); +// // if(supplier_tank_type==="sump" && receiver_type === "sump"){ +// // await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: 1 } }); - // // console.log(rcvr_info.motor_status) - // // const supplier_tank_info1 = await Tank.findOne({ customerId ,tankName:supplier_tank}); - // // initial_update = parseInt(supplier_tank_info1.capacity.replace(/,/g, ''), 10)/2; +// // // console.log(rcvr_info.motor_status) +// // // const supplier_tank_info1 = await Tank.findOne({ customerId ,tankName:supplier_tank}); +// // // initial_update = parseInt(supplier_tank_info1.capacity.replace(/,/g, ''), 10)/2; - // // await Tank.findOneAndUpdate({customerId, tankName: supplier_tank}, { $set: { waterlevel: initial_update } }); - // const supplier_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); +// // // await Tank.findOneAndUpdate({customerId, tankName: supplier_tank}, { $set: { waterlevel: initial_update } }); +// // const supplier_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); - // let supplier_waterlevel = parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10) - // let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) - // intervals[interval_variable] = setInterval(async function () { - // const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); - // const supplier_capacity = parseInt(supplier_tank_info.capacity.replace(/,/g, ''), 10) - // // Calculate new water levels - // const newWaterLevel = receiver_waterlevel + 200//Math.floor(supplier_waterlevel * 0.1); - // const newSupplierWaterLevel = Math.min(supplier_capacity, supplier_waterlevel - 200);// Math.floor(supplier_waterlevel * 0.15)); - // // console.log(newWaterLevel) - // // console.log(newSupplierWaterLevel) - // // console.log(rcvr_info.motor_status) - // // console.log(rcvr_info.tankName) - - // // Check if updating should stop - // if ( (newWaterLevel/receiver_capacity)*100 >= 95 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === 0 || (newSupplierWaterLevel/supplier_capacity)*100 <= 5) { - - // clearInterval(interval_variable) - // delete intervals[interval_variable]; - // await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: 0 } }); +// // let supplier_waterlevel = parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10) +// // let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) +// // intervals[interval_variable] = setInterval(async function () { +// // const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); +// // const supplier_capacity = parseInt(supplier_tank_info.capacity.replace(/,/g, ''), 10) +// // // Calculate new water levels +// // const newWaterLevel = receiver_waterlevel + 200//Math.floor(supplier_waterlevel * 0.1); +// // const newSupplierWaterLevel = Math.min(supplier_capacity, supplier_waterlevel - 200);// Math.floor(supplier_waterlevel * 0.15)); +// // // console.log(newWaterLevel) +// // // console.log(newSupplierWaterLevel) +// // // console.log(rcvr_info.motor_status) +// // // console.log(rcvr_info.tankName) + +// // // Check if updating should stop +// // if ( (newWaterLevel/receiver_capacity)*100 >= 95 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === 0 || (newSupplierWaterLevel/supplier_capacity)*100 <= 5) { + +// // clearInterval(interval_variable) +// // delete intervals[interval_variable]; +// // await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: 0 } }); - // console.log("end"); - // } else { - // // Update water levels in database - // supplier_waterlevel = newSupplierWaterLevel; - // receiver_waterlevel = newWaterLevel; - // console.log(supplier_waterlevel,"0") - // console.log(receiver_waterlevel,"1") - // // console.log((newSupplierWaterLevel/supplier_capacity)*100) - // // console.log((newWaterLevel/receiver_capacity)*100) - // await Promise.all([ - // Tank.findOneAndUpdate({customerId, tankName: receiver_tank}, { $set: { waterlevel: newWaterLevel } }), - // Tank.findOneAndUpdate({customerId, tankName: supplier_tank}, { $set: { waterlevel: newSupplierWaterLevel } }) - // ]); - // } - // }, 2000); +// // console.log("end"); +// // } else { +// // // Update water levels in database +// // supplier_waterlevel = newSupplierWaterLevel; +// // receiver_waterlevel = newWaterLevel; +// // console.log(supplier_waterlevel,"0") +// // console.log(receiver_waterlevel,"1") +// // // console.log((newSupplierWaterLevel/supplier_capacity)*100) +// // // console.log((newWaterLevel/receiver_capacity)*100) +// // await Promise.all([ +// // Tank.findOneAndUpdate({customerId, tankName: receiver_tank}, { $set: { waterlevel: newWaterLevel } }), +// // Tank.findOneAndUpdate({customerId, tankName: supplier_tank}, { $set: { waterlevel: newSupplierWaterLevel } }) +// // ]); +// // } +// // }, 2000); - // } +// // } - if(supplier_tank_type==="sump" && receiver_type === "sump"){ - const receiver_capacity = parseInt(receiver_tank_info.capacity.replace(/,/g, ''), 10) +// if(supplier_tank_type==="sump" && receiver_type === "sump"){ +// const receiver_capacity = parseInt(receiver_tank_info.capacity.replace(/,/g, ''), 10) - const sumpTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - const connection = sumpTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); +// const sumpTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const connection = sumpTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); - if (connection) { - connection.motor_status = "1"; - await sumpTank.save(); - } +// if (connection) { +// connection.motor_status = "1"; +// await sumpTank.save(); +// } - // console.log(receiver_capacity,"0",receiver_tank_info.tankName) - await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: "1" } }); - const supplier_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); - - // let supplier_waterlevel = parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10) - // let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) - // console.log(receiver_waterlevel,"1") - intervals[interval_variable] = setInterval(async function () { - // Calculate new water levels - const splr_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); - const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); - const supplier_capacity = parseInt(supplier_tank_info.capacity.replace(/,/g, ''), 10) - let supplier_waterlevel = parseInt(splr_tank_info.waterlevel.replace(/,/g, ''), 10) - let receiver_waterlevel = parseInt(rcvr_info.waterlevel.replace(/,/g, ''), 10) - // Calculate new water levels - const newWaterLevel = receiver_waterlevel + 250//Math.floor(supplier_waterlevel * 0.1); - const newSupplierWaterLevel = Math.min(supplier_capacity, supplier_waterlevel - 250);// Math.floor(supplier_waterlevel * 0.15)); - // Check if updating should stop - if ((newWaterLevel/receiver_capacity)*100 >= 97 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === "0" || (newSupplierWaterLevel/supplier_capacity)*100 <= 5 ) { +// // console.log(receiver_capacity,"0",receiver_tank_info.tankName) +// await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: "1" } }); +// const supplier_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); + +// // let supplier_waterlevel = parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10) +// // let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) +// // console.log(receiver_waterlevel,"1") +// intervals[interval_variable] = setInterval(async function () { +// // Calculate new water levels +// const splr_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); +// const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); +// const supplier_capacity = parseInt(supplier_tank_info.capacity.replace(/,/g, ''), 10) +// let supplier_waterlevel = parseInt(splr_tank_info.waterlevel.replace(/,/g, ''), 10) +// let receiver_waterlevel = parseInt(rcvr_info.waterlevel.replace(/,/g, ''), 10) +// // Calculate new water levels +// const newWaterLevel = receiver_waterlevel + 250//Math.floor(supplier_waterlevel * 0.1); +// const newSupplierWaterLevel = Math.min(supplier_capacity, supplier_waterlevel - 250);// Math.floor(supplier_waterlevel * 0.15)); +// // Check if updating should stop +// if ((newWaterLevel/receiver_capacity)*100 >= 97 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === "0" || (newSupplierWaterLevel/supplier_capacity)*100 <= 5 ) { - clearInterval(intervals[interval_variable]); // Clear the interval for this tank - delete intervals[interval_variable]; - const sumpTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - const connection = sumpTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); +// clearInterval(intervals[interval_variable]); // Clear the interval for this tank +// delete intervals[interval_variable]; +// const sumpTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const connection = sumpTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); - if (connection) { - connection.motor_status = "0"; - await sumpTank.save(); - } - } - const tankToUpdate = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - - // Check if all objects in inputConnections have motor_status === "0" - const allMotorStatusZero = tankToUpdate.connections.inputConnections.every(connection => connection.motor_status === "0"); +// if (connection) { +// connection.motor_status = "0"; +// await sumpTank.save(); +// } +// } +// const tankToUpdate = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); + +// // Check if all objects in inputConnections have motor_status === "0" +// const allMotorStatusZero = tankToUpdate.connections.inputConnections.every(connection => connection.motor_status === "0"); - if (allMotorStatusZero) { - // Update the motor_status field to "0" for the tank - await Tank.findOneAndUpdate( - { customerId, tankName: receiver_tank, tankLocation: receiver_type }, - { $set: { motor_status: "0" } } - ); +// if (allMotorStatusZero) { +// // Update the motor_status field to "0" for the tank +// await Tank.findOneAndUpdate( +// { customerId, tankName: receiver_tank, tankLocation: receiver_type }, +// { $set: { motor_status: "0" } } +// ); - console.log("end for" + receiver_tank); - } else { - // Update water levels in database +// console.log("end for" + receiver_tank); +// } else { +// // Update water levels in database - // supplier_waterlevel = newSupplierWaterLevel; - // receiver_waterlevel = newWaterLevel; - console.log(supplier_waterlevel,"0") - console.log(receiver_waterlevel,"1") - // console.log((newSupplierWaterLevel/supplier_capacity)*100) - // console.log((newWaterLevel/receiver_capacity)*100) - await Promise.all([ - Tank.findOneAndUpdate({customerId, tankName: receiver_tank}, { $set: { waterlevel: newWaterLevel } }), - Tank.findOneAndUpdate({customerId, tankName: supplier_tank}, { $set: { waterlevel: newSupplierWaterLevel } }) - ]); - } - }, 2000); +// // supplier_waterlevel = newSupplierWaterLevel; +// // receiver_waterlevel = newWaterLevel; +// console.log(supplier_waterlevel,"0") +// console.log(receiver_waterlevel,"1") +// // console.log((newSupplierWaterLevel/supplier_capacity)*100) +// // console.log((newWaterLevel/receiver_capacity)*100) +// await Promise.all([ +// Tank.findOneAndUpdate({customerId, tankName: receiver_tank}, { $set: { waterlevel: newWaterLevel } }), +// Tank.findOneAndUpdate({customerId, tankName: supplier_tank}, { $set: { waterlevel: newSupplierWaterLevel } }) +// ]); +// } +// }, 2000); - } +// } - if(supplier_tank_type==="bore" && receiver_type === "sump"){ - const receiver_capacity = parseInt(receiver_tank_info.capacity.replace(/,/g, ''), 10) - // console.log(receiver_capacity,"0",receiver_tank_info.tankName) - await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: "1" } }); - const sumpTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - const connection = sumpTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); +// if(supplier_tank_type==="bore" && receiver_type === "sump"){ +// const receiver_capacity = parseInt(receiver_tank_info.capacity.replace(/,/g, ''), 10) +// // console.log(receiver_capacity,"0",receiver_tank_info.tankName) +// await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { motor_status: "1" } }); +// const sumpTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const connection = sumpTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); - if (connection) { - connection.motor_status = "1"; - await sumpTank.save(); - } +// if (connection) { +// connection.motor_status = "1"; +// await sumpTank.save(); +// } - // let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) - // console.log(receiver_waterlevel,"1") - intervals[interval_variable] = setInterval(async function () { - // Calculate new water levels - const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); - //console.log(rcvr_info) - let receiver_waterlevel = parseInt(rcvr_info.waterlevel.replace(/,/g, ''), 10) - - //console.log(rcvr_info.motor_status) - const newWaterLevel = receiver_waterlevel+250; - //console.log(newWaterLevel,"2",receiver_tank_info.tankName) - // Check if updating should stop - if ((newWaterLevel/receiver_capacity)*100 >= 97 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === "0" ) { +// // let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) +// // console.log(receiver_waterlevel,"1") +// intervals[interval_variable] = setInterval(async function () { +// // Calculate new water levels +// const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); +// //console.log(rcvr_info) +// let receiver_waterlevel = parseInt(rcvr_info.waterlevel.replace(/,/g, ''), 10) + +// //console.log(rcvr_info.motor_status) +// const newWaterLevel = receiver_waterlevel+250; +// //console.log(newWaterLevel,"2",receiver_tank_info.tankName) +// // Check if updating should stop +// if ((newWaterLevel/receiver_capacity)*100 >= 97 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === "0" ) { - clearInterval(intervals[interval_variable]); // Clear the interval for this tank - delete intervals[interval_variable]; +// clearInterval(intervals[interval_variable]); // Clear the interval for this tank +// delete intervals[interval_variable]; - const sumpTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - const connection = sumpTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); +// const sumpTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const connection = sumpTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); - if (connection) { - connection.motor_status = "0"; - await sumpTank.save(); - } +// if (connection) { +// connection.motor_status = "0"; +// await sumpTank.save(); +// } - const tankToUpdate = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const tankToUpdate = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); -// Check if all objects in inputConnections have motor_status === "0" - const allMotorStatusZero = tankToUpdate.connections.inputConnections.every(connection => connection.motor_status === "0"); +// // Check if all objects in inputConnections have motor_status === "0" +// const allMotorStatusZero = tankToUpdate.connections.inputConnections.every(connection => connection.motor_status === "0"); - if (allMotorStatusZero) { - // Update the motor_status field to "0" for the tank - await Tank.findOneAndUpdate( - { customerId, tankName: receiver_tank, tankLocation: receiver_type }, - { $set: { motor_status: "0" } } - ); - } +// if (allMotorStatusZero) { +// // Update the motor_status field to "0" for the tank +// await Tank.findOneAndUpdate( +// { customerId, tankName: receiver_tank, tankLocation: receiver_type }, +// { $set: { motor_status: "0" } } +// ); +// } - console.log("end for" + receiver_tank); - } else { - // Update water levels in database +// console.log("end for" + receiver_tank); +// } else { +// // Update water levels in database - // receiver_waterlevel = newWaterLevel; +// // receiver_waterlevel = newWaterLevel; - //console.log((newWaterLevel/receiver_capacity)*100,"4",receiver_tank_info.tankName) - await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { waterlevel: newWaterLevel } }) - console.log(receiver_tank+"="+newWaterLevel+"="+"bore to sump") - } - }, 2000); +// //console.log((newWaterLevel/receiver_capacity)*100,"4",receiver_tank_info.tankName) +// await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { waterlevel: newWaterLevel } }) +// console.log(receiver_tank+"="+newWaterLevel+"="+"bore to sump") +// } +// }, 2000); - } - // console.log(customerId,req.body.from,req.body.from_type,receiver_tank,req.body.to_type,) +// } +// // console.log(customerId,req.body.from,req.body.from_type,receiver_tank,req.body.to_type,) - } +// } - else if (action === "stop") { - //stop_time = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'}) - clearInterval(intervals[interval_variable]); // Clear the interval for this tank - delete intervals[interval_variable]; +// else if (action === "stop") { +// //stop_time = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'}) +// clearInterval(intervals[interval_variable]); // Clear the interval for this tank +// delete intervals[interval_variable]; - const stopTime = new Date().toLocaleString('en-US', { timeZone: 'Asia/Kolkata' }); - // console.log(currentTank.start_time) - const startTime = currentTank.start_time; - // const duration = calculateDuration(startTime, stopTime); +// const stopTime = new Date().toLocaleString('en-US', { timeZone: 'Asia/Kolkata' }); +// // console.log(currentTank.start_time) +// const startTime = currentTank.start_time; +// // const duration = calculateDuration(startTime, stopTime); - // Store the duration or perform any required operations +// // Store the duration or perform any required operations - supplier_tanks = supplier_tanks.filter(tank => tank.supplier_tank !== supplier_tank); - // console.log(supplier_tanks) +// supplier_tanks = supplier_tanks.filter(tank => tank.supplier_tank !== supplier_tank); +// // console.log(supplier_tanks) - // storing data of how amny water supplied from sump to overhead to calculate the consumption - const suplr_tank_info2 = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); +// // storing data of how amny water supplied from sump to overhead to calculate the consumption +// const suplr_tank_info2 = await Tank.findOne({ customerId ,tankName:supplier_tank,tankLocation:supplier_tank_type}); - let water_added_from_midnight1=0 - if (supplier_tank_type === "sump") { - // const rcvr_info2 = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); - console.log(currentSump.receiver_tank_total_water_added_from_midnight,"5") - water_added_from_midnight1=currentSump.receiver_tank_total_water_added_from_midnight +// let water_added_from_midnight1=0 +// if (supplier_tank_type === "sump") { +// // const rcvr_info2 = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:receiver_type}); +// console.log(currentSump.receiver_tank_total_water_added_from_midnight,"5") +// water_added_from_midnight1=currentSump.receiver_tank_total_water_added_from_midnight - console.log(water_added_from_midnight1) +// console.log(water_added_from_midnight1) - } - const sump_water_level1 =currentSump.supplier_initial_waterlevel - console.log(sump_water_level1,"1") - // console.log(water_added_from_midnight) - const sump_final_water_level= parseInt(suplr_tank_info2.waterlevel.replace(/,/g, ''), 10) - console.log(sump_final_water_level,"2") - sump_water_levels = sump_water_levels.filter(tank => tank.supplier_tank !== supplier_tank); +// } +// const sump_water_level1 =currentSump.supplier_initial_waterlevel +// console.log(sump_water_level1,"1") +// // console.log(water_added_from_midnight) +// const sump_final_water_level= parseInt(suplr_tank_info2.waterlevel.replace(/,/g, ''), 10) +// console.log(sump_final_water_level,"2") +// sump_water_levels = sump_water_levels.filter(tank => tank.supplier_tank !== supplier_tank); - const quantity_delivered = Math.abs(sump_water_level1 - sump_final_water_level); +// const quantity_delivered = Math.abs(sump_water_level1 - sump_final_water_level); - if (supplier_tank_type === "sump") { +// if (supplier_tank_type === "sump") { - final_added_water=water_added_from_midnight1+quantity_delivered - await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { total_water_added_from_midnight: final_added_water } }) +// final_added_water=water_added_from_midnight1+quantity_delivered +// await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:receiver_type}, { $set: { total_water_added_from_midnight: final_added_water } }) - } +// } - const overheadTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - const connection = overheadTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); +// const overheadTank = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const connection = overheadTank.connections.inputConnections.find((conn) => conn.inputConnections === supplier_tank); - if (connection) { - connection.motor_status = "0"; - await overheadTank.save(); - } +// if (connection) { +// connection.motor_status = "0"; +// await overheadTank.save(); +// } - const tankToUpdate = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); +// const tankToUpdate = await Tank.findOne({ customerId, tankName: receiver_tank, tankLocation: receiver_type }); - // Check if all objects in inputConnections have motor_status === "0" - const allMotorStatusZero = tankToUpdate.connections.inputConnections.every(connection => connection.motor_status === "0"); +// // Check if all objects in inputConnections have motor_status === "0" +// const allMotorStatusZero = tankToUpdate.connections.inputConnections.every(connection => connection.motor_status === "0"); - if (allMotorStatusZero) { - console.log(allMotorStatusZero) - // Update the motor_status field to "0" for the tank - await Tank.findOneAndUpdate( - { customerId, tankName: receiver_tank, tankLocation: receiver_type }, - { $set: { motor_status: "0" } } - ); - } - - //saving the motor run time and data - - motorData = { - - customerId:customerId, - supplierTank : supplier_tank, - supplier_type: supplier_tank_type, - receiverTank: receiver_tank, - receiver_type: receiver_type, - startTime: startTime, - stopTime: stopTime, - quantity_delivered:quantity_delivered +// if (allMotorStatusZero) { +// console.log(allMotorStatusZero) +// // Update the motor_status field to "0" for the tank +// await Tank.findOneAndUpdate( +// { customerId, tankName: receiver_tank, tankLocation: receiver_type }, +// { $set: { motor_status: "0" } } +// ); +// } + +// //saving the motor run time and data + +// motorData = { + +// customerId:customerId, +// supplierTank : supplier_tank, +// supplier_type: supplier_tank_type, +// receiverTank: receiver_tank, +// receiver_type: receiver_type, +// startTime: startTime, +// stopTime: stopTime, +// quantity_delivered:quantity_delivered - }; - var motorData = new MotorData(motorData); +// }; +// var motorData = new MotorData(motorData); - checkFormEncoding = isUserFormUrlEncoded(req); - if (checkFormEncoding.isUserFormUrlEncoded) { - usertobeInserted = checkFormEncoding.motorData; - console.log("thsi true url string"); - motorData.customerId = customerId; - motorData.supplierTank = supplierTank; - motorData.receiverTank = receiver_tank; - motorData.supplier_type = supplier_type; - motorData.receiver_type = receiver_type; - motorData.startTime = startTime; - motorData.stopTime = stopTime; - motorData.quantity_delivered = quantity_delivered; +// checkFormEncoding = isUserFormUrlEncoded(req); +// if (checkFormEncoding.isUserFormUrlEncoded) { +// usertobeInserted = checkFormEncoding.motorData; +// console.log("thsi true url string"); +// motorData.customerId = customerId; +// motorData.supplierTank = supplierTank; +// motorData.receiverTank = receiver_tank; +// motorData.supplier_type = supplier_type; +// motorData.receiver_type = receiver_type; +// motorData.startTime = startTime; +// motorData.stopTime = stopTime; +// motorData.quantity_delivered = quantity_delivered; - } - const motor_data = await motorData.save(); - console.log(motor_data) - // reply.send({ status_code: 200, data: motor_data }); +// } +// const motor_data = await motorData.save(); +// console.log(motor_data) +// // reply.send({ status_code: 200, data: motor_data }); - // reply.send({ status_code: 200, "start time": start_time, data: motor_data}); - // console.log(start_time) - // return motor_data +// // reply.send({ status_code: 200, "start time": start_time, data: motor_data}); +// // console.log(start_time) +// // return motor_data - // console.log(stop_time) - // clearInterval(intervalId); +// // console.log(stop_time) +// // clearInterval(intervalId); - // await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:(req.body.to_type).toLowerCase()}, { $set: { motor_status: "0" } }); +// // await Tank.findOneAndUpdate({customerId, tankName: receiver_tank,tankLocation:(req.body.to_type).toLowerCase()}, { $set: { motor_status: "0" } }); - reply.send({ status_code: 200, "stop time": stopTime,data: motor_data}); - } else { - throw new Error("Invalid action"); - } +// reply.send({ status_code: 200, "stop time": stopTime,data: motor_data}); +// } else { +// throw new Error("Invalid action"); +// } - return { message: 'Water level updates started' }; +// return { message: 'Water level updates started' }; - } catch (err) { - throw new Error(`Failed to start/stop water level updates: ${err.message}`); +// } catch (err) { +// throw new Error(`Failed to start/stop water level updates: ${err.message}`); - }; -}; +// }; +// }; exports.consumption = async (req, reply) => { @@ -858,7 +858,7 @@ exports.consumption = async (req, reply) => { //const moment = require('moment'); // Import moment.js for date/time operations -exports.motoraction1 = async (req, reply) => { +exports.motorAction = async (req, reply) => { try { const customerId = req.params.customerId; const action = req.body.action; @@ -879,42 +879,64 @@ exports.motoraction1 = async (req, reply) => { throw new Error("Invalid action provided."); } - // Update the motor stop status - await Tank.updateOne( - { customerId, "connections.inputConnections.motor_id": motorId }, - { $set: { "connections.inputConnections.$.motor_stop_status": motorStopStatus } } - ); - - // Check threshold settings - if (req.body.threshold_type === "time") { - // If threshold type is time, update threshold time + // Update the motor stop status immediately if action is stop + if (action === "stop") { await Tank.updateOne( { customerId, "connections.inputConnections.motor_id": motorId }, - { $set: { "connections.inputConnections.$.manual_threshold_time": req.body.manual_threshold_time } } + { $set: { "connections.inputConnections.$.motor_stop_status": "1" } } ); - } else if (req.body.threshold_type === "percentage") { - // 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() }); - if (!receiver_tank_info) { - throw new Error("Receiver tank not found."); - } - const capacity = parseInt(receiver_tank_info.capacity, 10); - const desired_percentage = parseInt(req.body.manual_threshold_percentage, 10); - const threshold_water_level = (capacity * desired_percentage) / 100; - - // Update water level threshold + } else { + // Update the motor stop status to "2" for start action await Tank.updateOne( { customerId, "connections.inputConnections.motor_id": motorId }, - { $set: { "connections.inputConnections.$.water_level_threshold": threshold_water_level.toString() } } + { $set: { "connections.inputConnections.$.motor_stop_status": "2" } } ); + } - // Start monitoring water level if action is start - if (action === "start") { + // Check threshold settings if action is start + if (action === "start") { + 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 } } + ); + + // Start monitoring water level based on threshold time + const thresholdTime = moment().add(req.body.manual_threshold_time, 'minutes').toDate(); const intervalId = setInterval(async () => { - const receiver_tank_info = await Tank.findOne({ customerId, tankName: req.body.to, tankLocation: req.body.to_type.toLowerCase() }); + // Check if threshold time has been reached + if (new Date() >= thresholdTime) { + // Stop the motor pump + await Tank.updateOne( + { customerId, "connections.inputConnections.motor_id": motorId }, + { $set: { "connections.inputConnections.$.motor_stop_status": "1" } } + ); + clearInterval(intervalId); // Stop monitoring water level + } + }, 60000); // Check water level every minute + } else if (req.body.threshold_type === "percentage") { + // 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() }); + if (!receiver_tank_info) { + throw new Error("Receiver tank not found."); + } + const capacity = parseInt(receiver_tank_info.capacity, 10); + const desired_percentage = parseInt(req.body.manual_threshold_percentage, 10); + const threshold_water_level = (capacity * desired_percentage) / 100; + + // Update water level threshold + await Tank.updateOne( + { customerId, "connections.inputConnections.motor_id": motorId }, + { $set: { "connections.inputConnections.$.water_level_threshold": threshold_water_level.toString() } } + ); + + // Start monitoring water level based on threshold percentage + const intervalId = setInterval(async () => { + // Check if water level has reached the threshold percentage const current_water_level = parseInt(receiver_tank_info.water_level, 10); if (current_water_level >= threshold_water_level) { - // Water level reached threshold, stop the motor + // Stop the motor pump await Tank.updateOne( { customerId, "connections.inputConnections.motor_id": motorId }, { $set: { "connections.inputConnections.$.motor_stop_status": "1" } } @@ -934,6 +956,8 @@ exports.motoraction1 = async (req, reply) => { }; + + // exports.calculateCapacity = async (req, reply) => { // try { // const shape = req.body.shape @@ -1228,7 +1252,6 @@ exports.calculateCapacity = async (req, reply) => { - exports.IotDevice = async (req, reply) => { try { const { hardwareId, mode, tanks } = req.body; @@ -1271,6 +1294,121 @@ exports.IotDevice = async (req, reply) => { // Find the corresponding tank in tanksSchema const existingTank = await Tank.findOne({ hardwareId, tankhardwareId }); + + if (existingTank) { + // Update the waterlevel using the tankHeight value + + const tank_height1 = (parseInt(existingTank.height.replace(/,/g, ''), 10)) * 30.48; + console.log(tank_height1, 25); + + // The value of tank_height1 is a number, not a string, so you cannot use replace on it. + // If you want to format it with commas, you can create a function to add commas to a number. + function numberWithCommas(x) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + } + + // Now you can use the function to format the tank_height1 value with commas. + const formatted_tank_height1 = numberWithCommas(tank_height1); + console.log(formatted_tank_height1, 25); + + const tank_height = parseInt(formatted_tank_height1.replace(/,/g, ''), 10); + console.log(tank_height); + // console.log(tank_height,1) + const water_level_height = tank_height - tankHeight + console.log(water_level_height,2) + + const waterCapacityPerCm = parseInt(existingTank.waterCapacityPerCm.replace(/,/g, ''), 10) + console.log(waterCapacityPerCm,3) + const water_level = water_level_height * waterCapacityPerCm; +console.log(water_level, 4); + +// Function to add commas to a number +function numberWithCommas(x) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + +const formatted_water_level = numberWithCommas(water_level); +console.log(formatted_water_level, 4); + +existingTank.waterlevel = parseInt(formatted_water_level.replace(/,/g, ''), 10); +console.log(existingTank.waterlevel); + + + + // Save the updated tank document + await existingTank.save(); + for (const outputConnection of existingTank.connections.outputConnections) { + const linkedTank = await Tank.findOne({ customerId: customerId, tankName: outputConnection.outputConnections, tankLocation: outputConnection.output_type }); + if (linkedTank) { + // linkedTank.waterlevel = existingTank.waterlevel; + //await linkedTank.save(); + + // Update water level of tanks linked through input connections of the linked tank + for (const inputConnection of linkedTank.connections.inputConnections) { + if (inputConnection.inputConnections === tank_name) { + inputConnection.water_level = water_level.toString(); + await linkedTank.save(); + } + } + } + } + } + } + + // Send the latest three documents + const latestOttanks = await IotData.find({ hardwareId }) + .sort({ date: -1, time: -1 }); + + reply.code(200).send({ latestOttanks }); + } catch (err) { + // send an error response + reply.code(500).send({ error: err.message }); + } +}; + + +exports.IotDevice1 = async (req, reply) => { + try { + const { hardwareId, mode, tanks } = req.body; + + // create a new tank document with the current date and time + const currentDate = new Date(); + const date = currentDate.toISOString(); // save the date as an ISO string + const time = currentDate.toLocaleTimeString('en-IN', { hour12: false, timeZone: 'Asia/Kolkata' }); + + // Create an array of tank documents + const tankDocuments = tanks.map(tank => ({ + tankhardwareId: tank.tankhardwareId, + tankHeight: tank.tankHeight, + maxLevel: tank.maxLevel, + minLevel: tank.minLevel, + date: date, + time: time + })); + + // create a new IotData document with the provided data + const ottank = new IotData({ hardwareId, mode, tanks: tankDocuments, date, time }); + + // save the document to MongoDB + await ottank.save(); + + // Delete excess records (keep only the latest three records) + const recordsToKeep = 3; + const recordsToDelete = await IotData.find({ hardwareId }) + .sort({ date: -1, time: -1 }) + .skip(recordsToKeep); + + for (const record of recordsToDelete) { + await record.remove(); + } + + // Update waterlevel in tanksSchema for each tank + for (const tank of tanks) { + const { tankhardwareId, tankHeight } = tank; + + // Find the corresponding tank in tanksSchema + const existingTank = await Tank.findOne({ hardwareId, tankhardwareId }); + if (existingTank) { // Update the waterlevel using the tankHeight value const tank_height = parseInt(existingTank.height.replace(/,/g, ''), 10) * 30.48; diff --git a/src/routes/tanksRoute.js b/src/routes/tanksRoute.js index 0d18fcf1..259cb827 100644 --- a/src/routes/tanksRoute.js +++ b/src/routes/tanksRoute.js @@ -286,7 +286,7 @@ module.exports = function (fastify, opts, next) { action: { type: "string" }, percentage: { type: "string",default: "100" }, startTime:{ type: "string" }, - threesold_type:{type:"string"}, + threshold_type:{type:"string"}, manual_threshold_percentage:{type:"string"}, manual_threshold_time:{type:"string"}, stop_at:{type:"number"}, @@ -303,7 +303,7 @@ module.exports = function (fastify, opts, next) { // fastify.auth([fastify.operatorAuthenticate]), // validationHandler.validatePhoneFormat, // ], - preHandler: fastify.auth([fastify.authenticate]), + //preHandler: fastify.auth([fastify.authenticate]), handler: tanksController.motorAction, });