diff --git a/DATA_PERSISTENCE.md b/DATA_PERSISTENCE.md new file mode 100644 index 00000000..6dfdbf32 --- /dev/null +++ b/DATA_PERSISTENCE.md @@ -0,0 +1,212 @@ +# Smart City Digital Twin - Persistence de données + +Documentation technique sur l'emplacement et la structure des données des capteurs dans la stack Smart City Martinique. + +## Vue d'ensemble + +Les données des capteurs IoT sont persistées dans plusieurs bases de données selon le service consommateur. Le simulateur envoie les mêmes données vers trois systèmes principaux : FROST-Server, Orion-LD, et Stellio. + +--- + +## 1. FROST-Server (Observations temporelles) + +**Technologie** : PostgreSQL + PostGIS (OGC SensorThings API) + +**Container** : `frost_allinone-database-1` + +**Credentials** : +- User: `sensorthings` +- Password: `sensorthings` +- Database: `sensorthings` + +**Schéma de données** : +- `THINGS` : Identité des capteurs (1 par capteur) +- `SENSORS` : Type de capteur (température, humidité, etc.) +- `DATASTREAMS` : Flux de données d'un capteur +- `OBSERVATIONS` : Valeurs mesurées avec timestamp + +**Accès direct** : +```bash +docker exec frost_allinone-database-1 psql -U sensorthings -d sensorthings +``` + +**Statut actuel** : ✅ **21 256 observations** enregistrées + +**Sauvegarde** : +```bash +docker exec frost_allinone-database-1 pg_dump -U sensorthings sensorthings > frost_backup_$(date +%Y%m%d).sql +``` + +--- + +## 2. Orion-LD (Entités contextuelles NGSI-LD) + +**Technologie** : MongoDB + +**Container** : `fiware-gis-quickstart-mongo-db-1` + +**Base de données** : `orion` (ou `orionld`) + +**Format** : JSON-LD (NGSI-LD) + +**Structure** : +- Collections MongoDB : `entities`, `csubs` (subscriptions), `registrations` +- Chaque entité représente un capteur avec ses attributs (temperature, humidity, etc.) + +**Accès direct** : +```bash +docker exec fiware-gis-quickstart-mongo-db-1 mongo orion --eval "db.entities.find().pretty()" +``` + +**Statut actuel** : ✅ **10 entités** (capteurs) créées + +**Sauvegarde** : +```bash +docker exec fiware-gis-quickstart-mongo-db-1 mongodump --db orion --out /backup +``` + +--- + +## 3. Stellio (NGSI-LD + TimescaleDB) + +**Technologie** : PostgreSQL + TimescaleDB + PostGIS + +**Container** : `stellio-postgres` + +**Credentials** : +- User: `stellio` +- Password: `stellio_password` +- Databases: `stellio_search`, `stellio_subscription` + +**Tables principales** : +- `entity_payload` : Stockage des entités NGSI-LD (14 entités actuellement) +- `temporal_entity_attribute` : Attributs temporels +- `attribute_instance` : Instances d'attributs avec historique + +**Accès direct** : +```bash +docker exec -e PGPASSWORD=stellio_password stellio-postgres psql -h 127.0.0.1 -U stellio -d stellio_search +``` + +**Statut actuel** : ✅ **14 payloads** d'entités enregistrés + +**Sauvegarde** : +```bash +docker exec stellio-postgres pg_dump -U stellio stellio_search > stellio_backup_$(date +%Y%m%d).sql +``` + +--- + +## 4. OpenRemote (Assets IoT) + +**Technologie** : PostgreSQL + +**Container** : `openremote-postgresql-1` + +**Credentials** : +- User: `openremote` +- Password: (défini dans docker-compose.yml, généralement `openremote`) +- Database: `manager` + +**Données stockées** : +- Assets (capteurs, zones géographiques) +- Attributs des assets (valeurs en temps réel) +- Règles et automatisations +- Historique des attributs + +**Statut actuel** : ⚪ En attente de réactivation (403 Forbidden à résoudre) + +**Accès (quand réactivé)** : +```bash +docker exec openremote-postgresql-1 psql -U openremote -d manager +``` + +--- + +## 5. Brokers MQTT (EMQX & Mosquitto) + +**EMQX** (`emqx_emqx_1`) : +- **Persistance** : Mnesia (RAM) ou MongoDB externe si configuré +- **Rôle** : Routage des messages uniquement, pas de persistance long-terme +- **Statut** : ⚠️ Transit uniquement + +**Mosquitto** (`mosquitto-traefik`) : +- **Persistance** : Fichier `mosquitto.db` (si persistence activée) +- **Rôle** : Routage des messages MQTT +- **Statut** : ⚠️ Transit uniquement + +**Note** : Les brokers ne stockent pas les données de manière durable. Ils les transmettent aux consommateurs (FROST, Orion, Stellio). + +--- + +## 6. BunkerM (Service HTTP) + +**Technologie** : HTTP Service (détails à confirmer) + +**Container** : `bunkerm` (ou similaire) + +**Authentification** : Basic Auth avec gestion de session (redirection 307 suivie par le simulateur) + +**Statut** : ⚠️ En cours d'investigation (auth 307) + +--- + +## Résumé des statistiques + +| Service | Type de données | Nombre d'enregistrements | Statut | +|---------|----------------|-------------------------|--------| +| FROST-Server | Observations | 21 256 | ✅ Actif | +| Orion-LD | Entités NGSI-LD | 10 | ✅ Actif | +| Stellio | Entités NGSI-LD | 14 | ✅ Actif | +| OpenRemote | Assets IoT | 0 (non réactivé) | ⚪ Inactif | +| EMQX/Mosquitto | Messages MQTT | N/A (transit) | ✅ Routage | + +--- + +## Script de sauvegarde complet + +```bash +#!/bin/bash +# backup_all.sh - Sauvegarde complète de la stack Smart City + +DATE=$(date +%Y%m%d_%H%M%S) +BACKUP_DIR=~/smart-city-backups/$DATE +mkdir -p $BACKUP_DIR + +# FROST-Server +docker exec frost_allinone-database-1 pg_dump -U sensorthings sensorthings > $BACKUP_DIR/frost_$DATE.sql + +# Orion-LD (MongoDB) +docker exec fiware-gis-quickstart-mongo-db-1 mongodump --db orion --out $BACKUP_DIR/mongo_backup_$DATE + +# Stellio +docker exec stellio-postgres pg_dump -U stellio stellio_search > $BACKUP_DIR/stellio_$DATE.sql + +# OpenRemote (quand réactivé) +# docker exec openremote-postgresql-1 pg_dump -U openremote manager > $BACKUP_DIR/openremote_$DATE.sql + +echo "✅ Sauvegarde terminée dans $BACKUP_DIR" +``` + +--- + +## Génération de diagramme de persistance + +```mermaid +graph TD + A[Simulateur IoT] -->|MQTT| B[EMQX Broker] + A -->|MQTT| C[Mosquitto Broker] + B -->|Subscribe| D[FROST-Server] + B -->|Subscribe| E[Orion-LD] + B -->|Subscribe| F[Stellio] + C -->|Subscribe| E + C -->|Subscribe| F + D -->|PostgreSQL| G[(FROST DB: 21k+ obs)] + E -->|MongoDB| H[(Orion DB: 10 entités)] + F -->|PostgreSQL| I[(Stellio DB: 14 entités)] + A -->|HTTP| J[BunkerM] +``` + +--- + +*Document généré le 3 mai 2026 pour le projet Smart City Digital Twin Martinique*