refactor(arbitre): IScheduler *m_strategy à côté de m_scheduler (brief 4 T0.5)
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 <noreply@anthropic.com>
This commit is contained in:
parent
d4b7d4dced
commit
ab36143385
@ -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).
|
||||
|
||||
@ -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<QString, EvAdapter *> m_adapters; //!< loadId (ThingId string) → EvAdapter*.
|
||||
/*!
|
||||
* \brief [3g-2] Bornes commandées par le waterfall AU CYCLE COURANT.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user