2026-05-31 09:12:20 +02:00

25 lines
1.8 KiB
Markdown

# CLAUDE.md — etm-powersync-energy-plugin-etm
## Rôle
Energy manager nymea : rule-based surplus (Community) + load-management + connecteur vers l'optimiseur (Auto/Predict).
## Source de vérité
[etm-powersync-docs / ARCHITECTURE.md](https://git.etm-powersync.fr/ETM-Schurig/etm-powersync-docs/src/branch/master/ARCHITECTURE.md).
## Structure (héritée de l'amont)
`EnergyPluginNymea` est une coquille (`IID "io.nymea.EnergyPlugin"`, un `init()`). La logique vit dans des **managers** instanciés dans `init()` : `SmartChargingManager`, `spotmarket/`, `RootMeter`, `EvCharger`, `nymeaenergyjsonhandler` (API JSON-RPC).
## Frontière de licence (impérative)
GPL-3. **Ne jamais coder ici** : MPC, prévision, Perez, masque d'ombrage, arbitrage. Ça appartient à `etm-powersync-optimizer`.
## Travail attendu
- **Community** : ajuster le rule-based existant (surplus, hystérésis, priorités). Pas de réécriture from scratch — l'amont fournit la base.
- **OptimizerManager** (nouveau manager, à côté des autres) : collecte l'état (RootMeter + things) → `POST /optimize` → applique les `setpoints` via le chemin de contrôle existant (`EvCharger`). **Transport pur, zéro maths.**
- **Précédence** : optimiseur sain + planning frais → il pilote ; sinon → rule-based local. Le plugin fonctionne toujours seul.
## Règle de sécurité (non négociable)
Le **load-management est prioritaire absolu** : toute consigne (y compris de l'optimiseur) qui ferait dépasser `ISOUSC` est **écrêtée localement après réception**. C'est une contrainte appliquée par le plugin, pas une suggestion envoyée à l'optimiseur.
## Contrat
`OptimizerManager` implémente [interfaces/optimize.md](https://git.etm-powersync.fr/ETM-Schurig/etm-powersync-docs/src/branch/master/interfaces/optimize.md).