diff --git a/energyplugin/smartchargingmanager.cpp b/energyplugin/smartchargingmanager.cpp index ae453df..0730326 100644 --- a/energyplugin/smartchargingmanager.cpp +++ b/energyplugin/smartchargingmanager.cpp @@ -637,6 +637,12 @@ void SmartChargingManager::prepareInformation(const QDateTime ¤tDateTime) evChargers.append(evCharger); } + // [ETM] Les bornes préparées CE cycle — exactement celles que l'étape 2 va traiter. La table + // m_processInfos ne le dit pas : elle n'est jamais vidée, et operator[] y crée une entrée par + // défaut (1 phase, pas de bascule) dès qu'on la lit ainsi, dans verifyOverloadProtection() par + // exemple. Lue par internalHasProcessInfo(), voir sa documentation. + m_preparedChargers = QSet(evChargers.constBegin(), evChargers.constEnd()); + // 2. Prepare all information avaialble for each charger foreach (EvCharger *evCharger, evChargers) { diff --git a/energyplugin/smartchargingmanager.h b/energyplugin/smartchargingmanager.h index 45c0cf3..56805e8 100644 --- a/energyplugin/smartchargingmanager.h +++ b/energyplugin/smartchargingmanager.h @@ -27,6 +27,7 @@ #include #include +#include #include "energymanagerconfiguration.h" #include "types/charginginfo.h" @@ -139,6 +140,9 @@ signals: // protection de surcharge. Documenté ci-dessous. // 7. setEvChargingState() — écriture ETM d'un état RUNTIME, documentée // ci-dessous. Pas un réglage : jamais persistée. +// 9. m_preparedChargers — membre privé ETM, posé par prepareInformation() : +// les bornes préparées au dernier cycle. Seul +// lecteur : internalHasProcessInfo(). // 6. evSurplusPlannedByWaterfall(), evCommandedByWaterfall() // — crochets ETM, virtuels, documentés ci-dessous. // Ce sont EUX qui garantissent « une charge, un @@ -311,8 +315,16 @@ protected: * \c EnergyArbitrator::evTargetPhases() doit le SAVOIR plutôt que de le déduire de * valeurs par défaut — sans quoi une borne triphasée est annoncée monophasée et le * budget du cycle est divisé par trois. + * \note **Lu sur l'ensemble des bornes préparées ce cycle, pas sur la table.** La table + * \c m_processInfos n'est jamais vidée, et l'amont la lit aussi par \c operator[], qui y + * insère une entrée par défaut : \c verifyOverloadProtection() le fait pour toute borne qu'il + * rabaisse. Tester la table rendait donc VRAI pour une borne sans voiture après sa première + * surcharge, et la borne triphasée devenait monophasée dans les comptes (relevé du + * 2026-10-27, \c testOverloadLeavesTheChargerItsPhases). De même, une voiture désassignée + * laissait son entrée de la veille (\c testAnUnassignedCarTakesItsPhasesAway). */ - bool internalHasProcessInfo(EvCharger *evCharger) const { return m_processInfos.contains(evCharger); } // [ETM] new + bool internalHasProcessInfo(EvCharger *evCharger) const // [ETM] new + { return m_preparedChargers.contains(evCharger) && m_processInfos.contains(evCharger); } // [ETM] END private slots: @@ -344,6 +356,7 @@ private: QHash m_chargingSchedules; QHash m_processInfos; + QSet m_preparedChargers; // [ETM] préparées au dernier prepareInformation() QHash m_chargingActions; QDateTime m_lastSpotMarketPlanning;