@ -1564,60 +1564,18 @@ admin.initializeApp({
// await sendNotification(fcmTokens, 'Motor Started', `Motor ID: ${motorId} started successfully at ${timestamp}. Current Water Level: ${waterLevel} Ltrs`);
// });
// eventEmitter.on('motorStart', async (fcmTokens, timestamp, motorId, waterLevel, blockName, tankName, startTime, motorOnType, stopCriteria) => {
// const message = `MotorId '${motorId}' Water supply from '${blockName}' to '${tankName}' started at ${startTime} by '${motorOnType}' mode and will stop after ${stopCriteria}. Current Water Level: ${waterLevel} Ltrs.`;
// await sendNotification(fcmTokens, 'Motor Started', message);
// });
// eventEmitter.on('motorStart', async (fcmTokens, timestamp, motorId, waterLevel, blockName, tankName, startTime, motorOnType, stopCriteria) => {
// const message = `Tank Name : '${tankName}' Pump Starts at '${startTime}' by '${motorOnType}' will stop at '${stopCriteria} mins'`;
// await sendNotification(fcmTokens, 'Arminta Water Management', message);
// });
eventEmitter . on ( 'motorStart' , async ( fcmTokens , timestamp , motorId , waterLevel , blockName , tankName , startTime , motorOnType , stopCriteria ) => {
try {
// Retrieve the user information
const users = await User . find ( { fcmId : { $in : fcmTokens } } ) ;
console . log ( "users" , users )
const userNames = users . map ( user => user . username ) . join ( ', ' ) ;
console . log ( "userNames" , userNames )
// Prepare the message
const message = ` Tank Name: ' ${ tankName } ', Pump started at ' ${ startTime } ' by Initiated by user(s): ${ userNames } ' ${ motorOnType } ' and will stop after ' ${ stopCriteria } ' ` ;
// Send the notification
await sendNotification ( fcmTokens , 'Arminta Water Management' , message ) ;
} catch ( error ) {
console . error ( 'Error in motorStart event:' , error ) ;
}
const message = ` Water supply from ' ${ blockName } ' to ' ${ tankName } ' started at ${ startTime } by ' ${ motorOnType } ' mode and will stop after ${ stopCriteria } . Current Water Level: ${ waterLevel } Ltrs. ` ;
await sendNotification ( fcmTokens , 'Motor Started' , message ) ;
} ) ;
// Emit motor stop event with motorId
// eventEmitter.on('motorStop', async (fcmTokens, motorId, waterLevel, blockName, tankName, stopTime, motorOnType) => {
// const message = `MotorId '${motorId}' Water supply from '${blockName}' to '${tankName}' stopped at ${stopTime} by '${motorOnType}' mode. Current Water Level: ${waterLevel} Ltrs.`;
// await sendNotification(fcmTokens, 'Motor Stopped', message);
// });
eventEmitter . on ( 'motorStop' , async ( fcmTokens , tankName , stopTime , motorOnType ) => {
try {
// Retrieve the user information
const users = await User . find ( { fcmId : { $in : fcmTokens } } ) ;
console . log ( "users" , users )
const userNames = users . map ( user => user . username ) . join ( ', ' ) ;
console . log ( "userNames" , userNames )
// Prepare the message
const message = ` Tank Name: ' ${ tankName } ', Pump stopped at ' ${ stopTime } ' by Initiated by user(s): ${ userNames } ' ${ motorOnType } ' ` ;
// Send the notification
await sendNotification ( fcmTokens , 'Arminta Water Management' , message ) ;
} catch ( error ) {
console . error ( 'Error in motorStart event:' , error ) ;
}
eventEmitter . on ( 'motorStop' , async ( fcmTokens , timestamp , motorId , waterLevel , blockName , tankName , stopTime , motorOnType ) => {
const message = ` Water supply from ' ${ blockName } ' to ' ${ tankName } ' stopped at ${ stopTime } by ' ${ motorOnType } ' mode. Current Water Level: ${ waterLevel } Ltrs. ` ;
await sendNotification ( fcmTokens , 'Motor Stopped' , message ) ;
} ) ;
// Event listener to handle notification
eventEmitter . on ( 'sendLowWaterNotification' , async ( fcmToken , tankInfo ) => {
const message = formatWaterLevelMessage ( tankInfo , 'low' ) ;
@ -2069,50 +2027,50 @@ exports.motorAction = async (req, reply) => {
const currentWaterLevel = parseInt ( receiverTank . waterlevel , 10 ) ;
const waterLevelThresholds = { low : 30 , veryLow : 20 , criticallyLow : 10 } ;
// // Check if the water level is below any of the thresholds
// if (currentWaterLevel < waterLevelThresholds.criticallyLow) {
// if (!receiverTank.notificationSentCritical) {
// eventEmitter.emit('sendCriticalLowWaterNotification', fcmToken, receiverTank);
// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentCritical: true } });
// }
// } else if (currentWaterLevel < waterLevelThresholds.veryLow) {
// if (!receiverTank.notificationSentVeryLow) {
// eventEmitter.emit('sendVeryLowWaterNotification', fcmToken, receiverTank);
// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentVeryLow: true } });
// }
// } else if (currentWaterLevel < waterLevelThresholds.low) {
// if (!receiverTank.notificationSentLow) {
// eventEmitter.emit('sendLowWaterNotification', fcmToken, receiverTank);
// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentLow: true } });
// }
// }
// Check if the water level is below any of the thresholds
if ( currentWaterLevel < waterLevelThresholds . criticallyLow ) {
if ( ! receiverTank . notificationSentCritical ) {
eventEmitter . emit ( 'sendCriticalLowWaterNotification' , fcmToken , receiverTank ) ;
await Tank . updateOne ( { customerId , tankName : receiverTank . tankName } , { $set : { notificationSentCritical : true } } ) ;
}
} else if ( currentWaterLevel < waterLevelThresholds . veryLow ) {
if ( ! receiverTank . notificationSentVeryLow ) {
eventEmitter . emit ( 'sendVeryLowWaterNotification' , fcmToken , receiverTank ) ;
await Tank . updateOne ( { customerId , tankName : receiverTank . tankName } , { $set : { notificationSentVeryLow : true } } ) ;
}
} else if ( currentWaterLevel < waterLevelThresholds . low ) {
if ( ! receiverTank . notificationSentLow ) {
eventEmitter . emit ( 'sendLowWaterNotification' , fcmToken , receiverTank ) ;
await Tank . updateOne ( { customerId , tankName : receiverTank . tankName } , { $set : { notificationSentLow : true } } ) ;
}
}
// Check for critical high water level
// if (currentWaterLevel >= criticalHighWaterThreshold) {
// if (!receiverTank.notificationSentCriticalHigh) {
// eventEmitter.emit('sendCriticalHighWaterNotification', fcmToken, receiverTank);
// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentCriticalHigh: true } });
// }
// }
// // Check for very high water level
// else if (currentWaterLevel >= veryHighWaterThreshold) {
// if (!receiverTank.notificationSentVeryHigh) {
// eventEmitter.emit('sendVeryHighWaterNotification', fcmToken, receiverTank);
// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentVeryHigh: true } });
// }
// }
// // Check for high water level
// else if (currentWaterLevel >= highWaterThreshold) {
// if (!receiverTank.notificationSentHigh) {
// eventEmitter.emit('sendHighWaterNotification', fcmToken, receiverTank);
// await Tank.updateOne({ customerId, tankName: receiverTank.tankName }, { $set: { notificationSentHigh: true } });
// }
// }
if ( currentWaterLevel >= criticalHighWaterThreshold ) {
if ( ! receiverTank . notificationSentCriticalHigh ) {
eventEmitter . emit ( 'sendCriticalHighWaterNotification' , fcmToken , receiverTank ) ;
await Tank . updateOne ( { customerId , tankName : receiverTank . tankName } , { $set : { notificationSentCriticalHigh : true } } ) ;
}
}
// Check for very high water level
else if ( currentWaterLevel >= veryHighWaterThreshold ) {
if ( ! receiverTank . notificationSentVeryHigh ) {
eventEmitter . emit ( 'sendVeryHighWaterNotification' , fcmToken , receiverTank ) ;
await Tank . updateOne ( { customerId , tankName : receiverTank . tankName } , { $set : { notificationSentVeryHigh : true } } ) ;
}
}
// Check for high water level
else if ( currentWaterLevel >= highWaterThreshold ) {
if ( ! receiverTank . notificationSentHigh ) {
eventEmitter . emit ( 'sendHighWaterNotification' , fcmToken , receiverTank ) ;
await Tank . updateOne ( { customerId , tankName : receiverTank . tankName } , { $set : { notificationSentHigh : true } } ) ;
}
}
// Determine the motor stop status based on the action
let motorStopStatus ;
const blockName = req . body . from || "Unknown Block" ; // Provide a fallback if `from` is missing
const tankName = req . body . to || "Unknown Tank" ; // Provide a fallback if `to` is missing
const stopTime = req . body . stopTime || new Date ( ) . toISOString ( ) ;
const motorOnType = req . body . motor _on _type || " app ";
const motorOnType = req . body . motor _on _type || " manual ";
if ( action === "start" ) {
motorStopStatus = "2" ;
@ -2146,6 +2104,9 @@ exports.motorAction = async (req, reply) => {
eventEmitter . emit (
"motorStop" ,
fcmToken ,
motorId ,
currentWaterLevel ,
blockName ,
tankName ,
stopTime ,
motorOnType