From 8c9afbcdc0ed88337bd7c8dc02145583936dad87 Mon Sep 17 00:00:00 2001 From: MalteSchm Date: Sun, 23 Apr 2023 11:30:08 +0200 Subject: [PATCH] fix an issue if inverter is behind power meter --- src/PowerLimiter.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/PowerLimiter.cpp b/src/PowerLimiter.cpp index fd6b0f1a..992850fd 100644 --- a/src/PowerLimiter.cpp +++ b/src/PowerLimiter.cpp @@ -149,14 +149,6 @@ int32_t PowerLimiterClass::calcPowerLimit(std::shared_ptr inve return config.PowerLimiter_LowerPowerLimit; } - // check if grid power consumption is within the limits of the target consumption + hysteresis - if (newPowerLimit >= (config.PowerLimiter_TargetPowerConsumption - config.PowerLimiter_TargetPowerConsumptionHysteresis) && - newPowerLimit <= (config.PowerLimiter_TargetPowerConsumption + config.PowerLimiter_TargetPowerConsumptionHysteresis)) { - // The values have not changed much. We just use the old setting - MessageOutput.println("[PowerLimiterClass::loop] reusing old limit"); - return _lastRequestedPowerLimit; - } - if (config.PowerLimiter_IsInverterBehindPowerMeter) { // If the inverter the behind the power meter (part of measurement), // the produced power of this inverter has also to be taken into account. @@ -165,6 +157,16 @@ int32_t PowerLimiterClass::calcPowerLimit(std::shared_ptr inve float acPower = inverter->Statistics()->getChannelFieldValue(TYPE_AC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_PAC); newPowerLimit += static_cast(acPower); } + + // check if grid power consumption is within the limits of the target consumption + hysteresis + if (newPowerLimit >= (config.PowerLimiter_TargetPowerConsumption - config.PowerLimiter_TargetPowerConsumptionHysteresis) && + newPowerLimit <= (config.PowerLimiter_TargetPowerConsumption + config.PowerLimiter_TargetPowerConsumptionHysteresis)) { + // The values have not changed much. We just use the old setting + MessageOutput.println("[PowerLimiterClass::loop] reusing old limit"); + return _lastRequestedPowerLimit; + } + + float efficency = inverter->Statistics()->getChannelFieldValue(TYPE_AC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_EFF); int32_t victronChargePower = this->getDirectSolarPower();