diff --git a/energyplugin/smartchargingmanager.cpp b/energyplugin/smartchargingmanager.cpp index 22a9e48..2661116 100644 --- a/energyplugin/smartchargingmanager.cpp +++ b/energyplugin/smartchargingmanager.cpp @@ -577,17 +577,31 @@ void SmartChargingManager::prepareInformation(const QDateTime ¤tDateTime) continue; } + // [ETM] Le repli ne concerne QUE les modes qui EXIGENT une échéance. La condition + // portait sur « mode != Normal », donc elle emportait aussi les deux modes qui n'ont + // jamais eu d'échéance : + // - ChargingModeEcoWithMinCurrent était réécrit en ChargingModeEco au cycle suivant, + // PERSISTÉ et notifié — le mode « éco + courant minimum garanti » ne survivait + // donc jamais à un cycle, et la branche 4 d'adjustEvChargers() qui l'applique + // était morte. Réglage détruit en silence, du point de vue de l'app. + // - ChargingModeEco était « replié » sur lui-même à CHAQUE cycle : setChargingMode, + // storeChargingInfo (écriture disque) et chargingInfoChanged (notification) sans + // qu'aucune valeur ne change. Un *Changed qui ne change rien (invariant 11). + // Les deux autres sites du même repli (planSpotMarketCharging, planSurplusCharging) + // portent déjà cette garde ; c'est ce site-ci qui l'avait perdue en 7588473. + const ChargingInfo::ChargingMode currentMode = m_chargingInfos.value(evCharger->id()).chargingMode(); + const bool exigeUneEcheance = currentMode == ChargingInfo::ChargingModeEcoWithTargetTime + || currentMode == ChargingInfo::ChargingModeEcoMinWithTargetTime; + QDateTime endDateTime = m_chargingInfos.value(evCharger->id()).nextEndTime(currentDateTime); - if (!endDateTime.isValid() && m_chargingInfos.value(evCharger->id()).chargingMode() != ChargingInfo::ChargingModeNormal) { + if (!endDateTime.isValid() && exigeUneEcheance) { qCDebug(dcNymeaEnergy()).nospace() << "No valid target time set for " << evCharger->name(); - const ChargingInfo::ChargingMode currentMode = m_chargingInfos.value(evCharger->id()).chargingMode(); ChargingInfo::ChargingMode fallbackMode; if (currentMode == ChargingInfo::ChargingModeEcoMinWithTargetTime) { qCDebug(dcNymeaEnergy()) << "Resetting to ECO with min current mode."; fallbackMode = ChargingInfo::ChargingModeEcoWithMinCurrent; } else { - if (currentMode == ChargingInfo::ChargingModeEcoWithTargetTime) - qCDebug(dcNymeaEnergy()) << "Resetting to ECO mode without time."; + qCDebug(dcNymeaEnergy()) << "Resetting to ECO mode without time."; fallbackMode = ChargingInfo::ChargingModeEco; } m_chargingInfos[evCharger->id()].setChargingMode(fallbackMode);