EV_charging_deployment_instruction
2.2 Ecenario de Despliegue
Distribución de componentes recomendada:
PC 1 (Servidor Central):
- Kafka
- PostgreSQL
- EV_Central
- API_Central
- EV_Registry
PC 2 (Charging Point):
- EV_CP_M
- EV_CP_E
- EV_W
PC 3 (Servicios Externos):
- EV_Drivers
- Servidor Frontend
Nota: Para pruebas locales, todos los componentes pueden ejecutarse en una sola máquina.
2.3 Pasos de Despliegue
Paso 0: Preparación Inicial
0.1. Crear entorno virtual de Python (recomendado):
1 | |
0.2. Instalar dependencias:
1 | |
0.3. Configurar archivo .env:
1 | |
0.4. Generar certificados SSL (si no existen):
1 | |
Nota: Si se ejecuta de forma seperada, se debe de modificar las lineas siguientes del script para que que los certificados generado son correctos:
1 | |
Paso 1: Configuración de PC 1
1.1. Arrancar servicios Docker (Kafka y PostgreSQL):
1 | |
Nota: Se debe de cambiar KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092(localhost) por la IP de la máquina si se va a usar de forma remota.
Verificar que los contenedores están corriendo:
1 | |
Deberías ver:
-broker (Kafka) - Puerto 9092
-postgres-evcharging (PostgreSQL) - Puerto 5434
1.2. Configuración del archivo .env para PC1:
Editar .env y verificar/modificar las siguientes variables:
1 | |
1.3. Arranque de EV_Central:
1 | |
Parámetros:
-6001: Puerto de escucha para autenticación de CPs
-localhost:9092: Dirección del broker Kafka
1.4. Arranque de API_Central:
1 | |
1.4.1 Parámetro por defecto (puerto 8000):
1 | |
La API estará disponible en: http://<HOST_DE_CENTRAL>:8000
Endpoints principales:
-GET /ev/central/charging-points - Estado de CPs
-PUT /ev/central/city-temperature - Actualizar alertas climáticas
-GET /ev/central/audit-events - Eventos de auditoría
1.5 . Arranque de EV_Registry:
1 | |
En el archivo .env, asegurarse de que las siguientes variables están configuradas:
1 | |
Una vez arrancado, el Registry estará disponible en https://<HOST_DE_REGISTRY>:<PORT>/ev/registry/health
Endpoints API REST:
-POST /ev/registry/charging-points - Registrar nuevo CP
-GET /ev/registry/charging-points/<cp_id> - Consultar CP
-DELETE /ev/registry/charging-points/<cp_id> - Dar de baja CP
Nota: Cambiar aquellos <> por la IP de PC1 si es remoto.
Paso 2: Configuración de PC 3
Nota: copiar tambien .env.example a .env y cambiar debug_mode a false
2.1. Arranque de EV_Drivers :
1 | |
Parámetro:
-localhost:9092: Dirección del broker Kafka (cambiar por IP de PC1 si es remoto)
-driver_1: ID del conductor simulado
2.2 Arranque del Frontend:
1 | |
o si no tienes npm instalado:
1 | |
Nota: La parte de Frontend se está sirviendo desde el directorio Core/Front. Para acceder a la interfaz web, abrir el navegador y navegar a http://<HOST_DE_FRONTEND>:8080. En cuanto a monitorización de fronted, se debe de configurar la variable API_CENTRAL_HOST en el archivo Core/Front/dashboard.js con la IP de PC1 si es remoto.
Paso 3: Configuración de PC 2 (Charging Point y EV_WEATHER)
3.1. Configuración del archivo .env para PC2:
1 | |
Notar: Cambiar REGISTRY_HOST y API_CENTRAL_HOST por la IP de PC1 si es remoto.
3.2. Arranque de EV_CP_E (Engine):
Primero arrancar el Engine:
1 | |
Parámetros:
-localhost:9092: Dirección del broker Kafka(Cambiar por IP de PC1 si es remoto)
---debug_port 50032: Puerto para depuración (opcional)
NOTA: Si Kafka está en otra máquina, usar su IP en lugar de localhost.
3.3. Arranque de EV_CP_M (Monitor):
En una nueva terminal, arrancar el Monitor:
1 | |
Parámetros:
-localhost:50032: Dirección del Engine local
-localhost:6001: Dirección de EV_Central (IP de PC1 si es remoto)
-cp_001: ID del Charging Point
-3.4. Arranque de EV_W (Weather Control Office):
1 | |
entorno .env:
1 | |
Nota: Una vez iniciado EV_W, se debe de cambiar la variable de entorno de PC1 en el archivo .env:
1 | |
Paso 4: Registro y Autenticación del CP
4.1. Registro del CP en Registry:
Una vez arrancado EV_CP_M, aparecerá el menú CLI.
1 | |
Seleccione una opción: 3
1 | |
Si el registro es exitoso, recibirá un token JWT que se almacenará automáticamente para su uso en la autenticación.
1 | |
4.2. Autenticación del CP en Central:
Después del registro exitoso, seleccionar la opción de autenticación:
1 | |
El Monitor:
- Establece conexión API Rest con API_CENTRAL (puerto 8000)
- Envía el token JWT recibido del Registry
- API_CENTRAL verifica el token contra la base de datos
- Si es válido, API_CENTRAL genera una clave de cifrado simétrica AES única para este CP
- API_CENTRAL devuelve la clave al Monitor
- Monitor almacena la clave para cifrar todas las comunicaciones futuras
Estado esperado:
1 | |
4.3. Configurar localizaciones en Weather:
Para cambiar o agregar una nueva localización a monitorizar en EV_W, usar el fronted o enviar una petición API, para enviar la petición API, el formato es el siguiente:

