Requerimientos del Sistema

1. Requerimientos Funcionales

1.1. API RESTful

  • Sensores:

    • GET /api/sensors: Obtener la lista de todos los sensores.
    • GET /api/sensors/{sensor_id}: Obtener información específica sobre un sensor.
    • POST /api/sensors: Crear un nuevo sensor.
    • PUT /api/sensors/{sensor_id}: Actualizar información de un sensor existente.
    • DELETE /api/sensors/{sensor_id}: Eliminar un sensor.
  • Nodos Hoja:

    • GET /api/leaf-nodes: Obtener la lista de todos los nodos hoja.
    • GET /api/leaf-nodes/{node_id}: Obtener información específica sobre un nodo hoja.
    • POST /api/leaf-nodes: Crear un nuevo nodo hoja.
    • PUT /api/leaf-nodes/{node_id}: Actualizar información de un nodo hoja existente.
    • DELETE /api/leaf-nodes/{node_id}: Eliminar un nodo hoja.
  • Nodos Rama:

    • GET /api/branch-nodes: Obtener la lista de todos los nodos rama.
    • GET /api/branch-nodes/{node_id}: Obtener información específica sobre un nodo rama.
    • POST /api/branch-nodes: Crear un nuevo nodo rama.
    • PUT /api/branch-nodes/{node_id}: Actualizar información de un nodo rama existente.
    • DELETE /api/branch-nodes/{node_id}: Eliminar un nodo rama.
  • Datos de Riego:

    • GET /api/watering-data: Obtener datos históricos y en tiempo real sobre el riego.
    • POST /api/watering-data: Enviar datos nuevos sobre el riego desde sensores.
  • Usuarios:

    • GET /api/users: Obtener la lista de todos los usuarios.
    • GET /api/users/{user_id}: Obtener información específica sobre un usuario.
    • POST /api/users: Crear un nuevo usuario.
    • PUT /api/users/{user_id}: Actualizar información de un usuario existente.
    • DELETE /api/users/{user_id}: Eliminar un usuario.

1.2. Autenticación y Autorización

  • Implementar autenticación mediante JWT (JSON Web Tokens) para asegurar que solo los usuarios autorizados puedan acceder a ciertos endpoints.
  • Definir roles de usuario (administrador, agricultor, analista) con permisos específicos.

1.3. Almacenamiento y Base de Datos

  • Utilizar PostgreSQL con PostGIS para almacenar datos geoespaciales y permitir análisis avanzados.

1.4. Comunicación

  • Implementar MQTT para la comunicación en tiempo real entre dispositivos IoT, nodos hoja y el backend.

2. Requerimientos No Funcionales

2.1. Rendimiento

  • La API debe ser capaz de manejar al menos X solicitudes por segundo sin degradar el rendimiento.

2.2. Escalabilidad

  • La arquitectura debe permitir la adición fácil de nuevos nodos y sensores sin necesidad de reconfiguración significativa.

2.3. Seguridad

  • Todos los datos sensibles deben ser cifrados durante la transmisión y almacenamiento.

2.4. Usabilidad

  • La interfaz del usuario debe ser intuitiva y fácil de usar, especialmente para usuarios no técnicos.

3. Tecnologías Propuestas

  • Backend: Python (Flask o FastAPI), PostgreSQL con PostGIS, MQTT (Mosquitto).
  • Frontend: Streamlit para prototipos rápidos o React/Vue.js para aplicaciones más complejas.
  • Contenedores: Docker para contenerizar la aplicación; Kubernetes para orquestar los contenedores.
  • Visualización Geoespacial: Leafmap o QGIS Web para mostrar mapas interactivos.

Caso de Uso

Caso de Uso: Monitoreo y Control del Riego

Actores

  • Administrador
  • Agricultor

Descripción

El agricultor necesita monitorear las condiciones del suelo en su campo y ajustar el sistema de riego basado en datos en tiempo real proporcionados por los sensores instalados. El administrador configura el sistema y gestiona los usuarios y dispositivos.

Flujo Principal

  1. Autenticación del Usuario

    • El agricultor inicia sesión en la aplicación utilizando sus credenciales.
    • El sistema valida las credenciales y proporciona acceso al dashboard.
  2. Visualización del Dashboard

    • El agricultor accede al dashboard donde se muestran datos en tiempo real sobre humedad del suelo, temperatura y estado del sistema de riego.
    • Se visualizan mapas interactivos que muestran la ubicación de los sensores en el campo utilizando Leafmap o QGIS Web.
  3. Monitoreo de Sensores

    • El agricultor puede ver el estado actual de cada sensor (activo/inactivo).
    • Se reciben alertas en caso de que algún sensor detecte condiciones críticas (ej., baja humedad).
  4. Ajuste del Sistema de Riego?

    • Basado en los datos visualizados, el agricultor puede ajustar manualmente el sistema de riego a través del dashboard o programar riegos automáticos basados en condiciones específicas definidas previamente.
  5. Análisis Histórico

    • El agricultor puede acceder a datos históricos para analizar patrones en la humedad del suelo y optimizar el uso del agua a lo largo del tiempo.
  6. Configuración por Parte del Administrador

    • El administrador puede agregar nuevos sensores o nodos al sistema utilizando una interfaz dedicada.
    • Puede gestionar roles y permisos para diferentes usuarios, asegurando que cada uno tenga acceso solo a las funciones necesarias.
  7. Integración con Datos Externos

    • Se pueden integrar datos meteorológicos externos para mejorar las decisiones sobre el riego utilizando APIs externas (ej., OpenWeatherMap).