# Smart City Digital Twin — Diagramme des Flux de Données ## Vue d'ensemble Ce diagramme illustre le flux complet des données IoT du simulateur vers les différentes couches de traitement, de stockage et de visualisation. --- ## Diagramme Mermaid ```mermaid graph TB subgraph S1["COUCHE 1 SOURCES"] SIM[Smart City Simulator] SENS[Capteurs IoT Reels] end subgraph S2["COUCHE 2 MQTT BROKERS"] EMQ[EMQX] MOS[Mosquitto] BUN[BunkerM] end subgraph S3["COUCHE 3 CONTEXT BROKERS"] ORI[Orion-LD] STE[Stellio] FRO[FROST-Server] end subgraph S4["COUCHE 4 IoT OpenRemote"] ORM[OpenRemote Manager] KC[Keycloak] end subgraph S5["COUCHE 5 STOCKAGE"] INF[InfluxDB] PRO[Prometheus] GEO[GeoServer] end subgraph S6["COUCHE 6 VISUALISATION"] GRA[Grafana] MAP[MapStore] UI[OpenRemote UI] end SIM -->|MQTT| EMQ SIM -->|MQTT| MOS SIM -->|MQTTS| BUN SENS -->|MQTT| EMQ SENS -.->|MQTT direct| ORM EMQ -->|NGSI-LD| ORI EMQ -->|NGSI-LD| STE EMQ -->|SensorThings| FRO EMQ -->|MQTT Agent| ORM MOS -->|MQTT Agent| ORM BUN -->|MQTT Agent| ORM ORM -.-> KC SIM -->|HTTP| INF ORI -->|Query| GRA STE -->|Query| GRA FRO -->|Query| GRA ORI -.->|PostGIS| GEO STE -.->|PostGIS| GEO FRO -.->|PostGIS| GEO GEO -->|WMS/WFS| MAP ORM -->|API Query| GRA EMQ -.->|Metrics| PRO ORI -.->|Metrics| PRO STE -.->|Metrics| PRO ORM -.->|Metrics| PRO classDef simulator fill:#1e293b,stroke:#fb923c,stroke-width:2px,color:#fff classDef broker fill:#0f172a,stroke:#22d3ee,stroke-width:2px,color:#fff classDef context fill:#0f172a,stroke:#34d399,stroke-width:2px,color:#fff classDef iot fill:#0f172a,stroke:#a78bfa,stroke-width:2px,color:#fff classDef storage fill:#0f172a,stroke:#fbbf24,stroke-width:2px,color:#fff classDef viz fill:#0f172a,stroke:#22d3ee,stroke-width:2px,color:#fff class SIM,SENS simulator class EMQ,MOS,BUN broker class ORI,STE,FRO context class ORM,KC iot class INF,PRO,GEO storage class GRA,MAP,UI viz ``` --- ## Description des flux ### 1. **Génération des données (Simulator)** - **Smart City Simulator** (Python) génère des données pour 10 capteurs (Traffic, Air Quality, Parking, Noise, Weather, Light) - Intervalle de publication : 10 secondes - Protocoles : MQTT (vers brokers uniquement) - **⚠️ Projet** : Le simulateur n'envoie PAS directement à OpenRemote (pas de REST API) ### 2. **Ingestion MQTT (Brokers)** - **EMQX** (port 11883) : Broker public, reçoit tous les capteurs - **Mosquitto** (port 1883) : Via Traefik, accès externe - **BunkerM** (port 1900) : MQTTS (TLS), accès sécurisé ### 3. **Context Brokers (NGSI-LD & SensorThings)** - **Orion-LD** : Reçoit les données au format NGSI-LD - 10 entités (TrafficFlowObserved, AirQualityObserved, etc.) - Smart Data Models utilisés - **Stellio** : Alternative NGSI-LD - 14 payloads entités - Contexte : `https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld` - **FROST-Server** : SensorThings API - 21 256+ observations - PostgreSQL + TimescaleDB ### 4. **Plateforme IoT (OpenRemote)** - **OpenRemote Manager** (realm `smartcity`) - 33 assets IoT configurés - Carte Martinique (mapsettings.json) - Réception via **MQTT Agent** depuis les brokers (EMQX, Mosquitto, BunkerM) - Peut aussi recevoir directement des capteurs IoT (via MQTT) - **Keycloak** : Authentification OpenID Connect - Client `openremote` avec Service Account - Token endpoint : `/auth/realms/smartcity/protocol/openid-connect/token` ### 5. **Stockage & Métriques** - **InfluxDB** : Stockage temporel pour Grafana - Bucket : `iot_data` - Datasource dans Grafana - **Prometheus** : Collecte des métriques - MQTT brokers, Context brokers, OpenRemote - **GeoServer** : Données géospatiales - PostGIS pour centralisation - WMS/WFS pour MapStore ### 6. **Visualisation & Analyse** - **Grafana** (port 3001) - Dashboard : `smartcity-martinique-2026` - Datasources : InfluxDB, FROST, Orion-LD - **MapStore** : Cartographie - Sources WMS/WFS depuis GeoServer - **OpenRemote UI** : Manager Interface - Visualisation des assets realm Smart City --- ## Technologies clés | Composant | Technologie | Port | Statut | |-----------|-------------|------|--------| | Simulator | Python + paho-mqtt | Interne | ✅ Actif | | EMQX | MQTT Broker | 11883 | ✅ Connecté | | Orion-LD | NGSI-LD Broker | 1026 | ⚠️ À vérifier | | Stellio | NGSI-LD Broker | 8080 | ⚠️ À vérifier | | FROST-Server | SensorThings API | 8080 | ⚠️ À vérifier | | OpenRemote | IoT Platform | 8080 | ⚠️ 403 (Service Account) | | InfluxDB | Time Series DB | 8086 | ✅ Configuré | | Grafana | Visualization | 3001 | ✅ Dashboard créé | | GeoServer | GeoServer | 8080 | ⚠️ À intégrer | | Prometheus | Metrics | 9090 | ✅ En cours | --- ## Fichiers associés - **Simulator** : `~/smart-city-digital-twin-martinique/simulator.py` - **Dashboard Grafana** : `~/smart-city-digital-twin-martinique/grafana_dashboard_smartcity.json` - **Ce diagramme** : `~/smart-city-digital-twin-martinique/data-flow-diagram.md` - **Session Resume** : `~/smart-city-digital-twin-martinique/session_resume_2026-05-04.md` --- **Dernière mise à jour :** 04 Mai 2026 **Projet :** Smart City Digital Twin Martinique **URL Grafana :** http://localhost:3001/d/smartcity-martinique-2026