Smart City Digital Twin - Data Flow Diagram
Updated: 2026-05-06 - Architecture with 3 IoT Agents (one per MQTT broker)
graph TB
subgraph Simulateur["π₯οΈ Simulateur (Host Python)"]
SIM[Smart City Simulator
10 capteurs
Intervalle: configurable]
end
subgraph MQTT_Brokers["π‘ MQTT Brokers"]
EMQ[EMQX
port 11883]
MOS[Mosquitto
port 1883]
BUN[BunkerM
port 1900
MQTTS/TLS]
end
subgraph IoT_Agent["π€ 3 IoT Agents (NGSI-LD)"]
IOTA_EMQ[IoT-Agent-EMQX
port 4041
Ecoute EMQX]
IOTA_MOS[IoT-Agent-Mosquitto
port 4042
Ecoute Mosquitto]
IOTA_BUN[IoT-Agent-BunkerM
port 4043
Ecoute BunkerM]
end
subgraph CB["π Context Brokers (NGSI-LD)"]
ORI[Orion-LD
NGSI-v2
port 1026]
STE[Stellio
NGSI-LD
port 8080]
FRO[FROST-Server
SensorThings
port 8080]
end
subgraph Analytics["π Analytics & Time-Series"]
QL[QuantumLeap
NGSI-LD β CrateDB
port 8668]
CRATEDB[CrateDB
PostgreSQL-compatible
port 4200/5432]
end
subgraph Storage["πΎ Stockage & MΓ©triques"]
INF[InfluxDB
Bucket: iot_data
port 8086]
PRO[Prometheus
Scrape: /metrics
port 9090]
GEO[GeoServer
WMS/WFS/WMTS
port 8080]
end
subgraph IoT_Platform["π’ Plateforme IoT"]
ORM[OpenRemote Manager
MQTT Agent
port 8080]
KC[Keycloak
port 8080]
end
subgraph VIZ["π Visualisation"]
GRA[Grafana
Dashboards
port 3001]
MAP[MapStore
WMS/WFS
port 8080]
end
%% ββ Flux Simulateur ββββββββββββββββββββββββββββββββββββββββββ
SIM -->|"1οΈβ£ MQTT publish
smartcity-api-key/{id}/attrs"| EMQ
SIM -->|"1οΈβ£ MQTT publish"| MOS
SIM -->|"1οΈβ£ MQTT publish"| BUN
SIM -->|"5οΈβ£ InfluxDB v2 API
async non-bloquant"| INF
%% ββ Flux MQTT β IoT Agents ββββββββββββββββββββββββββββββββββ
EMQ -->|"MQTT subscribe
smartcity-api-key/#"| IOTA_EMQ
MOS -->|"MQTT subscribe"| IOTA_MOS
BUN -->|"MQTT subscribe"| IOTA_BUN
%% ββ Flux IoT Agents β Context Brokers βββββββββββββββββββββββ
IOTA_EMQ -->|"2οΈβ£ NGSI-v2 POST
/v2/entities"| ORI
IOTA_MOS -->|"2οΈβ£ NGSI-v2 POST"| ORI
IOTA_BUN -->|"2οΈβ£ NGSI-v2 POST"| ORI
%% ββ Flux Context Brokers β QuantumLeap βββββββββββββββββββ
ORI -->|"NGSI-v2 Subscription
β QuantumLeap"| QL
%% ββ Flux QuantumLeap β CrateDB ββββββββββββββββββββββββββββ
QL -->|"Insert
PostgreSQL wire"| CRATEDB
%% ββ Visualisation βββββββββββββββββββββββββββββββββββββββββββ
CRATEDB -->|"PostgreSQL Datasource"| GRA
INF -->|"Datasource Flux IoT"| GRA
ORI -->|"NGSI-v2 Datasource"| GRA
GEO -->|"WMS/WMTS"| MAP
ORM -->|MapSettings
Martinique| MAP
ORM -->|"Live assets
REST"| GRA
%% ββ OpenRemote MQTT Agent βββββββββββββββββββββββββββββββββββ
EMQ -->|"6οΈβ£ Subscribe
city/sensors/#"| ORM
MOS -->|"6οΈβ£ Subscribe"| ORM
BUN -->|"6οΈβ£ Subscribe"| ORM
%% ββ MΓ©triques Prometheus βββββββββββββββββββββββββββββββββββ
SIM -->|"7οΈβ£ /metrics
port 8001"| PRO
EMQ -->|"/api/v5/metrics"| PRO
STE -->|"/actuator/prometheus"| PRO
INF -->|"/metrics"| PRO
ORM -->|"/actuator/prometheus"| PRO
GRA -->|"/metrics"| PRO
IOTA_EMQ -->|"/metrics"| PRO
IOTA_MOS -->|"/metrics"| PRO
IOTA_BUN -->|"/metrics"| PRO
QL -->|"/metrics"| PRO