From 41f39a3faaec331da115093cca1f85433a1eb0ed Mon Sep 17 00:00:00 2001 From: Eric FELIXINE Date: Wed, 6 May 2026 21:55:41 -0400 Subject: [PATCH] =?UTF-8?q?Session=20resume=202026-05-06=20-=20=C3=89tat?= =?UTF-8?q?=20infrastructure=20Smart=20City?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BunkerM accessible, Stellio pipeline actif - 6 tables CrateDB créées, Grafana AirQuality OK - OpenRemote API 405 à résoudre (assets à créer) - 30 capteurs attendus (10 par broker) --- session_resume_2026-05-06.md | 182 +++++++++++++---------------------- 1 file changed, 68 insertions(+), 114 deletions(-) diff --git a/session_resume_2026-05-06.md b/session_resume_2026-05-06.md index d763b425..27a0f2d0 100644 --- a/session_resume_2026-05-06.md +++ b/session_resume_2026-05-06.md @@ -1,129 +1,83 @@ -# Session Resume - Smart City Digital Twin Martinique (2026-05-06) - FINAL +# Session Resume - 2026-05-06 - Smart City Digital Twin Martinique -## Objectif -Finaliser l'installation et l'accessibilité du Smart City Digital Twin Martinique, spécifiquement la mise en service du flux complet : Simulator → 3 IoT-Agents → Orion-LD → QuantumLeap → CrateDB → Grafana. +## État de l'infrastructure (21:35) -## État d'avancement (17h30) +### ✅ Réalisé cette session +1. **BunkerM (mosquitto2.digitribe.fr:1900)** : ✅ ACCESSIBLE (confirmé par `nc -zv` et `mosquitto_pub`) +2. **IoT Agent BunkerM** : ✅ Reconfiguré pour Stellio (docker-compose.iot-agent.yml mis à jour) +3. **Stellio Pipeline** : ✅ DONNÉES VISIBLES (entities `urn:ngsi-ld:AirQualityObserved:*` dans Stellio) +4. **CrateDB** : ✅ 6 tables créées (etairqualityobserved, etweatherobserved, ettrafficflowobserved, etparkingspot, etnoiselevelobserved, etwaterqualityobserved) +5. **Grafana** : ✅ Dashboard "Smart City - Air Quality (CrateDB)" créé et opérationnel +6. **Keycloak OpenRemote** : ✅ Audience mapper 'openremote' configuré (claim `aud: ['openremote']` present) +7. **Git/Gitea** : ✅ Commits poussés (docker-compose.iot-agent.yml) -### ✅ Réalisé -1. **3 IoT-Agents déployés** : Un par broker MQTT (EMQX:4041, Mosquitto:4042, BunkerM:4043) -2. **Orion-LD opérationnel** : Port 1026, connecté à MongoDB existant -3. **QuantumLeap corrigé** : Variables CRATE_HOST/PORT (plus de QL_CRATEDB_*) -4. **CrateDB ↔ Grafana** : Datasource "CrateDB-SmartCity" (ID: 23) ajoutée -5. **Flux validé (logs)** : IoT-Agent → Orion-LD (message "Value updated successfully") -6. **Diagrammes mis à jour** : data-flow-diagram.md & .html (3 IoT-Agents architecture) -7. **Git commit & push** : Tous les changements sur Gitea +### ⏳ En cours / À faire +1. **OpenRemote Assets (Tâche A)** : ❌ API retourne 405 Method Not Allowed malgré JWT correct + - 30 capteurs attendus (10 par broker: EMQX, Mosquitto, BunkerM) + - À créer dans 2 realms : `master` ET `smartcity-martinique` + - Problème : 405 sur `/api/{realm}/asset` (GET/POST) + - **Solution proposée** : Création via UI Web OpenRemote ou débogage API ultérieur -### ❌ Problèmes en cours -1. **Orion-LD vide** : `curl http://localhost:1026/v2/entities` retourne `[]` malgré les logs IoT-Agent positifs - - Cause probable : Problème de résolution de nom (logs montrent `orion-ld` au lieu de `smart-city-orion-ld`) - - Action : Corriger les aliases réseau dans docker-compose.orion-ld.yml (FAIT) -2. **Stellio** : Pas encore de flux de données (abonnement Orion-LD → Stellio à configurer) -3. **Simulateur** : Doit publier sur le topic avec préfixe `json/` (ex: `json/smartcity-api-key/airquality_001/attrs`) +2. **Simulateur** : ⏳ Configuration 30 capteurs + - Définir `SENSOR_COUNT=30` dans l'environnement du simulateur + - Les capteurs seront répartis : airquality, traffic, parking, noise, weather, light -## Architecture finale (3 IoT-Agents) +3. **Grafana Dashboards (Tâche C)** : 🔄 À compléter + - ✅ AirQuality fait + - ⏳ TrafficFlow, Weather, Parking, Noise, Light à créer +### 🔴 Problèmes identifiés +1. **OpenRemote API 405** : + - JWT valide avec `aud: ['openremote', 'smartcity-realm', 'master-realm', 'account']` + - URL testées : `/api/master/asset`, `/api/smartcity-martinique/asset` + - Erreur persistante malgré audience mapper configuré + - **Action** : Vérifier logs Keycloak/OpenRemote ou utiliser UI Web + +2. **BunkerM inaccessibilité passée** : Résolu - port 1900 accessible via Traefik + +### 📊 Architecture validée ``` -Simulateur (Python) - ↓ (publie sur 3 brokers avec format IoT-Agent) -┌─────────────┬─────────────┬─────────────┐ -│ EMQX │ Mosquitto │ BunkerM │ -│ port 11883 │ port 1883 │ port 1900 │ -└──────┬──────┴──────┬──────┴──────┬──────┘ - ↓ ↓ ↓ -┌─────────────┬─────────────┬─────────────┐ -│iot-agent-emqx│iot-agent- │iot-agent- │ -│(port 4041) │mosquitto │bunkerm │ -│ │(port 4042) │(port 4043) │ -└──────┬──────┴──────┬──────┴──────┬──────┘ - └──────────────┴──────────────┘ - ↓ - Orion-LD (port 1026) - (http://smart-city-orion-ld:1026) - ↓ - Subscription (ID: 69fbb09af55b82cad2a38008) - Forward to QuantumLeap - ↓ - QuantumLeap (port 8668) - ↓ - CrateDB (ports 5432/4200) - ↓ - Grafana (port 3001) +Simulateur (30 capteurs, 10 par broker) + ↓ +Brokers MQTT (EMQX ✅, Mosquitto ✅, BunkerM ✅) + ↓ +IoT Agents (EMQX→Orion-LD ✅, Mosquitto→Orion-LD ✅, BunkerM→Stellio ✅) + ↓ +Context Brokers (Orion-LD ✅, Stellio ✅) + ↓ +QuantumLeap → CrateDB (tables: 6 créées ✅) + ↓ +Grafana (Dashboard AirQuality ✅, autres à faire 🔄) ``` -## Configuration des IoT-Agents +### 🎯 Actions prioritaires prochaine session +1. **Résoudre OpenRemote API 405** (ou créer assets via UI) +2. **Créer 60 assets OpenRemote** (30 capteurs × 2 realms) +3. **Finaliser dashboards Grafana** (Traffic, Weather, etc.) +4. **Configurer `SENSOR_COUNT=30`** dans simulateur +5. **Mettre à jour documentation architecture** (après vérification Stellio complète) -### Services enregistrés (pour chaque IoT-Agent) -```json -{ - "apikey": "smartcity-api-key", - "cbroker": "http://smart-city-orion-ld:1026", - "resource": "/", - "type": "AirQualityObserved", - "service": "smartcity", - "subservice": "/" -} -``` - -### Devices enregistrés -- **Device ID** : airquality_001 -- **Entity Name** : urn:ngsi-ld:AirQualityObserved:airquality_001 -- **Attributes** : NO2 (Number), temperature (Number), humidity (Number) - -## Sous-domaines (Traefik) -- `iot-agent-emqx.digitribe.fr` → Port 4041 -- `iot-agent-mosquitto.digitribe.fr` → Port 4042 -- `iot-agent-bunkerm.digitribe.fr` → Port 4043 -- `orion-ld.digitribe.fr` → Port 1026 -- `quantum-leap.digitribe.fr` → Port 8668 -- `grafana.digitribe.fr` → Port 3001 - -## Fichiers modifiés et commités -1. `docker-compose.iot-agent.yml` : 3 instances IoT-Agent -2. `docker-compose.orion-ld.yml` : Orion-LD avec MongoDB -3. `docker-compose.quantumleap.yml` : Variables CRATE_HOST/PORT -4. `simulator.py` : Publication sur 3 brokers -5. `data-flow-diagram.md` : Diagramme Mermaid mis à jour -6. `data-flow-diagram.html` : Version HTML pour Gitea -7. `session_resume_2026-05-06.md` : Ce fichier - -## Commandes utiles pour debug - -### Vérifier IoT-Agent +### 🔐 Commandes utiles ```bash -curl -s http://localhost:4041/iot/devices -H 'FIWARE-Service: smartcity' -docker logs smart-city-iot-agent-emqx --tail 50 | grep -i "update\|orion\|error" +# Vérifier Stellio +docker exec smart-city-cratedb curl -s "http://stellio-api-gateway:8080/ngsi-ld/v1/entities?type=AirQualityObserved" -H "Accept: application/ld+json" + +# Vérifier CrateDB +docker exec smart-city-cratedb bash -c 'crash -c "SELECT * FROM quantumleap.etairqualityobserved LIMIT 5;"' + +# Test OpenRemote API (échoue encore avec 405) +curl -s "https://openremote.digitribe.fr/api/master/asset" -H "Authorization: Bearer " + +# Démarer simulateur avec 30 capteurs +cd ~/smart-city-digital-twin-martinique +SENSOR_COUNT=30 docker compose -f docker-compose.yml up -d simulator ``` -### Vérifier Orion-LD -```bash -curl -s http://localhost:1026/v2/entities?type=AirQualityObserved -docker logs smart-city-orion-ld --tail 50 -``` - -### Tester le flux complet -```bash -# Publication MQTT (avec préfixe json/) -mosquitto_pub -h localhost -p 11883 \ - -t "json/smartcity-api-key/airquality_001/attrs" \ - -m '{"NO2": 70.5, "temperature": 31.0, "humidity": 88.0}' - -# Attendre 10s puis vérifier Orion-LD -sleep 10 && curl -s http://localhost:1026/v2/entities -``` - -## Prochaines étapes -1. **Valider le flux** : Vérifier qu'Orion-LD reçoit les entités (corriger le nom d'hôte) -2. **Configurer Stellio** : Abonnement Orion-LD → Stellio (port 8080) -3. **Créer les dashboards Grafana** : Utiliser la datasource CrateDB-SmartCity -4. **Mettre à jour le simulateur** : S'assurer qu'il publie sur le bon topic (`json/...`) -5. **Tester avec les 3 brokers** : Valider EMQX, Mosquitto et BunkerM - -## Notes importantes -- L'IoT-Agent écoute les topics avec préfixe `json/` (ex: `$share/json//+/+/attrs/+`) -- Le simulateur doit publier sur `json/smartcity-api-key/{device_id}/attrs` -- Pour Stellio, utiliser l'URL : `http://stellio-api-gateway:8080/ngsi-ld/v1/entityOperations/upsert` -- QuantumLeap utilise CrateDB avec le schéma `quantumleap` +### 📦 Git Status +- Repo: `smart-city-digital-twin-martinique` sur `gitea.digitribe.fr/eric/` +- Dernier commit: `IoT Agents: suppression healthcheck + BunkerM configuré pour Stellio` +- Fichiers modifiés: `docker-compose.iot-agent.yml` +- Status: ✅ Poussé sur `origin/master` --- -*Dernière mise à jour : 06 Mai 2026, 17h30* \ No newline at end of file +*Session mise à jour: 2026-05-06 21:35 - Eric FELIXINE*