From cf4a35e1482cb19d91b91531958d523ade53f1e3 Mon Sep 17 00:00:00 2001 From: helgeerbe Date: Fri, 3 Mar 2023 19:51:04 +0100 Subject: [PATCH 1/3] fix starting and stopping inverter --- src/PowerLimiter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PowerLimiter.cpp b/src/PowerLimiter.cpp index 9a1ed2ed..8676ff53 100644 --- a/src/PowerLimiter.cpp +++ b/src/PowerLimiter.cpp @@ -114,7 +114,7 @@ void PowerLimiterClass::loop() _consumeSolarPowerOnly = true; } - if ((!_consumeSolarPowerOnly && isStopThresholdReached(inverter)) + if (isStopThresholdReached(inverter) || (_consumeSolarPowerOnly && !canUseDirectSolarPower())) { // DC voltage too low, stop the inverter MessageOutput.printf("[PowerLimiterClass::loop] DC voltage: %.2f Corrected DC voltage: %.2f...\r\n", @@ -132,7 +132,7 @@ void PowerLimiterClass::loop() return; } } else { - if ((isStartThresholdReached(inverter) || canUseDirectSolarPower()) && powerMeter >= config.PowerLimiter_LowerPowerLimit) { + if ((isStartThresholdReached(inverter) || (_consumeSolarPowerOnly && canUseDirectSolarPower() && (!isStopThresholdReached(inverter)))) && powerMeter >= config.PowerLimiter_LowerPowerLimit) { // DC voltage high enough, start the inverter MessageOutput.println("[PowerLimiterClass::loop] Starting up inverter..."); _lastCommandSent = millis(); From b7dda8354586a9ac84d60393beb4bdbdfe28a5e3 Mon Sep 17 00:00:00 2001 From: helgeerbe Date: Fri, 3 Mar 2023 20:34:11 +0100 Subject: [PATCH 2/3] 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 8676ff53..d117a03c 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) From 9391b11403c9e34f1ebc6199cf6f6ba781ffd3a5 Mon Sep 17 00:00:00 2001 From: helgeerbe Date: Sat, 4 Mar 2023 11:59:10 +0100 Subject: [PATCH 3/3] fix start inverter --- src/PowerLimiter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PowerLimiter.cpp b/src/PowerLimiter.cpp index d117a03c..ddf62ea2 100644 --- a/src/PowerLimiter.cpp +++ b/src/PowerLimiter.cpp @@ -133,7 +133,7 @@ void PowerLimiterClass::loop() return; } } else { - if ((isStartThresholdReached(inverter) || (_consumeSolarPowerOnly && canUseDirectSolarPower() && (!isStopThresholdReached(inverter)))) && powerMeter >= config.PowerLimiter_LowerPowerLimit) { + if ((isStartThresholdReached(inverter) || (canUseDirectSolarPower() && (!isStopThresholdReached(inverter)))) && powerMeter >= config.PowerLimiter_LowerPowerLimit) { // DC voltage high enough, start the inverter MessageOutput.println("[PowerLimiterClass::loop] Starting up inverter..."); _lastCommandSent = millis();