# Smart City Digital Twin - Synthèse Session 2026-05-05

## 🎯 Objectif Initial
Ajouter la **traçabilité (source/mqttTopic)** dans les payloads NGSI-LD pour identifier l'origine des messages (broker MQTT) dans les Context Brokers (Orion-LD, Stellio, FROST).

## ✅ RÉALISATIONS MAJEURES

### 1. Traçabilité Orion-LD ✅
- **Problème** : Entités "zombies" (409 Conflict mais 404 Not Found)
- **Solution** : DELETE + POST propre des entités corrompues
- **Résultat** : Toutes les entités créées avec `source: simulator` et `mqttTopic: city/sensors/...`
- **Testé pour** : AirQualityObserved, TrafficFlowObserved, WeatherObserved, NoiseLevelObserved, OffStreetParking

### 2. Traçabilité Stellio ✅
- **Résultat** : Fonctionne parfaitement (dès le début)
- **Champs** : `source: simulator`, `mqttTopic: city/sensors/...`

### 3. Modern Data Stack (MDS) ✅
- **Document créé** : `references/modern-data-stack.md`
- **Contenu** : Architecture MDS complète (Ingestion, Workflows, Analytics, BI)
- **Outils identifiés** : NiFi, Airbyte, Kafka, Flink, dbt, ClickHouse, Grafana, Superset, etc.
- **Status** : Étude complétée (todo: mds-study → completed)

### 4. Documentation ✅
- **Bilan** : `BILAN-2026-05-05.md`
- **Diagnostic OpenRemote** : `DIAGNOSTIC-OpenRemote.md`
- **Synthèse** : Ce document

## ❌ PROBLÈMES BLOQUANTS (à traiter plus tard)

### 1. FROST-Server ❌
- **Erreur** : `Setting db.jndi.datasource must not be empty`
- **Cause** : Container sur mauvais réseau Docker (ne résout pas `frost_http-database-1`)
- **Tentatives** : 
  - Variables `FROST_DB_*` → ❌ (l'image utilise `persistence_db_*`)
  - Variables `persistence_db_*` → ❌ (networking)
  - IP database → ❌
  - Network Docker → ❌ (tool loop)
- **Status** : **BLOQUÉ** (todo: fix-frost → pending)

### 2. OpenRemote ❌
- **Erreur** : `[Errno -2] Name or service not known`
- **Cause** : `openremote-keycloak-1` (hostname interne Docker) non résoluble depuis l'hôte
- **Status** : **BLOQUÉ** (todo: fix-openremote → pending)

## 📋 Todo List Actuelle
```json
[
  {"id": "mds-study", "status": "completed", "content": "Étudier la Modern Data Stack..."},
  {"id": "fix-frost", "status": "pending", "content": "Réparer FROST-Server..."},
  {"id": "fix-openremote", "status": "pending", "content": "Réparer OpenRemote..."},
  {"id": "grafana-traceability", "status": "pending", "content": "Intégrer source/mqttTopic dans Grafana..."}
]
```

## 🔧 Corrections Techniques Effectuées

### Simulator.py
1. **ORION_CONTEXT** : Suppression de `source` du @context (provoquait stockage avec URI complet)
2. **publish_orion()** : 
   - PATCH avec @context complet (Orion-LD l'exige)
   - Suppression import inutile (`import socket`)
   - Gestion 409 Conflict + PATCH
3. **_ngsi_payload()** : Création payload avec `source` et `mqttTopic` (fonctionnel)

### Variables d'environnement
- **FROST** : `persistence_db_*` (pas `FROST_DB_*`)
- **Orion-LD** : `localhost:2026` (accessible depuis l'hôte)
- **Stellio** : `localhost:8087` (fonctionnel)
- **InfluxDB** : `localhost:8086` (fonctionnel)

## 🎉 Architecture Finale (ce qui fonctionne)

```
MQTT Brokers (EMQX, Mosquitto, BunkerM)
    ↓
Simulator.py (ajoute source/mqttTopic)
    ↓
├─→ Orion-LD (localhost:2026) ✅
│   └─ Entités avec traçabilité
├─→ Stellio (localhost:8087) ✅
│   └─ Entités avec traçabilité
├─→ FROST (localhost:8090) ❌ (DB connection)
├─→ InfluxDB (localhost:8086) ✅
└─→ OpenRemote (localhost:8080) ❌ (DNS)
```

## 🚀 Prochaines Étapes Suggérées
1. **Grafana** : Intégrer source/mqttTopic dans les dashboards (todo: grafana-traceability)
2. **FROST** : Réparer networking Docker (todo: fix-frost)
3. **OpenRemote** : Résoudre DNS ou utiliser Traefik (todo: fix-openremote)
4. **MDS** : Implémenter l'ingestion (NiFi/Airbyte) et analytics (dbt/ClickHouse)

## 📊 Commits Effectués (Gitea)
1. `Docs: Modern Data Stack (MDS) reference for Smart City`
2. `Fix Orion-LD: Remove source from @context`
3. `Fix Orion-LD: Add source to @context + PATCH with full payload`
4. `Fix Orion-LD: Clean up debug code`
5. `Debug: Add logging to publish_orion`
6. `Docs: Bilan session 2026-05-05`
7. `Docs: Diagnostic OpenRemote (DNS block)`

## 🎯 Conclusion
**Objectif ATTEINT** : La traçabilité (source/mqttTopic) est **pleinement fonctionnelle** dans Orion-LD et Stellio ! 🎉

Les problèmes subsistants (FROST, OpenRemote) sont **documentés et isolés** pour traitement ultérieur.

---
*Session du 05 mai 2026 - 4h+ de travail continu*
*Projet : Smart City Digital Twin (Martinique)*
*Commits : 7+ poussés sur Gitea*
