5.0 KiB
5.0 KiB
Agent Plugin — powersync-energy-plugin-etm
Lire aussi le
CLAUDE.mddu dossier parent avant de commencer.
Mon rôle
Je suis le cœur du HEMS ETM-PowerSync. Je contiens toute la logique d'optimisation énergétique : gestion des consommateurs (EV, ECS, PAC), tarification, météo, et décision d'activation par surplus solaire.
Je suis un code propriétaire ETM — pas open-source, pas de publication upstream.
Ce que je FOURNIS
API JSON-RPC EnergyPlugin.*
| Méthode | Rôle |
|---|---|
GetChargingInfos(evChargerId) |
Config recharge EV (mode, deadline, SOC cible) |
SetChargingInfo(chargingInfo) |
Mettre à jour la config d'une borne EV |
GetChargingSchedules(evChargerId) |
Planning calculé par l'OptimizationEngine |
GetAvailableSpotMarketProviders() |
Liste des providers tarifs disponibles |
SetSpotMarketConfiguration(enabled, providerId) |
Activer/choisir un provider |
GetSpotMarketScoreEntries(date) |
Cotations horaires aWATTar |
SetPhasePowerLimit(Uint) |
Protection surcharge réseau (A/phase) |
SetAcquisitionTolerance(Double) |
Seuil surplus déclenchant la charge |
SetBatteryLevelConsideration(Double) |
Facteur batterie dans le calcul surplus |
Notifications push
ChargingInfoAdded/Removed/Changed, ChargingSchedulesChanged,
SpotMarketConfigurationChanged, SpotMarketScoreEntriesChanged,
PhasePowerLimitChanged
Ce que je CONSOMME
Interfaces nymea (détection par interface, jamais par ThingClassId)
| Interface | États lus | Actions envoyées |
|---|---|---|
evcharger |
chargingEnabled, maxChargingCurrent, pluggedIn, charging, phases |
setChargingEnabled, setMaxChargingCurrent |
electricvehicle |
batteryLevel, maxChargingCurrent, capacity |
— |
rootmeter / energymeter |
currentPowerPhaseA/B/C, currentPhaseA/B/C |
— |
energystorage |
currentPower, batteryLevel |
— |
thermostat |
temperature, mode |
setMode, setTargetTemperature |
Depuis nymea-experience-plugin-energy
EnergyManager*injecté viaEnergyPlugin::init()- Signal
PowerBalanceEntryAdded→ déclenche le cycle d'optimisation (~1 min)
Architecture interne cible
powersync-energy-plugin-etm
│
├── TierManager ← lit /etc/powersync/tier.conf
│ └── active/désactive les modules selon le tier
│
├── OptimizationEngine ← chef d'orchestre (à créer)
│ ├── calcule le surplus PV disponible
│ ├── consulte TariffManager (tarif actuel)
│ ├── consulte WeatherManager (météo J+1 si tier Auto+)
│ └── distribue la puissance selon la priorité :
│ 1. ECS (priorité haute — chaleur)
│ 2. PAC (selon température extérieure)
│ 3. EV (selon deadline connue)
│
├── ConsumerManager
│ ├── EvConsumer ← refactor SmartChargingManager existant
│ ├── EcsConsumer ← à créer
│ └── HeatPumpConsumer ← à créer
│
├── TariffManager
│ ├── StaticHcHpProvider ← à créer (Community)
│ └── aWATTarProvider ← ✅ existe (AT + DE)
│
└── WeatherManager
└── OpenMeteoProvider ← à créer (Auto uniquement)
État actuel du code
✅ Fonctionnel
SmartChargingManager: recharge EV sur surplus solaire (mode Eco)SpotMarketManager: planification aWATTar AT/DE avec cache 24hNymeaEnergyJsonHandler: API JSON-RPCEnergyPlugin.*complète- Overload protection triphasée
- Détection appareils par interface (zero UUID hardcodé)
❌ À corriger en priorité
| Fichier | Problème | Priorité |
|---|---|---|
evcharger.cpp:171, smartchargingmanager.cpp:394,477,517 |
Assume toujours phase A — faux pour EV monophasé sur B/C | 🔴 Haute |
smartchargingmanager.cpp:59 |
Migration endTime → endDateTime + récurrence hebdo non terminée |
🟠 Moyenne |
smartchargingmanager.cpp:884 |
Planification limitée à 24h | 🟠 Moyenne |
smartchargingmanager.cpp:1835 |
Actions EV non séquentielles, pas de retry | 🟠 Moyenne |
EnergyPluginNymea::init() |
Pas de guard si EnergyManager* est null |
🟠 Moyenne |
❌ À créer
StaticHcHpProvider(TariffManager — Community)EcsConsumer(chauffe-eau / ECS sur surplus)HeatPumpConsumer(PAC sur surplus)OptimizationEngine(orchestrateur multi-consommateurs)WeatherManager+OpenMeteoProvider(Auto)TierManager+ lecture/etc/powersync/tier.conf
Règles de modification
- Tout changement de signature
EnergyPlugin.*→ mettre à jourINTERFACE.md - Tout nouveau StateType ou ActionType → notifier l'Agent App
- Ne jamais modifier
nymea-experience-plugin-energydepuis ce repo - Tester sur un système Community avant d'activer des features Auto/Predict AI
- Build :
qmake energyplugin.pro && make -j$(nproc) - Install :
/usr/lib/nymea/energy/libnymea_energypluginnymea.so