# 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 |