HayAgua

Relacionado con: GeoWatch


Arquitectura

1. Nodos Hoja

Descripción

Los nodos hoja son dispositivos que contienen sensores y gestionan la comunicación con el entorno. Están diseñados para recolectar datos en tiempo real sobre las condiciones del suelo y el clima.

Funciones

  • LoRaWAN: Utilizan tecnología LoRaWAN para comunicarse a larga distancia con el nodo rama o directamente con el backend.
  • Manejo de Fallas:
    • Detección de Fallas: Monitoreo continuo de la salud del sistema y notificación de fallas.
    • Notificación: Envío de alertas al backend sobre problemas detectados.
  • Validación de Datos:
    • Filtrado de Datos: Aplicar reglas para validar los datos entrantes (ej., valores fuera de rango).
    • Transformación: Convertir datos en bruto a un formato estructurado (JSON) antes de enviarlos al backend.
  • Conversión de Datos: Transformar datos crudos a datos aplicables que puedan ser utilizados por el backend.
  • Almacenamiento Local: Guardar datos temporalmente en caso de pérdida de conexión.

2. Nodos Rama

Descripción

Los nodos rama actúan como intermediarios entre los nodos hoja y el backend. Se encargan de recibir datos de múltiples nodos hoja y enviarlos al backend.

Funciones

  • Cliente MQTT:
    • Implementar un cliente MQTT que se conecte al broker MQTT del backend.
    • Suscribirse a temas relevantes para recibir datos desde los nodos hoja.
  • Validación de Comunicación:
    • Asegurar que todos los nodos hoja están activos y comunicándose correctamente.
  • Almacenamiento:
    • Utilizar almacenamiento local (ej., base de datos SQLite) para guardar datos históricos y temporales.
  • Conectividad:
    • Soportar múltiples métodos de comunicación (4G LTE, Ethernet, LoRaWAN) para asegurar la conectividad continua.

3. Backend

Descripción

El backend es el núcleo del sistema, responsable del procesamiento de datos, la gestión de usuarios y la generación dinámica de contenedores según las necesidades del cliente.

Funciones

  • Generador de Contenedores:

    • Utilizar Docker para crear contenedores basados en plantillas específicas para cada proyecto. Esto permite escalar fácilmente según las necesidades del cliente.
    • Implementar un sistema que permita a los administradores definir configuraciones específicas mediante archivos YAML que describan la infraestructura requerida.
  • Broker MQTT:

    • Configurar un broker MQTT (como Mosquitto) que gestione la comunicación entre todos los nodos. Debe ser capaz de manejar múltiples conexiones simultáneas y garantizar la entrega confiable de mensajes.
  • Limpieza de Datos para SQL:

    • Implementar un módulo que procese los datos recibidos antes de almacenarlos en la base de datos SQL. Esto incluye validación, transformación y enriquecimiento de datos.
  • Manejador de Temas (Topic Handler):

    • Diseñar un sistema que gestione diferentes temas MQTT, asegurando que los mensajes se dirijan correctamente a sus respectivos módulos dentro del backend.
  • Análisis y AI:

    • Integrar algoritmos de machine learning para realizar análisis predictivos sobre el uso del agua y optimización del riego utilizando bibliotecas como Scikit-Learn o TensorFlow.
  • Manejo del Cliente:

    • Gestionar las conexiones con clientes y dispositivos IoT, asegurando que todos estén correctamente autenticados y autorizados.
  • Análisis de Datos del Campo:

    • Evaluar los datos recogidos por sensores utilizando herramientas como Pandas o GeoPandas para proporcionar información útil sobre el estado del riego.
  • Análisis de Datos Externos (3rd Party):

    • Integrar servicios externos para obtener información adicional como imágenes satelitales o datos meteorológicos. Esto puede incluir APIs como OpenWeatherMap o Google Earth Engine.

4. Frontend

Descripción

La interfaz del usuario debe ser intuitiva y accesible, mostrando información relevante sobre el riego y el estado del sistema.

