diff --git a/app/exceptions/deviating_parameters.py b/app/exceptions/deviating_parameters.py index df1744b..ed0ecda 100644 --- a/app/exceptions/deviating_parameters.py +++ b/app/exceptions/deviating_parameters.py @@ -1,4 +1,4 @@ class DeviatedParametersError(Exception): def __init__(self, parameters): self.parameters = parameters - super().__init__(f"Out of range parameters: {self.parameters}") + super().__init__(f"Out of range parameters: {self.parameters} type: {type(self.parameters)}") diff --git a/app/service/rabbitmq/consumer.py b/app/service/rabbitmq/consumer.py index 0abd610..5738ac9 100644 --- a/app/service/rabbitmq/consumer.py +++ b/app/service/rabbitmq/consumer.py @@ -18,6 +18,7 @@ from resources.parser import apply_rules from os import environ from firebase_admin import messaging +import sys Base = declarative_base( metadata=MetaData(schema=environ.get("POSTGRES_SCHEMA", "measurements_service")) @@ -67,20 +68,57 @@ def check_package(self, measurement): if len(empty_values) > 0: raise EmptyPackageError(empty_values) + + def generate_notification_body(self, error): + parameters = { + 'temperature': 'temperatura', + 'humidity': 'humedad', + 'light': 'luz', + 'watering': 'riego' + } + + low_parameters = [] + high_parameters = [] + error_dict = error.parameters.dict() + + for param, value in error_dict.items(): + if value == 'lower': + low_parameters.append(parameters.get(param, param)) + elif value == 'higher': + high_parameters.append(parameters.get(param, param)) + + low_msg = ", ".join(f"{param}" for param in low_parameters) + high_msg = ", ".join(f"{param}" for param in high_parameters) + + if low_msg and high_msg: + return f"Los siguientes parámetros están bajos: {low_msg}. Y los siguientes están altos: {high_msg}." + elif low_msg: + return f"Los siguientes parámetros están bajos: {low_msg}." + elif high_msg: + return f"Los siguientes parámetros están altos: {high_msg}." - def send_notification(self, id_user, measurement, error, details): - logger.info(LoggerMessages.USER_NOTIFIED.format(id_user)) + def send_notification(self, id_user, measurement, error, details): print(f"details: {details}") print(f"measurement: {measurement}") print(f"error: {error}") -# if measurement.device_token is not None: -# message = messaging.Message( -# notification=messaging.Notification(title="Estado de tu planta", body="details"), -# token=measurement.device_token, -# ) -# messaging.send(message) + notification_body = self.generate_notification_body(error) + + print(f"notif body: {notification_body}") + + try: + if measurement.device_token is not None: + message = messaging.Message( + notification=messaging.Notification(title="Estado de tu planta", body="notification_body"), + token=measurement.device_token, + ) + messaging.send(message) + logger.info(LoggerMessages.USER_NOTIFIED.format(id_user)) + + except Exception: + pass + def apply_rules(self, measurement, device_plant): deviated_parameters = apply_rules(measurement, device_plant.plant_type) @@ -142,7 +180,7 @@ def __callback(self, body): logger.warn(LoggerMessages.EMPTY_PACKAGE_RECEIVED) logger.debug(LoggerMessages.ERROR_DETAILS.format(err, body)) - self.send_notification(device_plant.id_user, measurement, err, body) + #self.send_notification(device_plant.id_user, measurement, err, body) measurement = None # For not saving the measurement. except DeviatedParametersError as err: