Skip to content

ElectricSIM/ElectricSim-Data

Repository files navigation

Proyecto G9: ElectricSim – Pipeline de datos y monitoreo en tiempo real

Descripción del proyecto

ElectricSim es una plataforma orientada al monitoreo y análisis en tiempo real del consumo eléctrico en el Gran Buenos Aires (GBA). Este repositorio corresponde al módulo de adquisición, procesamiento y distribución de datos, encargado de integrar múltiples fuentes externas, normalizar la información y exponerla tanto para visualización como para consumo por modelos de machine learning.

El sistema está diseñado como un pipeline de datos continuo, desacoplado y escalable, utilizando Apache Kafka como backbone de mensajería para los flujos en tiempo real, y PostgreSQL para la persistencia de información histórica.

Características del proyecto
  1. Integración de múltiples fuentes de datos
  2. El sistema unifica información energética oficial, datos meteorológicos y variables astronómicas relevantes para el modelado del consumo eléctrico.

  3. Procesamiento de datos en tiempo real
  4. Los datos actuales son distribuidos mediante Apache Kafka, permitiendo desacoplar la recolección de datos del procesamiento analítico.

  5. Modelo predictivo basado en deep learning
  6. Una red neuronal feedforward permite estimar la demanda eléctrica a partir de variables climáticas, temporales y energéticas.

  7. Inferencia bajo demanda
  8. El sistema expone una API REST que permite realizar predicciones puntuales y simulaciones con datos de pronóstico.

  9. Detección de anomalías en tiempo real
  10. Se detectan desvíos significativos entre valores reales y predichos mediante Server-Sent Events (SSE).

Beneficios
  1. Anticipación de picos de consumo
  2. Permite prever aumentos o caídas en la demanda eléctrica con antelación.

  3. Análisis energético integral
  4. Combina variables ambientales, temporales y operativas en un único modelo.

  5. Arquitectura escalable
  6. El uso de Kafka permite escalar productores y consumidores de datos de forma independiente.

  7. Aplicación educativa
  8. Sirve como base para el estudio de sistemas distribuidos y machine learning aplicado.

Tecnologías utilizadas
  1. Fuentes de datos
    • CAMMESA API: datos oficiales de generación y demanda eléctrica
    • OpenWeather API: variables meteorológicas
    • Sunrise-Sunset API: información astronómica
  2. Streaming y mensajería
    • Apache Kafka
    • Kafka Streams
  3. Backend y procesamiento
    • Spring Boot: recolección y exposición de datos
    • Python + FastAPI: inferencia, detección de anomalías y SSE
    • APIs HTTP/REST
    • Server-Sent Events (SSE)
  4. Machine Learning
    • TensorFlow / Keras
    • Scikit-learn
    • Pandas y NumPy
  5. Infraestructura
    • Docker
    • Docker Compose

Arquitectura del sistema

ElectricSim se organiza en dos bloques funcionales principales:

esquema_completo
  • Recolección y distribución de datos: las fuentes energéticas, meteorológicas y astronómicas son consultadas de manera periódica por un backend desarrollado en Spring Boot. En este proceso, solo los datos en tiempo real son enviados hacia Apache Kafka, que actúa como sistema de mensajería y desacople entre productores y consumidores. Por otro lado, los datos históricos no pasan por Kafka: quedan disponibles directamente a través de un endpoint específico del backend, desde donde luego son consumidos para el proceso de entrenamiento del modelo. Paralelamente, los datos en tiempo real almacenados en Kafka se utilizan para la visualización continua mediante Grafana.
  • Entrenamiento del modelo: los datos provenientes de Kafka (en tiempo real) y los datos históricos previamente almacenados son procesados mediante un módulo de preprocesamiento que limpia, transforma y organiza la información. Luego, estos datos alimentan un modelo de deep learning diseñado para predecir la demanda eléctrica. Una vez entrenado, el modelo se expone mediante una API que no solo permite realizar inferencias, sino que también ofrece un endpoint para la obtención de anomalías cada 5 minutos mediante SSE. Además, este bloque integra datos en tiempo real para reentrenar periódicamente el modelo con información más reciente, permitiendo que la red se adapte a los cambios actuales del sistema.

Estructura del proyecto

Este repositorio corresponde al módulo de adquisición, procesamiento y persistencia de datos de ElectricSim. La estructura del proyecto está organizada siguiendo una arquitectura modular, separando claramente las responsabilidades de cada componente del pipeline de datos.

ElectricSim-Data/
│
├── src/
│   └── main/
│       ├── java/dev/str/electricsim/
│       │   ├── cache/          # Cache de datos auxiliares (feriados, calendarios, etc.)
│       │   ├── client/         # Clientes HTTP para consumo de APIs externas
│       │   ├── config/         # Configuración general (Kafka, Streams, Beans)
│       │   ├── controllers/    # Endpoints REST para exposición de datos históricos
│       │   ├── dto/            # Objetos de transferencia de datos
│       │   ├── entity/         # Entidades persistidas en PostgreSQL
│       │   ├── model/          # Modelos de dominio internos
│       │   ├── producers/      # Publicadores de datos hacia Apache Kafka
│       │   ├── repository/     # Acceso a datos y persistencia (JPA / PostgreSQL)
│       │   ├── services/       # Lógica de negocio y orquestación
│       │   ├── streams/        # Procesamiento y enriquecimiento de datos con Kafka Streams
│       │   └── Application.java# Punto de entrada de la aplicación
│       │
│       └── resources/          # Configuración y recursos de la aplicación
│
├── grafana/                   # Dashboards y configuración de visualización
├── docker-compose.yml         # Orquestación de servicios
├── Dockerfile                 # Imagen del servicio de datos
├── pom.xml                    # Dependencias del proyecto (Maven)
├── README.md                  # Documentación del módulo
├── init.sh                    # Script para levantar el proyecto
├── down.sh                    # Script para bajar el proyecto
└── .env                       # Variables de entorno


Alcance del repositorio

Este repositorio contiene únicamente la implementación del pipeline de datos de ElectricSim:

  • Recolección de datos desde APIs externas
  • Publicación de eventos en Apache Kafka
  • Procesamiento y enriquecimiento con Kafka Streams
  • Persistencia de datos históricos en PostgreSQL
  • Exposición de datos mediante API REST

El modelo de deep learning, la inferencia y la detección de anomalías se desarrollan en repositorios independientes.


Flujo de funcionamiento del sistema

Flujo general de ElectricSim
  1. Recolección de datos
  2. El backend consulta periódicamente las APIs de CAMMESA, OpenWeather y Sunrise-Sunset.

  3. Publicación en Kafka
  4. Los datos en tiempo real se publican en tópicos de Apache Kafka.

  5. Consumo y preprocesamiento
  6. El backend analítico consume los datos, los limpia y los transforma.

  7. Inferencia del modelo
  8. El modelo de deep learning predice la demanda eléctrica.

  9. Detección de anomalías
  10. Se comparan valores reales y predichos y se notifican desvíos mediante SSE.

  11. Reentrenamiento periódico
  12. El modelo se reentrena automáticamente con datos recientes.


Puesta en marcha del sistema

ElectricSim-Data utiliza Docker y Docker Compose para simplificar la ejecución del entorno completo de desarrollo. Se crearon scripts que facilitan levantar los servicios.

Para construir las imágenes y levantar los servicios:

./init.sh

Para detener el entorno y liberar los recursos:

./down.sh

Autores

  • Murray, Agustín
  • Polanis, Iván Valentín
  • Romero, Mateo

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5

Languages