Paso 5: Verificación del Sistema
5.1. Verificar conectividad de componentes:
Verificar que todos los servicios están activos:
1 | |
5.2. Verificar API_Central (consumir desde navegador o curl):
1 | |
Respuesta esperada para CPs:
1 | |
5.3. Simular Driver y recarga:
En el CLI de EV_Driver:
1 | |
El sistema:
- Driver envía solicitud por Kafka topic
- Central recibe y asigna recarga
- Engine procesa la recarga
5.4. Verificar auditoría de eventos:
Los eventos se registran automáticamente en la base de datos. Consultar vía API:
1 | |
o desde postman/navegador.

Eventos esperados:
- Registro de CP_001
- Autenticación de CP_001
- Asignación de clave de cifrado
- Inicio de recarga DRIVER_001
- etc.
5.5. Verificar alerta climatológica:
Para probar este escenario:
1.Agregar ciudad con temperatura baja en EV_W:
- En invierno: Oslo, Helsinki, Reykjavik, Alaska
- Ejemplo:
Oslo(temperatura típica < 0°C en invierno)
2.Observar logs de EV_W:

3.Verificar que CP en Oslo pasa a “fuera de servicio”:
1 | |
4.Cuando temperatura suba > 0°C:
- EV_W envía cancelación de alerta
- CP vuelve a estado operativo
5.6. Verificar revocación y restauración de claves:
En el CLI de EV_Central (AdminCLI):
1 | |
El CP_001 quedará fuera de servicio(stopped). Para restaurar se debe de re-autenticar desde el Monitor
En EV_CP_M, seleccionar opción de re-autenticación:
1 | |
5.7. Verificar cifrado de mensajes (opcional - análisis técnico):
Usar herramienta de lectura de topics Kafka:
1 | |
Los mensajes del CP deberían aparecer cifrados:
1 | |
Para descifrar (solo para verificación):
1 | |
Nota: cambiar la clave en el script por la clave simétrica del CP.
2.4 Solución de Problemas Comunes
| Problema | Causa posible | Solución | |
| ——————————— | ————————————————————- | ——————————————————————————————————————————- | ———————— |
| Docker no inicia | Docker Desktop no corriendo | Iniciar Docker Desktop y esperar a que esté listo | |
| Error: Module not found | Entorno virtual no activado o dependencias no instaladas | pip install -r requirements.txt | |
| PostgreSQL connection refused | Puerto 5434 bloqueado o contenedor no corriendo | docker ps para verificar, docker compose restart postgresql_db | |
| Kafka connection timeout | Kafka no está listo o puerto bloqueado | Esperar 30s después de docker compose up, verificar logs: docker logs broker | |
| CP no puede registrarse | Certificado SSL inválido o Registry no escuchando | python ssl/generate_ssl_key.py y verificar que Registry está en puerto funcionando | |
| Registry HTTPS error | MONITOR_SSL_VERIFY=true pero usando certificados autofirmados | Cambiar a MONITOR_SSL_VERIFY=false en .env | |
| Autenticación fallida | CP no registrado previamente | Primero registrar CP en Registry, luego autenticar | |
| Mensajes no llegan a Central | Firewall bloqueando puertos o Kafka topics no creados | Abrir puertos 9092, 6001. Verificar topics:docker exec broker kafka-topics.sh --list --bootstrap-server localhost:9092 | |
| EV_W no obtiene temperatura | API Key inválida o sin conexión a Internet | Verificar OPENWEATHER_API_KEY en .env, probar:curl "http://api.openweathermap.org/data/2.5/weather?q=Madrid&appid=TU_API_KEY" | |
| API_Central 404 | Ruta incorrecta o API no iniciada | Verificar que API_Central está corriendo, usar rutas completas:/ev/central/... | |
| JWT token expired | Token expiró | Volver a registrar CP en Registry para obtener nuevo token | |
| Clave de cifrado no funciona | Clave fue revocada | Re-autenticar CP en Central | |
| Database migration error | Esquema de BD no inicializado | Borrar contenedor PostgreSQL y recrear:docker compose down -v && docker compose up -d | |
| Puerto ya en uso | Otro proceso usando el puerto | En Windows:netstat -ano findstr :6001 y matar proceso. | En Linux:lsof -i :6001 |
Logs para diagnóstico:
1 | |
Reinicio completo del sistema (si nada funciona):
1 | |