Funciones

  • Interfaz Intuitiva:

    • Diseñar un dashboard personalizable que permita a los usuarios ver información relevante a través de gráficos simples y mapas interactivos utilizando Streamlit o Leafmap.
  • Visualización Geoespacial:

    • Integrar Leafmap o QGIS Web para mostrar mapas interactivos con información geoespacial sobre sensores y áreas irrigadas.
  • Conectividad en Tiempo Real:

    • Utilizar WebSockets o MQTT para recibir actualizaciones automáticas sobre el estado del sistema en tiempo real.
  • Gestión de Usuarios y Roles:

    • Implementar un sistema robusto para gestionar usuarios y roles, permitiendo diferentes niveles de acceso (administradores, agricultores, analistas).

Requerimientos Técnicos

Backend

  1. API RESTful:

    • Endpoints para gestión de usuarios, sensores, áreas, etc., utilizando Flask o FastAPI.
  2. Base de Datos:

    • PostgreSQL con PostGIS para almacenar información geoespacial.
  3. MQTT Broker:

    • Para manejar la comunicación entre dispositivos IoT.
  4. Módulos de Análisis:

    • Algoritmos para análisis predictivo y optimización del riego.
  5. Configuración Modular:

    • Usar YAML para definir configuraciones específicas por cliente.

Frontend

  1. Interfaz Intuitiva:

    • Dashboard personalizable con visualizaciones claras utilizando Streamlit o frameworks como React/Vue.js.
  2. Visualización Geoespacial:

    • Integración con Leafmap o QGIS Web para visualización geoespacial interactiva.
  3. Conectividad en Tiempo Real:

    • Actualizaciones automáticas utilizando WebSockets o MQTT.
  4. Gestión de Usuarios y Roles:

    • Control sobre quién puede ver o modificar qué datos.

Ejemplo Detallado: Protocolo MQTT

Para asegurar una comunicación rápida y confiable entre todos los componentes, se recomienda establecer un protocolo ligero utilizando MQTT. Aquí tienes algunas sugerencias:

  1. Estructura Clara para Temas:

    irrigation/{client_id}/{node_type}/{sensor_id}/data
    irrigation/{client_id}/{node_type}/{sensor_id}/status
    irrigation/{client_id}/commands
    irrigation/{client_id}/alerts
    
  2. Calidad del Servicio (QoS):
    Utilizar QoS nivel 1 o nivel 2 para asegurar que los mensajes sean entregados al menos una vez o exactamente una vez respectivamente.

  3. Retención de Mensajes:
    Habilitar la retención en mensajes críticos donde sea necesario mantener el último estado conocido.

  4. Seguridad:
    Implementar autenticación mediante usuario/contraseña o certificados SSL/TLS para asegurar la comunicación entre nodos y el broker MQTT.

  5. Validación Rápida de Comunicación:
    Implementar un mecanismo simple donde cada nodo envíe un mensaje “heartbeat” a intervalos regulares para validar su conexión al broker.

Ejemplo Detallado: Configuración YAML

nodes:
  leaf_nodes:
    - node_id: "leaf_node_01"
      sensors:
        humidity_sensor:
          type: "humidity"
          id: "sensor_001"
        temperature_sensor:
          type: "temperature"
          id: "sensor_002"
      communication:
        type: "LoRaWAN"
        fault_handling: true
        data_validation: true
        local_storage_enabled: true
      storage_path: "/local/storage/path"

  branch_nodes:
    - node_id: "branch_node_01"
      mqtt_client_id: "mqtt_client_01"
      communication_methods:
        primary: "4GLTE"
        secondary: "Ethernet"
      data_storage_path: "/branch/storage/path"

backend:
  container_generator:
    template_algorithm: "custom_template_algorithm"
    data_cleaning_enabled: true
    mqtt_broker_url: "mqtt://broker_url"
    topic_handler_enabled: true
    ai_analysis_enabled: true
    field_data_analysis_enabled: true
    third_party_data_analysis_enabled: true
    satellite_image_integration_enabled: true

frontend:
  dashboard_configurable_elements:
    real_time_values_displayed: true
    summary_reports_enabled: true
    user_roles_management_enabled: true
    device_status_monitoring_enabled: true
    map_visualization_enabled: true
    irrigation_estimation_displayed: true