From b7dda8354586a9ac84d60393beb4bdbdfe28a5e3 Mon Sep 17 00:00:00 2001 From: helgeerbe Date: Fri, 3 Mar 2023 20:34:11 +0100 Subject: [PATCH] use efficiency factor if limit is set to victronChargePower --- src/PowerLimiter.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/PowerLimiter.cpp b/src/PowerLimiter.cpp index 8676ff53a..d117a03c0 100644 --- a/src/PowerLimiter.cpp +++ b/src/PowerLimiter.cpp @@ -90,9 +90,10 @@ void PowerLimiterClass::loop() return; } + float efficency = inverter->Statistics()->getChannelFieldValue(TYPE_AC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_EFF); uint16_t victronChargePower = this->getDirectSolarPower(); - MessageOutput.printf("[PowerLimiterClass::loop] victronChargePower: %d, consumeSolarPowerOnly: %s \r\n", victronChargePower, _consumeSolarPowerOnly ? "true" : "false"); + MessageOutput.printf("[PowerLimiterClass::loop] victronChargePower: %d, efficiency: %.2f, consumeSolarPowerOnly: %s \r\n", victronChargePower, efficency, _consumeSolarPowerOnly ? "true" : "false"); if (millis() - _lastPowerMeterUpdate < (30 * 1000)) { MessageOutput.printf("[PowerLimiterClass::loop] dcVoltage: %.2f Voltage Start Threshold: %.2f Voltage Stop Threshold: %.2f inverter->isProducing(): %d\r\n", @@ -170,8 +171,8 @@ void PowerLimiterClass::loop() uint16_t upperPowerLimit = config.PowerLimiter_UpperPowerLimit; if (_consumeSolarPowerOnly && (upperPowerLimit > victronChargePower)) { - // Battery voltage too low, use Victron solar power only - upperPowerLimit = victronChargePower; + // Battery voltage too low, use Victron solar power (corrected by efficency factor) only + upperPowerLimit = victronChargePower * (efficency / 100.0); } if (newPowerLimit > upperPowerLimit)