refactored use solar power code

This commit is contained in:
MalteSchm 2023-04-25 11:05:08 +02:00
parent 322f532ac0
commit 0a0488f73a

View File

@ -172,21 +172,23 @@ int32_t PowerLimiterClass::calcPowerLimit(std::shared_ptr<InverterAbstract> inve
return _lastRequestedPowerLimit; return _lastRequestedPowerLimit;
} }
float efficency = inverter->Statistics()->getChannelFieldValue(TYPE_AC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_EFF); // We should use Victron solar power only (corrected by efficiency factor)
int32_t victronChargePower = this->getDirectSolarPower(); if (consumeSolarPowerOnly) {
int32_t adjustedVictronChargePower = victronChargePower * (efficency > 0.0 ? (efficency / 100.0) : 1.0); // if inverter is off, use 1.0 float efficiency = inverter->Statistics()->getChannelFieldValue(TYPE_AC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_EFF);
int32_t victronChargePower = this->getDirectSolarPower();
int32_t adjustedVictronChargePower = victronChargePower * (efficiency > 0.0 ? (efficiency / 100.0) : 1.0); // if inverter is off, use 1.0
MessageOutput.printf("[PowerLimiterClass::loop] victronChargePower: %d, efficiency: %.2f, consumeSolarPowerOnly: %s, powerConsumption: %d \r\n", MessageOutput.printf("[PowerLimiterClass::loop] Consuming Solar Power Only -> victronChargePower: %d, efficiency: %.2f, powerConsumption: %d \r\n",
victronChargePower, efficency, consumeSolarPowerOnly ? "true" : "false", newPowerLimit); victronChargePower, efficiency, newPowerLimit);
int32_t upperPowerLimit = config.PowerLimiter_UpperPowerLimit; // Limit power to solar power only
if (consumeSolarPowerOnly && (upperPowerLimit > adjustedVictronChargePower)) { if (adjustedVictronChargePower < newPowerLimit)
// Battery voltage too low, use Victron solar power (corrected by efficiency factor) only newPowerLimit = adjustedVictronChargePower;
upperPowerLimit = adjustedVictronChargePower;
} }
if (newPowerLimit > upperPowerLimit) // Respect power limit
newPowerLimit = upperPowerLimit; if (newPowerLimit > config.PowerLimiter_UpperPowerLimit)
newPowerLimit = config.PowerLimiter_UpperPowerLimit;
MessageOutput.printf("[PowerLimiterClass::loop] newPowerLimit: %d\r\n", newPowerLimit); MessageOutput.printf("[PowerLimiterClass::loop] newPowerLimit: %d\r\n", newPowerLimit);
return newPowerLimit; return newPowerLimit;