Fix GeoMap dashboard v3 - temperature_celsius + Geomap layer config

Fixes:
- Temperature field: temperature_c (wrong) -> temperature_celsius (correct)
- Geomap panel: added explicit location config with lat/lon field mapping
- Added PM2.5 timeseries panel
- Dashboard UID: geomap-test-v1
This commit is contained in:
Eric FELIXINE
2026-05-26 13:52:25 -04:00
parent 7643d88ffb
commit a7716102fd
6 changed files with 272 additions and 118 deletions

View File

@@ -1,70 +1,68 @@
# Session Resume - 2026-05-26
## Objectifs
Reprendre la session Smart City Digital Twin : fix OpenRemote + Grafana "no data"
## Résumé de la session
## Actions effectuées
### Problème initial
- La gateway avait planté, reprise du projet Smart City Digital Twin Martinique
### 1. OpenRemote — Tentative de fix (abandonnée par l'utilisateur)
- **Problème identifié**: Flyway migration V20191202_01__Schema.sql échoue car les tables JPA
(REALM, USER_ENTITY) ne sont pas encore créées quand Flyway s'exécute
- **Solution partielle**: Créé les tables manuellement dans `public` + marqué les 19 migrations
Flyway comme appliquées dans `flyway_schema_history`
- **Résultat**: Flyway passé, Manager connecté à Keycloak, mais PG a été recréé
- **Décision utilisateur**: Abandonner OpenRemote pour l'instant, recloner le répertoire
### Tâches réalisées
### 2. OpenRemote Keycloak — Recréé manuellement
- L'ancien container Keycloak avait été supprimé par un `docker-compose up` échoué
- Recréé avec `docker run` sur le réseau `smartcity-shared`
- **⚠️ Note**: Les credentials dans le docker-compose ont été masqués par Docker Compose
(user:password → ***). Il faut utiliser les credentials réels pour les backups.
#### 1. Dashboard Grafana GeoMap en temps réel ✅
- **URL** : `https://grafana-sct.digitribe.fr/d/geosmart-city-2026/smart-city-geomap-temps-reel`
- **Dashboard UID** : `geosmart-city-2026`
- **Composants** :
- Panel **Geomap** (carte des capteurs Martinique) via PostGIS
- Panel **Time-series** NO₂ et humidité via InfluxDB
- Panels **Gauge** pour batterie, température, O₃, CO
- Rafraîchissement : 10s
### 3. Grafana "no data" — CORRIGÉ
#### 2. Sources de données Grafana configurées
- **PostGIS-SmartCity** (ID=30, UID=`a9b60854-60c5-4c86-bb0b-d98852df0c89`)
- Hôte : `postgis-smartcity:5432`
- Base : `smartcity`
- User : `grafana` (accès SELECT uniquement, trust auth depuis réseau Docker)
- Connecté au réseau `smartcity-shared`
- **InfluxDB-SmartCity-Correct** (UID=`dd1bfc24-de9d-4c23-8a3c-151d153f8169`)
- Bucket : `smartcity`, Org : `digitribe`
- Données : `mqtt_consumer` mesure avec champs `no2_ugm3`, `co_mgm3`, `humidity_percent`, `o3_ugm3`, `battery_level`, `temperature_c`
- Topics : `smartcity/airquality/1` à `smartcity/airquality/10`
#### Causes identifiées:
1. **Datasource wrong bucket**: `defaultBucket: iot_data` → corrigé en `smartcity`
2. **Datasource wrong token**: `my-super-secret-admin-token` → corrigé en `my-super-token`
3. **Dashboard requêtes wrong**: Les panels utilisaient `r["_measurement"] == "airquality"` etc.
mais Telegraf écrit tout dans la measurement `mqtt_consumer` avec un tag `topic` qui
contient le type de capteur (ex: `smartcity/airquality/1`)
#### 3. PostGIS - Configuration ✅
- Utilisateur `grafana` créé avec accès SELECT sur toutes les tables
- `pg_hba.conf` modifié pour accepter les connexions `trust` depuis les réseaux Docker
- Réseau `connecté au container Grafana (`docker network connect smartcity-shared grafana_stack-grafana-1`)
- Table `public.sensors` contient 30+ capteurs avec coordonnées (lat/lon en SRID 4326)
#### Corrections appliquées:
- **Datasource** (`/etc/grafana/provisioning/datasources/datasources.yml` dans le container):
- `defaultBucket: smartcity`
- `token: my-super-token`
- `organization: digitribe`
- `version: Flux`
- **Dashboard** `smartcity-martinique-complete` (version 3):
- Remplacé `_measurement == "xxx"` par `topic =~ /smartcity\/xxx/` dans les 10 panels
- Remplacé `temperature_c` par `temperature_celsius`
- Remplacé `luminosity` par `brightness_lux`
- Supprimé les UID datasource (utilise la datasource par défaut)
#### 4. Geomap Plugin ✅
- Plugin `geomap` déjà installé et activé dans Grafana
- Carte centrée sur Fort-de-France (lat=14.6164, lon=-61.07, zoom=12)
#### Validation:
- Test requêtes via Grafana API: PM2.5 ✅, Temperature ✅, Vehicle Count ✅
#### 5. ChirpStack - Préparation ⚠️
- REST API : ajouté flag `--cors-origins="*"` dans docker-compose
- Broker MQTT de ChirpStack (`chirpstack-mosquitto-1:1883`) accessible depuis le simulateur
- **À faire** : Créer application/devices via UI ChirpStack + configurer le simulateur
### 4. Types de capteurs et fields confirmés dans InfluxDB:
- **airquality**: battery_level, co_mgm3, humidity_percent, no2_ugm3, o3_ugm3, pm10_ugm3, pm25_ugm3, temperature_celsius
- **parking**: available_spots, occupancy_percent, total_spots, turnover_per_hour
- **traffic**: average_speed_kmh, congestion_level, vehicle_count
- **weather**: battery_level, humidity_percent, pressure_hpa, rain_mm, temperature_celsius, uv_index, wind_speed_kmh
- **light**: battery_level, brightness_lux, power_consumption_w
- **noise**: battery_level, noise_level_db, peak_db
#### 6. Git ✅
- Commit `7643d88` : "Add GeoMap dashboard + ChirpStack REST API config"
- Push en attente (Gitea 502)
## Containers critiques
- `smart-city-grafana`: ✅ Up, datasource corrigé, dashboard v3
- `smart-city-influxdb`: ✅ Up healthy, bucket `smartcity` avec données
- `smart-city-telegraf`: ✅ Up, connecté à EMQX + Mosquitto
- `smart-city-simulator`: ✅ Up, 60 capteurs
- `openremote-postgresql`: Up healthy (timescaledb-ha:pg15)
- `openremote-keycloak`: Recréé manuellement
- `openremote-manager`: En crash loop (problème Flyway résolu mais PG recéré)
- `grafana_stack-grafana-1`: Autre instance Grafana (5 jours)
- `honcho-grafana-1`: Grafana Honcho (5 jours, healthy)
### Prochaines étapes
1. **ChirpStack** : Créer application et devices via UI (`https://chirpstack.digitribe.fr`)
2. **Simulateur** : Configurer l'envoi de données vers ChirpStack (MQTT ou API REST)
3. **Gitea** : Pusher le commit quand le serveur sera accessible
4. **BemServer** : Déployer via docker-compose (repo déjà cloné dans `~/smart-city-digital-twin-martinique/bemserver/`)
## Fichiers modifiés
- `grafana-datasources.yml` — datasource corrigé (référence, pas utilisé directement)
- `grafana-dashboard-smartcity.json` — dashboard dans le projet mis à jour
- `/etc/grafana/provisioning/datasources/datasources.yml` (dans container)
- `/etc/grafana/provisioning/dashboards/smart-city-dashboards.json` (dans container)
- `docker-compose.yml` (OpenRemote) — OR_SETUP_TYPE: "default" ajouté
### Commandes utiles
```bash
# Accéder au dashboard Grafana
open https://grafana-sct.digitribe.fr/d/geosmart-city-2026/smart-city-geomap-temps-reel
# Vérifier les données InfluxDB
docker exec smart-city-influxdb influx query 'from(bucket: "smartcity") |> range(start: -5m) |> filter(fn: (r) => r._field == "no2_ugm3") |> limit(n: 5)' --org digitribe
# Vérifier PostGIS
docker exec postgis-smartcity psql -U grafana -d smartcity -c "SELECT s.name, ST_Y(s.location::geometry), ST_X(s.location::geometry) FROM public.sensors s LIMIT 5;"
# Pousser le commit quand Gitea est up
cd ~/smart-city-digital-twin-martinique && git push
```