# TODO — ETM PowerSync App ## Charges pilotables — ce qui attend la box (2026-08-26) - [ ] **`kCodesReserveBatterie`** — le `Set` est volontairement VIDE dans `lib/services/telemetry_text.dart`. Y mettre le code du motif « budget annulé par la réserve batterie » **quand le moteur le publiera**, pas avant : deviner son nom produirait un affichage qui ne se déclenche jamais. - [ ] **`minPowerW == null` sans véhicule branché** — couvert en test unitaire (`test/ev_runtime_test.dart`), **pas exercé sur appareil** : la borne n'entre pas dans `loads[]` avant `3g`. À reprendre quand l'arbitrage prendra la recharge en charge. - [ ] **Réserve batterie — portée élargie.** Le jour où le seuil gouverne tout le budget, reprendre le texte de `BatteryReserveCard` : il annonce aujourd'hui un futur, il devra décrire un présent. - [ ] ~~Zones~~ — `ac_screen.dart` est de la donnée fictive et `.75` n'en déclare aucune. **Décidé : à ne pas entreprendre.** ## En cours / priorité haute - [ ] **TariffProvider — connexion RPC réelle** - `load()` appelle encore un `Future.delayed` fictif - Brancher sur nymea JSON-RPC pour récupérer les prix live (ENTSO-E, Tibber, etc.) - [ ] **EnergySetupProvider — persistance** - Les assignations de rôles (EV, PAC, batterie…) ne survivent pas au redémarrage - Sérialiser en SharedPreferences ou JSON local - [ ] **SchedulerProvider — exécution réelle** - `forceRecalc()` ne fait rien pour l'instant - Brancher sur l'API nymea Energy Scheduler (si disponible) ## Screens à implémenter - [ ] **DeveloperScreen** — logs, introspection JSON-RPC, test ping nymea - [ ] **AboutScreen** — version app, version nymea, licences - [ ] **SystemSettingsScreen** — adresse serveur nymea, port, transport (TCP/WS) ## Amélioration UX - [ ] **Timeline** — remplacer la simulation bell-curve par les vraies créneaux du scheduler nymea - [ ] **RoleConfigFlow Step 3** — test de connexion sur RPC réel au lieu du délai simulé - [ ] **InstallerModeProvider** — persister le hash PIN dans SharedPreferences (actuellement en mémoire) - [ ] **AppSettingsProvider** — persister les préférences (thème, densité, écrans actifs) dans SharedPreferences ## Intégration nymea live - [ ] Mapping `EmsRole → nymea thingClass` pour les installations réelles - [ ] Vérifier les interfaces nymea sur serveur réel (comparer avec `docs/nymea_integrations.md`) - [ ] `Energy.GetSchedule` / `Energy.SetSchedule` si l'API le supporte ## Technique / dette - [ ] Ajouter des tests unitaires pour `TariffProvider` et `EnergySetupProvider` - [ ] Gérer le cas où `NymeaService.thingClasses` est vide en mode live (classes non chargées) - [ ] Revoir `_Step1ThingList` : passer en `context.watch` pour réactivité si les things changent