diff --git a/src/PowerLimiter.cpp b/src/PowerLimiter.cpp index 1b3546f15..c3f2cb459 100644 --- a/src/PowerLimiter.cpp +++ b/src/PowerLimiter.cpp @@ -495,19 +495,18 @@ bool PowerLimiterClass::setNewPowerLimit(std::shared_ptr inver std::list dcChnls = inverter->Statistics()->getChannelsByType(TYPE_DC); int dcProdChnls = 0, dcTotalChnls = dcChnls.size(); for (auto& c : dcChnls) { - if (inverter->Statistics()->getChannelFieldValue(TYPE_DC, c, FLD_PDC) > 1.0) { + if (inverter->Statistics()->getChannelFieldValue(TYPE_DC, c, FLD_PDC) > 2.0) { dcProdChnls++; } } - if (dcProdChnls > 0) { + if ((dcProdChnls > 0) && (dcProdChnls != dcTotalChnls)) { MessageOutput.printf("[PowerLimiterClass::setNewPowerLimit] %d channels total, %d producing channels, scaling power limit\r\n", dcTotalChnls, dcProdChnls); effPowerLimit = round(effPowerLimit * static_cast(dcTotalChnls) / dcProdChnls); - if (effPowerLimit > inverter->DevInfo()->getMaxPower()) { - effPowerLimit = inverter->DevInfo()->getMaxPower(); - } } + effPowerLimit = std::min(effPowerLimit, inverter->DevInfo()->getMaxPower()); + // Check if the new value is within the limits of the hysteresis auto diff = std::abs(effPowerLimit - _lastRequestedPowerLimit); if ( diff < config.PowerLimiter_TargetPowerConsumptionHysteresis) {