Volver a proyectos

Trabajo Fin de Grado

AirQualityNest

Aplicación web y móvil para consultar la calidad del aire en tiempo real, recibir alertas y ver una predicción a 7 días.

JavaSpring BootReactViteBootstrapFIWAREMongoDBMySQLPythonFlaskscikit-learnDockerJWT

Resumen

AirQualityNest es mi Trabajo Fin de Grado de Ingeniería Informática en la Universidad de Murcia (2024). Es una aplicación web y móvil que permite consultar la calidad del aire de la ubicación del usuario en tiempo real, recibir alertas cuando se supera un umbral y ver una predicción a 7 días.

Se planteó como un prototipo funcional con dos tipos de usuario: el participativo, que consulta la calidad del aire, la predicción y sus alertas, y el gestor, que administra usuarios y crea otros gestores.

Presentación del Trabajo Fin de Grado
Presentación del Trabajo Fin de Grado

Aspectos destacados

  • Trabajo Fin de Grado de Ingeniería Informática en la Universidad de Murcia
  • Integración con FIWARE mediante Orion Context Broker y la entidad estándar AirQualityObserved
  • Servicio de predicción independiente en Python con un modelo de Machine Learning
  • Interfaz responsive pensada principalmente para móvil
Documento PDF del Trabajo Fin de Grado

Arquitectura

El backend está desarrollado en Java con Spring Boot siguiendo arquitectura limpia, expone una API REST y protege el acceso con Spring Security y JWT. El frontend está hecho con React, Vite y Bootstrap.

Los datos se obtienen de Google Air Quality API y se guardan en MySQL. Orion Context Broker, sobre MongoDB, gestiona el contexto con la entidad AirQualityObserved y sus suscripciones disparan las alertas cuando se supera un umbral. La predicción se ejecuta en un servicio separado en Python con Flask y scikit-learn, para poder cambiar de modelo sin tocar el backend.

Todo se despliega en local con docker-compose en seis servicios: frontend, backend, MongoDB, Orion, MySQL y predicción.

Diagrama de arquitectura de AirQualityNest
Diagrama de arquitectura de AirQualityNest

Retos técnicos

  • Integrar la plataforma FIWARE y usar las suscripciones de Orion para generar alertas
  • Elegir una fuente de datos viable, optando por Google Air Quality API frente a Meteosource por ser gratuita
  • Comparar modelos de predicción (regresión lineal, SVR y Random Forest) con pocos datos disponibles
  • Trabajar dentro del límite gratuito de la API, agrupando las coordenadas por grados para reducir consultas
  • Separar el servicio de predicción para poder evolucionar el modelo de forma independiente

Resultado

El prototipo cumplió los objetivos principales. El modelo elegido fue un RandomForestRegressor de 250 árboles que usa los 6 días anteriores como entrada y obtuvo un MAE de 3,85 sobre un índice de 0 a 100, mejor que la regresión lineal y SVR. Aun así, se entrenó con solo 55 datos, por lo que la propia memoria indica que hace falta más volumen para una predicción fiable.

El servicio de calidad del aire se validó con 15 tests unitarios y 13 de integración, además de pruebas de sistema de los endpoints.

Documento PDF de la presentación del Trabajo Fin de Grado