# Smart City Digital Twin - Martinique ## Nouvelle Architecture (Mise à jour 08/05/2026) ### Stack Simplifiée ``` Simulateur Python (60 capteurs) ↓ ┌───────────────────────────────────────────────┐ │ 3 Brokers MQTT │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ EMQX │ │ Mosquitto │ │ BunkerM │ │ │ │(emqx_emqx_1)│ │(smart-city- │ │(bunkerm_ │ │ │ │ │ │ mosquitto) │ │ bunkerm_1)│ │ │ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │ └────────┼──────────────┼──────────────┼──────────────┘ │ │ │ └──────────────┴──────────────┘ ↓ Telegraf (3 inputs MQTT) ↓ InfluxDB v2 (bucket: smartcity) ↓ Grafana (Dashboard: smartcity-martinique-2026) ``` ### Détails des Composants #### 1. Simulateur (`smart-city-simulator`) - **Fonction** : Génère des données IoT simulées (60 capteurs) - **Types** : AirQuality, Traffic, Parking, Noise, Weather, Light - **Brokers MQTT** : Publie sur les 3 brokers simultanément - EMQX: `emqx_emqx_1:1883` (MQTT v3.1.1) - Mosquitto: `smart-city-mosquitto:1883` (MQTT v3.1.1) - BunkerM: `bunkerm_bunkerm_1:1900` (MQTT v3.1.1, auth: bunker/bunker) - **InfluxDB** : Écriture asynchrone (ASYNCHRONOUS) vers `smartcity` bucket #### 2. Telegraf (`smart-city-telegraf`) - **Fonction** : Collecte les données MQTT et les écrit dans InfluxDB - **Configuration** : 3 inputs MQTT (un par broker) - **Topics** : `airquality/#`, `traffic/#`, `parking/#`, `noise/#`, `weather/#`, `light/#` - **Format** : JSON → InfluxDB line protocol #### 3. InfluxDB (`smart-city-influxdb`) - **Version** : v2.7.12 - **Organization** : digitribe - **Bucket** : `smartcity` (infinite retention) - **Token** : `my-super-token` #### 4. Grafana (`smart-city-grafana`) - **URL** : http://localhost:3001 - **Credentials** : admin / Digitribe972 - **Dashboard** : Smart City Digital Twin - Martinique - UID: `smartcity-martinique-2026` - 6 panneaux (AirQuality, Traffic, Parking, Noise, Weather, Light) - Source: InfluxDB (`smartcity` bucket) ### Flux de Données 1. **Simulateur** publie sur 3 brokers MQTT (EMQX, Mosquitto, BunkerM) 2. **Telegraf** subscribe aux topics MQTT → convertit en format InfluxDB 3. **InfluxDB** stock les séries temporelles 4. **Grafana** visualise les données via Flux queries ### Avantages de cette Architecture - ✅ **Simplicité** : Pas de FIWARE (Orion-LD, Stellio, QuantumLeap) - ✅ **Performance** : InfluxDB optimisé pour les séries temporelles - ✅ **Redondance** : 3 brokers MQTT (si un tombe, les autres assurent) - ✅ **Maintnant** : Stack standard (Telegraf/InfluxDB/Grafana) ### Commandes Utiles ```bash # Vérifier les données InfluxDB docker exec smart-city-influxdb influx query 'from(bucket:"smartcity") |> range(start:-1h) |> group(columns: ["_measurement"]) |> count()' # Voir les logs du simulateur docker logs smart-city-simulator --tail 50 # Redémarrer Telegraf docker restart smart-city-telegraf # Accéder à Grafana open http://localhost:3001 ``` ### Fichiers de Configuration - **Simulateur** : `/home/eric/smart-city-digital-twin-martinique/simulator.py` - **Telegraf** : `/home/eric/smart-city-digital-twin-martinique/telegraf.conf` - **Docker Compose** : `/home/eric/smart-city-digital-twin-martinique/docker-compose.yml` - **Dashboard Grafana** : `/home/eric/smart-city-digital-twin-martinique/grafana-dashboard-smartcity.json` --- *Dernière mise à jour : 08/05/2026 - Suppression de FIWARE, passage à Telegraf/InfluxDB*