diff --git a/energyplugin/etm/scheduler/rulebasedscheduler.cpp b/energyplugin/etm/scheduler/rulebasedscheduler.cpp index 807dcf8..ce02609 100644 --- a/energyplugin/etm/scheduler/rulebasedscheduler.cpp +++ b/energyplugin/etm/scheduler/rulebasedscheduler.cpp @@ -613,6 +613,20 @@ Plan RuleBasedScheduler::getPlan(const SurplusContext &ctx) LoadContext lcConfort = lc; if (plafondPartage.contains(lc.id)) lcConfort.declared.minPowerW = 0; + // Lot délestage V2C (question 5) — HORS HEURES CREUSES AUSSI, la somme éco + confort d'une + // BORNE tient dans son plafond de cycle. En « Éco avec minimum », le niveau éco (le + // plancher) s'ajoutait au confort, borné seul par le plafond : sous une limite de 25 A, une + // maison à 10 A sur A, le plafond de 12,5 A plus 6 A d'éco faisaient 16 A, la phase à 26 A, + // et L4 coupait — puis la borne repartait au cycle suivant. Le confort est donc servi dans + // ce que l'éco laisse du plafond, et le plancher porte sur la somme : la part confort n'a + // que ce qui manque à l'éco pour l'atteindre. Seule la BORNE de D9 est reprise ici ; le + // partage de l'achat (l'achat cède ce que le surplus finance) reste aux heures creuses. + else if (lc.adapter == QStringLiteral("evcharger") && niveauxEco.contains(lc.id) + && niveauxEco.value(lc.id).targetW > 0 && lc.declared.maxPowerW > 0) { + const double ecoW = niveauxEco.value(lc.id).targetW; + lcConfort.declared.maxPowerW = qMax(0.0, lc.declared.maxPowerW - ecoW); + lcConfort.declared.minPowerW = qMax(0.0, lc.declared.minPowerW - ecoW); + } // Même règle pour la puissance ENGAGÉE par un verrou : elle borne la SOMME éco + confort, // qui est la consigne. Relevée en entier sur la part confort, elle s'ajoutait à un achat // éco qui la couvrait déjà : une borne tenue à 6 A par son verrou d'arrêt, servie à 6 A