# Cariflex - Diagrammes d'Architecture v2 > Mise à jour avec OCPI et GIREVE ## 1. Architecture Générale ```mermaid graph TB subgraph EXTERNAL["External Layer"] EPEX["EPEX SPOT
Day-ahead Prices"] ENTSOE["ENTSO-E
CO2/Prices"] WEATHER["Weather API
Solcast/Météo"] DSO["DSO/TSO
OpenADR/S2"] end subgraph INTEROP["Interoperability Layer"] OCPI["OCPI Gateway
━━━━━━━━━━━━━━
• Tarifs • Sessions
• CDRs • Roaming
• Commands"] GIREVE["GIREVE Connector
━━━━━━━━━━━━━━
• Session data
• Roaming hub
• Billing
• PNIRE"] end subgraph INTEGRATION["Integration Layer"] FM["FlexMeasures EMS
━━━━━━━━━━━━━━
• Ingestion
• Forecasting
• Scheduling
• Reporting"] CITRINEOS["CitrineOS
CSMS
━━━━━━━━━━━━━━
• OCPP 2.0.1
• Charge Points
• Transactions"] EVEREST["EVerest
Middleware
━━━━━━━━━━━━━━
• ISO 15118
• Smart Charging
• Power Mgmt"] OPENLEADR["OpenLEADR
VEN Client
━━━━━━━━━━━━━━
• OpenADR 2.0b
• DSO Signals
• Flexibility"] end subgraph MARKET["Market Layer (R&D)"] GSY["Grid Singularity
gsy-e
━━━━━━━━━━━━━━
• P2P Trading
• Market Clearing"] OPLEM["OPLEM
━━━━━━━━━━━━━━
• Local Market
• Prosumer Opt."] HAMLET["HAMLET
━━━━━━━━━━━━━━
• Multi-agent
• Simulation"] end subgraph DEVICES["Device Layer"] PV["10 PV Panels
5kWc"] BAT["10 Batteries
100kWh"] EV["10 EVs
75kWh V2G"] CHG["10 EV Chargers
22kW"] end subgraph VIZ["Visualization"] GRAFANA["Grafana
Dashboards"] METABASE["Metabase
Analytics"] CARIFLEX_UI["Cariflex UI
FM Frontend"] end %% External to Interop DSO -->|"Flex Requests"| OPENLEADR EPEX -->|"Prices"| FM ENTSOE -->|"CO2/Prices"| FM WEATHER -->|"Irradiance"| FM %% Interop layer OCPI <-->|"OCPI 2.2"| OtherCPOs["Other CPOs
(Roaming)"] GIREVE <-->|"eMSP API"| GIREVEPlatform["GIREVE Platform"] OCPI -->|"Session data"| FM GIREVE -->|"CDRs/Sessions"| FM %% Integration to FM CITRINEOS -->|"OCPP/REST"| FM EVEREST -->|"OCPP"| CITRINEOS OPENLEADR -->|"REST API"| FM %% Market to FM GSY <-.->|"gsy-e-sdk"| FM OPLEM <-.->|"sensor data"| FM HAMLET <-.->|"forecasts"| FM %% Devices PV -->|"Modbus"| FM BAT -->|"Modbus"| FM EV -->|"ISO 15118"| EVEREST CHG -->|"OCPP 2.0.1"| CITRINEOS %% FM to Viz FM -->|"PostgreSQL"| GRAFANA FM -->|"PostgreSQL"| METABASE FM -->|"REST API"| CARIFLEX_UI style FM fill:#2196F3,stroke:#1565C0,color:#fff style OCPI fill:#E91E63,stroke:#C2185B,color:#fff style GIREVE fill:#795548,stroke:#5D4037,color:#fff style CITRINEOS fill:#4CAF50,stroke:#388E3C,color:#fff style EVEREST fill:#FF9800,stroke:#F57C00,color:#fff style OPENLEADR fill:#9C27B0,stroke:#7B1FA2,color:#fff style GSY fill:#00BCD4,stroke:#0097A7,color:#fff ``` ## 2. Flux OCPI - Session de Recharge ```mermaid sequenceDiagram participant EV as EV Driver participant CP as Charge Point participant CitrineOS as CitrineOS CSMS participant FM as FlexMeasures participant OCPI as OCPI Gateway participant OtherCPO as Other CPO %% Session start EV->>CP: Plug in (RFID/App) CP->>CitrineOS: StartTransaction CitrineOS->>FM: POST /sensors/{id}/data (power) FM->>OCPI: Check roaming rights OCPI->>OtherCPO: POST /cdrs (session start) OtherCPO-->>OCPI: 200 OK OCPI-->>FM: Authorized %% Charging loop loop Every 30s CitrineOS->>FM: Power readings FM->>OCPI: Update session OCPI->>OtherCPO: PATCH /sessions/{id} end %% Session end EV->>CP: Unplug CP->>CitrineOS: StopTransaction CitrineOS->>FM: Final readings FM->>OCPI: Generate CDR OCPI->>OtherCPO: POST /cdrs OtherCPO-->>OCPI: CDR accepted ``` ## 3. Flux GIREVE - Session de Recharge ```mermaid sequenceDiagram participant EV as EV Driver participant CP as Charge Point participant CitrineOS as CitrineOS CSMS participant FM as FlexMeasures participant GIREVE as GIREVE Platform %% Session start EV->>CP: Start charging CP->>CitrineOS: StartTransaction CitrineOS->>FM: POST /sensors/{id}/data FM->>GIREVE: POST /session (session start) GIREVE-->>FM: Session acknowledged %% Charging loop loop Every 30s CitrineOS->>FM: Power readings FM->>GIREVE: PATCH /session/{id} (consumption) end %% Session end EV->>CP: Stop charging CP->>CitrineOS: StopTransaction CitrineOS->>FM: Final readings FM->>GIREVE: POST /cdr (final CDR) GIREVE-->>FM: CDR accepted ``` ## 4. Intégration Complète - Tous les Composants ```mermaid sequenceDiagram participant GIREVE as GIREVE participant OCPI as OCPI Gateway participant FM as FlexMeasures participant OpenLEADR as OpenLEADR participant CitrineOS as CitrineOS participant EVEREST as EVerest participant EV as EV participant BAT as Battery participant PV as Panel %% Data ingestion PV->>FM: Power readings (30s) BAT->>FM: SOC readings (30s) EVEREST->>CitrineOS: OCPP CitrineOS->>FM: EV power readings %% Interoperability FM->>GIREVE: Sessions + CDRs FM->>OCPI: Tariffs + Sessions OCPI->>OtherCPOs: Roaming %% Forecasting FM->>FM: TrainPredictPipeline (daily) FM->>DB: Save forecasts %% Scheduling (triggered by OpenADR) DSO->>OpenLEADR: Flexibility request OpenLEADR->>FM: POST /schedules/trigger FM->>FM: StorageScheduler optimize FM->>DB: Save schedule FM->>CitrineOS: Charging profile CitrineOS->>EVEREST: OCPP commands EVEREST->>EV: Start/stop charging ``` ## 5. Architecture Réseau Docker ```mermaid graph LR subgraph Docker["Docker Network: cariflex-internal"] FM_SRV["flexmeasures-server:5000"] FM_WRK["flexmeasures-worker:5000"] FM_DB["flexmeasures-db:5432"] FM_REDIS["flexmeasures-redis:6379"] CITRINEOS["citrineos-server:8080"] EVEREST["everest:8080"] OCPI_GW["ocpi-gateway:8081"] GIREVE_CONN["gireve-connector:8082"] GSY["gsy-e:8080"] end subgraph Traefik["Traefik (websecure)"] ROUTER_FM["Router: cariflex.digitribe.fr"] ROUTER_OCPI["Router: ocpi.cariflex.digitribe.fr"] end ROUTER_FM -->|"HTTPS"| FM_SRV ROUTER_OCPI -->|"HTTPS"| OCPI_GW FM_SRV -->|"REST"| FM_WRK FM_WRK -->|"RQ"| FM_REDIS FM_WRK -->|"SQL"| FM_DB FM_SRV -->|"SQL"| FM_DB CITRINEOS -->|"REST"| FM_SRV EVEREST -->|"OCPP"| CITRINEOS OCPI_GW -->|"REST"| FM_SRV GIREVE_CONN -->|"REST"| FM_SRV GSY -->|"REST"| FM_SRV ``` ## 6. TODO - Intégrations | Intégration | Priorité | Complexité | Statut | |-------------|----------|------------|--------| | **OCPI Gateway** | Haute | Élevée | 📋 À faire | | **GIREVE Connector** | Haute | Moyenne | 📋 À faire | | **CitrineOS ↔ FM** | Haute | Moyenne | ⏳ À faire | | **EVerest ↔ CitrineOS** | Haute | Moyenne | ⏳ À faire | | **OpenLEADR ↔ FM** | Haute | Faible | ⏳ À faire | | **Grid Singularity ↔ FM** | Moyenne | Élevée | ⏳ À faire | | **OPLEM ↔ FM** | Moyenne | Moyenne | ⏳ À faire | | **HAMLET ↔ FM** | Basse | Élevée | ⏳ À faire | | **MQTT Brokers Cariflex** | Haute | Moyenne | ⏳ À faire |