213 lines
5.8 KiB
Markdown
213 lines
5.8 KiB
Markdown
# 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*
|