docs: Ajout documentation persistance données (FROST, Orion, Stellio, OpenRemote)

This commit is contained in:
Eric FELIXINE
2026-05-03 01:43:02 -04:00
parent 78e1d51c25
commit 0ce4afe779

212
DATA_PERSISTENCE.md Normal file
View File

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