Bases técnicas

Todo lo que tu equipo necesita saber para construir, entregar y presentar su proyecto en el II Reto Agrotech 2026.

Tutores y equipos inscritos recibirán también estas bases por email.

Sección 1

El desafío

Desarrollar una web app responsiva que permita a un agricultor / técnico monitorizar en tiempo real sensores ubicados en una parcela (temperatura, humedad del suelo, luminosidad, humedad ambiental, etc.). La solución debe ser un proyecto desarrollado con software libre, usando Python con la tecnología Reflex, base de datos para la recogida de datos, control de versiones con git y código publicado en GitHub.

Sección 2

Tecnologías

La propuesta de partida es trabajar con software libre:

  • Python con Reflex para la interfaz y la lógica de la aplicación.
  • git para el control de versiones, con el código colgado en un repositorio de GitHub.
  • Licencia GPL v3 o posterior para el código del proyecto.

Sección 3

Requisitos mínimos

La solución deberá cumplir, como mínimo, los siguientes requisitos:

  • Una interfaz web que sea responsiva, para usarse en ordenador, tableta y móvil.
  • Almacenamiento de los datos que maneje la aplicación.
  • Un funcionamiento demostrable en directo, con datos reales o simulados.
  • Un código ordenado y comentado donde la lógica no sea evidente.

Sección 4

Control de versiones

Cada equipo usará git para el control de versiones y colgará su software en un repositorio de GitHub desde el primer día. Se valorará un historial en GitHub que cuente cómo ha crecido el proyecto:

  • Commits frecuentes y con mensajes descriptivos.
  • Ramas para cada funcionalidad nueva.
  • Pull requests en GitHub para revisar el código del equipo antes de unirlo a la rama principal.

Sección 5

Documentación

El repositorio deberá explicar el proyecto a quien lo abra por primera vez:

  • Un README con el propósito, la instalación y cómo ejecutarlo en local.
  • Un documento breve con la arquitectura y las decisiones técnicas.
  • La evolución del trabajo durante la fase de desarrollo.

Sección 6

Entrega

Cada equipo subirá su proyecto a la plataforma colaborativa antes de la fecha límite. Las instrucciones de acceso a la plataforma llegarán por email a tutores y equipos.

Entrega prevista

Sección 7

Criterios de evaluación

El jurado puntuará cada proyecto según criterios que se publicarán con su peso en las bases. Se tendrán en cuenta, entre otros:

  • Funcionalidad y utilidad para el sector agro
  • Calidad técnica del código
  • Diseño y facilidad de uso
  • Documentación y uso de git
  • Innovación de la propuesta
  • Presentación ante el jurado

Sección 8

Presentación final

En la Gran Final, cada equipo presentará y demostrará en directo su solución ante el jurado: el problema que resuelve, cómo funciona y su posible aplicación en el sector.

Fecha prevista

Ayuda técnica

Conceptos de referencia para orientar el desarrollo. Son sugerencias: cada equipo puede adaptarlos a su solución.

Backend

  • Registro de datos en una base de datos (BBDD).
  • API REST creada desde el mismo Reflex o con FastAPI, para el envío y la lectura de datos.
  • Documentar ejemplos de uso en el README.

Endpoints sugeridos

api.httpHTTP
POST/api/auth/login → obtiene token (si aplica).
GET/api/parcels → listar parcelas.
GET/api/parcels/{id}/sensors → sensores de parcela.
POST/api/sensors/{sensor_id}/data → enviar dato sensor (permitir fuentes externas o simulador).
GET/api/sensors/{sensor_id}/data?from=&to=&limit= → histórico.
GET/api/dashboard → resumen (último valor, alertas).
WS/ws/parcels/{id} → (opcional) streaming en tiempo real.

Ejemplo de respuesta

Respuesta de GET /api/sensors/{sensor_id}/data en JSON, con el formato de dato de ejemplo:

respuesta.jsonJSON
{
  "sensor_id": "t001",
  "timestamp": "2025-10-10T12:34:56Z",
  "type": "temperatura",
  "value": 23.7,
  "unit": "ºC"
}

Base de datos

Puede usarse cualquiera de estos motores:

  • SQLite
  • MySQL
  • PostgreSQL
  • MariaDB

Ejemplos de tablas básicas:

userstabla
id (INTEGER, PK)username (TEXT)password_hash (TEXT)role (TEXT)
parcelstabla
id (INTEGER, PK)name (TEXT)location (TEXT)
sensorstabla
id (TEXT, PK) -- ej. "t001"parcel_id (INTEGER, FK parcels.id)type (TEXT) -- temperatura, humedad_suelo, luminosidad...unit (TEXT)description (TEXT)threshold_low (REAL)threshold_high (REAL)
sensor_datatabla
id (INTEGER, PK)sensor_id (TEXT, FK sensors.id)timestamp (TEXT ISO)value (REAL)raw (TEXT) -- opcional JSON
alertstabla
id (INTEGER, PK)sensor_idtimestamptype (TEXT) -- "LOW"/"HIGH"message (TEXT)acknowledged (BOOLEAN)

¿Tienes dudas sobre las bases técnicas?

Contacta con la organización