235 lines
8.5 KiB
Markdown
235 lines
8.5 KiB
Markdown
# Plan d'extension — Pompe à chaleur, ECS, Gestion d'énergie
|
||
|
||
## Vue d'ensemble
|
||
|
||
L'extension suit l'architecture existante du plugin :
|
||
|
||
```
|
||
energypluginnymea.cpp (init)
|
||
├── SmartChargingManager (existant — VE)
|
||
├── HeatPumpManager (NOUVEAU — PAC + ECS)
|
||
├── EnergyPriorityManager (NOUVEAU — allocation puissance)
|
||
└── NymeaEnergyJsonHandler (étendu — nouvelles méthodes RPC)
|
||
```
|
||
|
||
---
|
||
|
||
## Fichiers à créer / modifier
|
||
|
||
### Fichiers NOUVEAUX
|
||
|
||
| Fichier | Rôle |
|
||
|---|---|
|
||
| `energyplugin/heatpumpmanager.h/.cpp` | Wrapper PAC + ECS, detection via ThingManager |
|
||
| `energyplugin/energyprioritymanager.h/.cpp` | Allocation de puissance par priorité |
|
||
|
||
### Fichiers MODIFIÉS
|
||
|
||
| Fichier | Modification |
|
||
|---|---|
|
||
| `energyplugin/energypluginnymea.cpp` | `init()` instancie les 2 nouveaux managers |
|
||
| `energyplugin/nymeaenergyjsonhandler.h` | Ajout déclarations Q_INVOKABLE + signals |
|
||
| `energyplugin/nymeaenergyjsonhandler.cpp` | Enregistrement + implémentation RPC |
|
||
| `energyplugin/energyplugin.pri` | Ajout des nouveaux .h/.cpp aux HEADERS/SOURCES |
|
||
| Plugin d'intégration ETM (JSON) | Ajout ThingClasses heatPump + domesticHotWater |
|
||
|
||
---
|
||
|
||
## Étape 1 — Définir les ThingClasses dans le plugin d'intégration ETM
|
||
|
||
Le fichier `extension/heatpump_dhw_thingclasses.json` contient les définitions JSON
|
||
complètes à intégrer dans le fichier `.json` du plugin d'intégration ETM.
|
||
|
||
### UUIDs à retenir
|
||
|
||
| Thing | UUID ThingClass |
|
||
|---|---|
|
||
| Pompe à chaleur | `b5a8f3d2-4c1e-4a9f-8b2d-3e6c0f1d5a7b` |
|
||
| ECS (Eau Chaude Sanitaire) | `c7d2e4f1-5b3a-4c0d-9e6f-2a4b7c1d3e5f` |
|
||
|
||
### États PAC
|
||
|
||
| State | UUID | Type | Writable |
|
||
|---|---|---|---|
|
||
| connected | `c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f` | bool | non |
|
||
| power | `d4e5f6a7-b8c9-4d0e-1f2a-3b4c5d6e7f8a` | bool | **oui** |
|
||
| mode | `e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b` | QString | **oui** |
|
||
| targetTemperature | `f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c` | double [15–65°C] | **oui** |
|
||
| currentTemperature | `a7b8c9d0-e1f2-4a3b-4c5d-6e7f8a9b0c1d` | double | non |
|
||
| outdoorTemperature | `b8c9d0e1-f2a3-4b4c-5d6e-7f8a9b0c1d2e` | double | non |
|
||
| currentPower | `c9d0e1f2-a3b4-4c5d-6e7f-8a9b0c1d2e3f` | double (W) | non |
|
||
| cop | `d0e1f2a3-b4c5-4d6e-7f8a-9b0c1d2e3f4a` | double | non |
|
||
| defrostActive | `e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b` | bool | non |
|
||
| errorCode | `f2a3b4c5-d6e7-4f8a-9b0c-1d2e3f4a5b6c` | uint | non |
|
||
|
||
### Actions PAC
|
||
|
||
| Action | UUID | Params |
|
||
|---|---|---|
|
||
| setMode | `a3b4c5d6-e7f8-4a9b-0c1d-2e3f4a5b6c7d` | mode: heating/cooling/auto/standby |
|
||
| setTargetTemperature | `c5d6e7f8-a9b0-4c1d-2e3f-4a5b6c7d8e9f` | targetTemperature: double |
|
||
|
||
### États ECS
|
||
|
||
| State | UUID | Type | Writable |
|
||
|---|---|---|---|
|
||
| connected | `c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f` | bool | non |
|
||
| power | `d2e3f4a5-b6c7-4d8e-9f0a-1b2c3d4e5f6a` | bool | **oui** |
|
||
| targetTemperature | `e3f4a5b6-c7d8-4e9f-0a1b-2c3d4e5f6a7b` | double [40–75°C] | **oui** |
|
||
| currentTemperature | `f4a5b6c7-d8e9-4f0a-1b2c-3d4e5f6a7b8c` | double | non |
|
||
| boostMode | `a5b6c7d8-e9f0-4a1b-2c3d-4e5f6a7b8c9d` | bool | **oui** |
|
||
| currentPower | `b6c7d8e9-f0a1-4b2c-3d4e-5f6a7b8c9d0e` | double (W) | non |
|
||
|
||
### Actions ECS
|
||
|
||
| Action | UUID | Params |
|
||
|---|---|---|
|
||
| triggerBoost | `d8e9f0a1-b2c3-4d4e-5f6a-7b8c9d0e1f2a` | duration: uint (15–120 min) |
|
||
|
||
---
|
||
|
||
## Étape 2 — Intégrer HeatPumpManager dans le plugin energy
|
||
|
||
### Dans `energyplugin.pri` — ajouter :
|
||
|
||
```qmake
|
||
HEADERS += \
|
||
$$PWD/heatpumpmanager.h \
|
||
$$PWD/energyprioritymanager.h \
|
||
|
||
SOURCES += \
|
||
$$PWD/heatpumpmanager.cpp \
|
||
$$PWD/energyprioritymanager.cpp \
|
||
```
|
||
|
||
### Dans `energypluginnymea.cpp` — `init()` :
|
||
|
||
```cpp
|
||
// [AJOUT] Après la création de SmartChargingManager
|
||
|
||
HeatPumpManager *heatPumpManager = new HeatPumpManager(
|
||
energyManager(), thingManager(), this);
|
||
|
||
EnergyPriorityManager *priorityManager = new EnergyPriorityManager(
|
||
energyManager(), thingManager(), this);
|
||
|
||
// Passer les nouveaux managers au JSON handler (modifier sa signature)
|
||
jsonRpcServer()->registerExperienceHandler(
|
||
new NymeaEnergyJsonHandler(spotMarketManager, chargingManager,
|
||
heatPumpManager, priorityManager, this),
|
||
0, 9); // Version incrémentée à 9
|
||
```
|
||
|
||
---
|
||
|
||
## Étape 3 — Nouvelles méthodes API JSON-RPC
|
||
|
||
### Méthodes Pompe à chaleur
|
||
|
||
| Méthode | Description |
|
||
|---|---|
|
||
| `NymeaEnergy.GetHeatPumps` | Liste PAC + états |
|
||
| `NymeaEnergy.SetHeatPumpPower` | On/off |
|
||
| `NymeaEnergy.SetHeatPumpMode` | Mode heating/cooling/auto/standby |
|
||
| `NymeaEnergy.SetHeatPumpTargetTemperature` | Consigne température |
|
||
|
||
### Méthodes ECS
|
||
|
||
| Méthode | Description |
|
||
|---|---|
|
||
| `NymeaEnergy.GetDHWDevices` | Liste ECS + états |
|
||
| `NymeaEnergy.SetDHWPower` | On/off |
|
||
| `NymeaEnergy.SetDHWTargetTemperature` | Consigne température [40–75°C] |
|
||
| `NymeaEnergy.TriggerDHWBoost` | Mode boost (15–120 min) |
|
||
|
||
### Méthodes Gestion d'énergie
|
||
|
||
| Méthode | Description |
|
||
|---|---|
|
||
| `NymeaEnergy.GetManagedLoads` | Toutes les charges avec priorité + puissance |
|
||
| `NymeaEnergy.SetLoadPriority` | Modifier la priorité (0=Critical → 4=Optional) |
|
||
| `NymeaEnergy.SetAllocatedPower` | Forcer puissance allouée à une charge |
|
||
| `NymeaEnergy.GetTotalAvailablePower` | Puissance totale disponible |
|
||
| `NymeaEnergy.SetTotalAvailablePower` | Modifier la puissance totale disponible |
|
||
|
||
### Nouvelles notifications push
|
||
|
||
| Notification | Déclencheur |
|
||
|---|---|
|
||
| `NymeaEnergy.HeatPumpStateChanged` | Changement état PAC (température, mode…) |
|
||
| `NymeaEnergy.DHWStateChanged` | Changement état ECS |
|
||
| `NymeaEnergy.ManagedLoadChanged` | Changement priorité / puissance allouée |
|
||
| `NymeaEnergy.TotalAvailablePowerChanged` | Changement puissance totale disponible |
|
||
|
||
---
|
||
|
||
## Étape 4 — Logique EnergyPriorityManager
|
||
|
||
### Algorithme de rééquilibrage (rebalance())
|
||
|
||
```
|
||
1. Calculer la puissance disponible = totalAvailablePower - reservedForCritical
|
||
2. Trier les charges par priorité croissante (Critical d'abord)
|
||
3. Pour chaque charge (par priorité) :
|
||
a. Si puissance disponible ≥ requestedPower → allouer requestedPower, active=true
|
||
b. Sinon si puissance disponible > 0 → allouer le disponible, active=true (throttle)
|
||
c. Sinon → allouer 0W, active=false (couper)
|
||
d. Déduire de la puissance disponible
|
||
4. Émettre managedLoadChanged() pour chaque charge modifiée
|
||
5. Appliquer les actions sur les Things correspondants
|
||
```
|
||
|
||
### Priorités recommandées par type de charge
|
||
|
||
| Charge | Priorité recommandée |
|
||
|---|---|
|
||
| Chauffage PAC hiver | Critical (0) |
|
||
| ECS (sécurité légionellose) | Critical (0) |
|
||
| Chauffage PAC standard | High (1) |
|
||
| ECS normale | Normal (2) |
|
||
| Recharge VE mode Normal | Normal (2) |
|
||
| Recharge VE mode Eco | Low (3) |
|
||
| ECS boost | Low (3) |
|
||
| Recharge VE spot market | Optional (4) |
|
||
|
||
---
|
||
|
||
## Récapitulatif des UUIDs à générer
|
||
|
||
```
|
||
Plugin d'intégration ETM — nouvelles ThingClasses :
|
||
|
||
HEAT_PUMP_THING_CLASS_ID = b5a8f3d2-4c1e-4a9f-8b2d-3e6c0f1d5a7b
|
||
DHW_THING_CLASS_ID = c7d2e4f1-5b3a-4c0d-9e6f-2a4b7c1d3e5f
|
||
|
||
États PAC (StateTypes) :
|
||
HP_STATE_CONNECTED = c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f
|
||
HP_STATE_POWER = d4e5f6a7-b8c9-4d0e-1f2a-3b4c5d6e7f8a
|
||
HP_STATE_MODE = e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b
|
||
HP_STATE_TARGET_TEMP = f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c
|
||
HP_STATE_CURRENT_TEMP = a7b8c9d0-e1f2-4a3b-4c5d-6e7f8a9b0c1d
|
||
HP_STATE_OUTDOOR_TEMP = b8c9d0e1-f2a3-4b4c-5d6e-7f8a9b0c1d2e
|
||
HP_STATE_CURRENT_POWER = c9d0e1f2-a3b4-4c5d-6e7f-8a9b0c1d2e3f
|
||
HP_STATE_COP = d0e1f2a3-b4c5-4d6e-7f8a-9b0c1d2e3f4a
|
||
HP_STATE_DEFROST_ACTIVE = e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b
|
||
HP_STATE_ERROR_CODE = f2a3b4c5-d6e7-4f8a-9b0c-1d2e3f4a5b6c
|
||
|
||
Actions PAC (ActionTypes) :
|
||
HP_ACTION_SET_MODE = a3b4c5d6-e7f8-4a9b-0c1d-2e3f4a5b6c7d
|
||
HP_ACTION_PARAM_MODE = b4c5d6e7-f8a9-4b0c-1d2e-3f4a5b6c7d8e
|
||
HP_ACTION_SET_TARGET_TEMP = c5d6e7f8-a9b0-4c1d-2e3f-4a5b6c7d8e9f
|
||
HP_ACTION_PARAM_TARGET_TEMP = d6e7f8a9-b0c1-4d2e-3f4a-5b6c7d8e9f0a
|
||
|
||
États ECS (StateTypes) :
|
||
DHW_STATE_CONNECTED = c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f
|
||
DHW_STATE_POWER = d2e3f4a5-b6c7-4d8e-9f0a-1b2c3d4e5f6a
|
||
DHW_STATE_TARGET_TEMP = e3f4a5b6-c7d8-4e9f-0a1b-2c3d4e5f6a7b
|
||
DHW_STATE_CURRENT_TEMP = f4a5b6c7-d8e9-4f0a-1b2c-3d4e5f6a7b8c
|
||
DHW_STATE_BOOST_MODE = a5b6c7d8-e9f0-4a1b-2c3d-4e5f6a7b8c9d
|
||
DHW_STATE_CURRENT_POWER = b6c7d8e9-f0a1-4b2c-3d4e-5f6a7b8c9d0e
|
||
|
||
Actions ECS (ActionTypes) :
|
||
DHW_ACTION_TRIGGER_BOOST = d8e9f0a1-b2c3-4d4e-5f6a-7b8c9d0e1f2a
|
||
DHW_ACTION_PARAM_DURATION = e9f0a1b2-c3d4-4e5f-6a7b-8c9d0e1f2a3b
|
||
```
|