From ab36143385eaa8570c4cf50f347dfb26cba10e7a Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Fri, 16 Oct 2026 07:45:45 +0200 Subject: [PATCH] =?UTF-8?q?refactor(arbitre):=20IScheduler=20*m=5Fstrategy?= =?UTF-8?q?=20=C3=A0=20c=C3=B4t=C3=A9=20de=20m=5Fscheduler=20(brief=204=20?= =?UTF-8?q?T0.5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit update() interroge désormais la stratégie par son interface. Sans endpoint d'optimiseur, m_strategy pointe sur le rule-based : même objet, même appel. m_scheduler garde son type concret — le rule-based restera le repli et le plan ombre d'une stratégie externe (T0 §0.1). Aucun SocketScheduler. Neutre : référence de décisions IDENTIQUE (23 739 lignes) ; suites inchangées (simulation 211, loadmodel 135, charging 80, spotmarket 36 + 11 ignorés, 0 échec) ; aucun nouveau gabarit de journal >= info. Co-Authored-By: Claude Opus 5.5 --- energyplugin/etm/energyarbitrator.cpp | 5 +++-- energyplugin/etm/energyarbitrator.h | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/energyplugin/etm/energyarbitrator.cpp b/energyplugin/etm/energyarbitrator.cpp index f1c67d8..a28d07f 100644 --- a/energyplugin/etm/energyarbitrator.cpp +++ b/energyplugin/etm/energyarbitrator.cpp @@ -48,6 +48,7 @@ EnergyArbitrator::EnergyArbitrator(EnergyManager *em, ThingManager *tm, QObject *parent) : SmartChargingManager(em, tm, sm, conf, parent) , m_scheduler(new RuleBasedScheduler(this, this)) + , m_strategy(m_scheduler) , m_tm(tm) { // --- L2 : watchdog fraîcheur compteur (SAFETY.md §L2) --- @@ -404,7 +405,7 @@ void EnergyArbitrator::update(const QDateTime ¤tDateTime) // SCM : 1.updateManual 2.prepareInfo 3.verifyOverload 4.verifyRecovery // 5.planSpot 6.planSurplus 7.adjustEv // ETM : idem 1-4 ; insertions ETM entre 4 et 7 ; - // planSpot + planSurplus appelés via m_scheduler->getPlan() (position 5-6). + // planSpot + planSurplus appelés via m_strategy->getPlan() (position 5-6). // 1-4 : préparation + sécurité (même ordre que l'amont) updateManualSoCsWithoutMeter(currentDateTime); @@ -470,7 +471,7 @@ void EnergyArbitrator::update(const QDateTime ¤tDateTime) // que le contexte rapporte, et les survivantes y sont marquées avant que le plan ne soit // fait. Les évaluer après le plan servirait un cycle de plus une dérogation déjà finie. evaluerDerogations(ctx, currentDateTime); - Plan plan = m_scheduler->getPlan(ctx); + Plan plan = m_strategy->getPlan(ctx); Slot slot = plan.slotCovering(currentDateTime); // Le LIBELLÉ n'est pas dans le motif : il est substitué AU RENDU (cf. decisionreason.h). diff --git a/energyplugin/etm/energyarbitrator.h b/energyplugin/etm/energyarbitrator.h index d8f4de8..90ed558 100644 --- a/energyplugin/etm/energyarbitrator.h +++ b/energyplugin/etm/energyarbitrator.h @@ -1022,6 +1022,15 @@ private: static bool telemetrySignificantlyDiffers(const QVariantMap &a, const QVariantMap &b); RuleBasedScheduler *m_scheduler = nullptr; + /*! + * \brief La stratégie que update() interroge — c'est le SEUL appel de getPlan() du cycle. + * + * Sans endpoint d'optimiseur, elle pointe sur \c m_scheduler : même objet, même appel. + * \c m_scheduler garde son type concret parce que le rule-based est aussi le repli et le + * plan ombre d'une stratégie externe (brief 4 T0 §0.1 : ses effets de bord — actions du + * proxy, comptabilité éco, réserve batterie — doivent tourner à chaque cycle). + */ + IScheduler *m_strategy = nullptr; QHash m_adapters; //!< loadId (ThingId string) → EvAdapter*. /*! * \brief [3g-2] Bornes commandées par le waterfall AU CYCLE COURANT.