# 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*