Caso de estudio

SmartPot

Plataforma IoT que vigila cultivos hidropónicos y deja que un asistente actúe sobre ellos

Los sensores ESP32 publican por MQTT con TLS, una API en Spring Boot guarda y controla cada cultivo, y un servicio en FastAPI diagnostica y pronostica. En septiembre de 2026 reconstruí la plataforma después de que producción se cayera.

El problema

Un cultivo hidropónico se pierde rápido cuando la temperatura, el pH o los nutrientes se desvían, y nadie puede vigilarlo todo el día. SmartPot nació como un proyecto universitario para monitorear cultivos a distancia y actuar sobre ellos.

En septiembre de 2026 producción estaba caída. La API rechazaba todas las peticiones tras un cambio en el prefijo de sus rutas, el contenedor de la base de datos no existía, el broker MQTT que la API esperaba nunca se había desplegado y varios servicios internos quedaban expuestos a internet.

Restricciones

  • Los dispositivos están en redes de hogar, así que el broker tiene que ser accesible desde internet y aun así autenticar cada dispositivo.
  • Cinco estudiantes con horarios distintos y un solo servidor.
  • La demo tiene que funcionar sin hardware real.

Lo que construí

  • Un repositorio por componente, cada uno con una imagen endurecida en GHCR, para la API, la web, el servicio de IA, el broker, la base de datos, la caché, el correo, el firmware y el simulador.
  • Un contrato MQTT versionado (smartpot/v1/{cropId}/…) sobre Mosquitto 2.1 con seguridad dinámica, TLS 1.2 o superior en el puerto 8883 con su propia autoridad certificadora, y WebSockets detrás de Nginx para el navegador.
  • Una API en Spring Boot 4 con Java 21, MongoDB, Redis y JWT, que verifica la propiedad de cada cultivo y cada dispositivo.
  • Un asistente en FastAPI que combina un sistema experto, lógica difusa y modelos de scikit-learn. Pronostica las horas que faltan para que una variable salga de su rango (Theil-Sen), agrupa los cultivos con el mismo problema (K-Means) y sugiere una sola acción para todos.
  • Un simulador de dispositivos por MQTT, con un modo de clima alimentado por Open-Meteo, para que la demo y las comprobaciones de punta a punta corran sin hardware.
  • Despliegue desde el repositorio de la organización, con Docker Compose en producción y manifiestos de Kubernetes.

Arquitectura

Del sensor a la pantalla

Los datos van en ambos sentidos entre columnas vecinas, porque las lecturas van a la derecha y las órdenes regresan.

  1. Campo

    • Firmware ESP32 en MicroPython
    • Simulador de dispositivos con clima real
  2. Mensajería

    • Broker Mosquitto 2.1
    • TLS en 8883 y WebSockets detrás de Nginx
    • Credenciales por dispositivo
  3. Plataforma

    • API en Spring Boot 4 con Java 21
    • MongoDB y Redis
    • Asistente en FastAPI con scikit-learn
  4. Personas

    • PWA en React 19
    • Alertas por Telegram

Entrega

  • Imágenes endurecidas en GHCR
  • Despliegue central con Docker Compose
  • Manifiestos de Kubernetes

Decisiones y sus costos

  1. MQTT con credenciales por dispositivo

    Los dispositivos están en redes de hogar. Envían lecturas, reciben órdenes de la API y cada uno tiene que autenticarse.

  2. El simulador como componente de verdad

    La demo tiene que funcionar sin hardware real.

  3. Reglas expertas junto a los modelos

    Los modelos necesitan datos antes de ayudar, y al principio no hay lecturas.

Resultados

  • De vuelta en producción el 26 de septiembre de 2026, con siete contenedores sanos y TLS verificado en el broker.
  • 139 pruebas en la API y 35 comprobaciones de punta a punta.
  • Escribí 2.273 de los 2.446 commits no automatizados de los 11 repositorios.

Pendientes

  • Respaldos automáticos de la base de datos antes de que lleguen más cultivadores.
  • Correr los manifiestos de Kubernetes en un clúster real.

Stack

Elige una tecnología para ver qué proyectos la usan.