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.
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.

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
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.

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.