# Session Resume — 2026-05-13 (final)

## État de l'infrastructure
- 92+ conteneurs UP
- Services OK: OpenRemote, Grafana, InfluxDB, Orion-LD, Traefik, Simulator, BunkerM
- Services KO: Stellio (404), FROST (404), GeoServer (404), Ditto (404)

## Tâches complétées

### ✅ BunkerM — FIXÉ
- Cause: DNS `bunkerm_bunkerm_1` (underscores) non résolvable → `bunkerm-bunkerm-1`
- Fix: docker-compose.yml + simulator.py modifiés, image reconstruite
- Résultat: `→ emqx,bunkerm` dans les logs du simulateur

### ✅ ChirpStack — Partiellement résolu
- Cause: base PostgreSQL jamais initialisée (0 tables), mot de passe `***` corrompait le DSN
- Fix: mot de passe → `chirpstack`, schéma SQL initialisé depuis migrations Diesel
- 15 tables créées, admin user créé (admin/admin1234)
- Reste: login API à investiguer (gRPC-REST gateway)

## Tâches en cours / bloquées

### 🔴 OpenRemote Agents MQTT — BLOQUÉ
- **Problème**: API REST `/api/smartcity/*` retourne 403 "role not allowed"
- **Cause**: OpenRemote a son propre système d'authorization (pas Keycloak). Les rôles Keycloak ne sont pas mappés aux permissions OpenRemote.
- **Approches tentées** (toutes échouées):
  - Token client_credentials → 403
  - Token password grant → 403
  - Cookie de session Keycloak → 403
  - Désactivation UMA → 403
  - Mapper de rôles Keycloak → pas d'effet
  - Basic auth → 403
  - Headers X-Requested-With, Accept → 403
- **Script prêt**: `scripts/create_or_agents.py` (60 agents MQTT)
- **Pistes restantes**:
  1. Trouver comment OpenRemote mappe les rôles Keycloak → permissions internes
  2. Utiliser l'UI Manager via browser headless
  3. Modifier la config OpenRemote pour désactiver l'auth sur l'API
  4. Créer les agents via une autre méthode (JMX, config file, etc.)

## Fichiers créés/modifiés
- `scripts/create_or_agents.py` — script création 60 agents MQTT
- `TODO.md` — todo list
- `simulator.py` — BUNKERM_HOST corrigé
- `docker-compose.yml` — BUNKERM_HOST corrigé
- `configuration/chirpstack/chirpstack.toml` — DSN corrigé
- `docker-compose.chirpstack.yml` — mot de passe corrigé

## Leçons apprises
- ChirpStack 4.x n'initialise pas automatiquement le schéma PostgreSQL au premier démarrage
- Docker Compose masque les mots de passe contenant `@` par `***`
- Les noms de conteneurs Docker Compose utilisent des underscores, mais la DNS resolution utilise des hyphens
- OpenRemote a son propre système d'authorization indépendant de Keycloak
