# Cariflex - Diagrammes d'Architecture
## 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 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
• Price Discovery"]
OPLEM["OPLEM
━━━━━━━━━━━━━━
• Local Market
• Prosumer Opt."]
HAMLET["HAMLET
━━━━━━━━━━━━━━
• Multi-agent
• Simulation"]
end
subgraph DEVICES["Device Layer"]
PV["10 PV Panels
5kWc each"]
BAT["10 Batteries
100kWh each"]
EV["10 EVs
75kWh V2G"]
CHG["10 EV Chargers
22kW each"]
end
subgraph VIZ["Visualization"]
GRAFANA["Grafana
Dashboards"]
METABASE["Metabase
Analytics"]
CARIFLEX_UI["Cariflex UI
FM Frontend"]
end
%% External to Integration
EPEX -->|"Prices"| FM
ENTSOE -->|"CO2/Prices"| FM
WEATHER -->|"Irradiance"| FM
DSO -->|"Flex Requests"| OPENLEADR
%% 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 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 de Données - Ingestion
```mermaid
sequenceDiagram
participant Device as Device (PV/BAT/EV)
participant MQTT as MQTT Broker
participant FM_API as FlexMeasures API
participant Worker as FM Worker (RQ)
participant DB as PostgreSQL
participant Grafana as Grafana
Device->>MQTT: Publish sensor data (30s)
MQTT->>FM_API: REST POST /sensors/{id}/data
FM_API->>Worker: Enqueue ingestion job
Worker->>DB: Save beliefs (timed data)
Grafana->>DB: Query data (timeseries)
```
## 3. Flux de Données - Forecasting
```mermaid
sequenceDiagram
participant Cron as Cron Job / Scheduler
participant FM_CLI as FM CLI
participant Pipeline as TrainPredictPipeline
participant DB as PostgreSQL
participant Grafana as Grafana
Cron->>FM_CLI: Trigger forecast (daily)
FM_CLI->>Pipeline: Train model (30 days history)
Pipeline->>Pipeline: Predict (24h horizon)
Pipeline->>DB: Save 82 forecast beliefs
Grafana->>DB: Display forecast vs actual
```
## 4. Flux de Données - Scheduling
```mermaid
sequenceDiagram
participant DSO as DSO (OpenADR VTN)
participant OpenLEADR as OpenLEADR (VEN)
participant FM_API as FlexMeasures API
participant Scheduler as StorageScheduler
participant DB as PostgreSQL
participant CitrineOS as CitrineOS (CSMS)
DSO->>OpenLEADR: Flexibility request
OpenLEADR->>FM_API: POST /sensors/{id}/schedules/trigger
FM_API->>Scheduler: Create schedule job
Scheduler->>Scheduler: Optimize (soc_min, soc_max, power)
Scheduler->>DB: Save schedule beliefs
Scheduler->>CitrineOS: Send charging profile
CitrineOS->>CitrineOS: Apply to charge point
```
## 5. Intégration Grid Singularity
```mermaid
sequenceDiagram
participant GSY as Grid Singularity Exchange
participant SDK as gsy-e-sdk
participant FM_API as FlexMeasures API
participant Scheduler as FM Scheduler
participant DB as PostgreSQL
GSY->>SDK: Market prices / orders
SDK->>FM_API: POST /sensors/{id}/data (price signals)
FM_API->>DB: Save price beliefs
Scheduler->>DB: Read prices + forecasts
Scheduler->>Scheduler: Optimize schedule
Scheduler->>DB: Save optimal schedule
FM_API->>SDK: Report flexibility offered
SDK->>GSY: Submit bids/offers
```
## 6. Intégration OPLEM
```mermaid
sequenceDiagram
participant OPLEM as OPLEM Optimizer
participant FM_DB as FM PostgreSQL
participant Scheduler as FM Scheduler
participant Devices as Devices
OPLEM->>FM_DB: Read sensor data (SOC, power)
OPLEM->>OPLEM: Optimize local market
OPLEM->>Scheduler: Send optimal setpoints
Scheduler->>Devices: Apply commands
Devices->>FM_DB: Report actual values
```
## 7. Intégration HAMLET
```mermaid
sequenceDiagram
participant HAMLET as HAMLET Simulator
participant FM_API as FlexMeasures API
participant Scheduler as FM Scheduler
HAMLET->>FM_API: Read forecasts
HAMLET->>HAMLET: Run multi-agent simulation
HAMLET->>FM_API: Validate strategies
FM_API->>Scheduler: Apply validated schedule
```
## 8. Architecture Réseau
```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"]
GSY["gsy-e:8080"]
end
subgraph Traefik["Traefik (websecure)"]
ROUTER["Router: cariflex.digitribe.fr"]
end
ROUTER -->|"HTTPS"| FM_SRV
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
GSY -->|"REST"| FM_SRV
```
## 9. TODO - Intégrations à Développer
| Intégration | Priorité | Complexité | Statut |
|-------------|----------|------------|--------|
| 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 |