stop inverter, if exporting power to grid
This commit is contained in:
parent
4a49f48969
commit
26a8809121
@ -25,7 +25,7 @@ private:
|
|||||||
float _powerMeter3Power;
|
float _powerMeter3Power;
|
||||||
|
|
||||||
bool canUseDirectSolarPower();
|
bool canUseDirectSolarPower();
|
||||||
uint32_t getDirectSolarPower();
|
float getDirectSolarPower();
|
||||||
float getLoadCorrectedVoltage(std::shared_ptr<InverterAbstract> inverter);
|
float getLoadCorrectedVoltage(std::shared_ptr<InverterAbstract> inverter);
|
||||||
bool isStartThresholdReached(std::shared_ptr<InverterAbstract> inverter);
|
bool isStartThresholdReached(std::shared_ptr<InverterAbstract> inverter);
|
||||||
bool isStopThresholdReached(std::shared_ptr<InverterAbstract> inverter);
|
bool isStopThresholdReached(std::shared_ptr<InverterAbstract> inverter);
|
||||||
|
|||||||
@ -90,13 +90,12 @@ void PowerLimiterClass::loop()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t victronChargePower = this->getDirectSolarPower();
|
float victronChargePower = this->getDirectSolarPower();
|
||||||
|
|
||||||
MessageOutput.printf("[PowerLimiterClass::loop] victronChargePower: %d\r\n",
|
MessageOutput.printf("[PowerLimiterClass::loop] victronChargePower: %.2f\r\n", victronChargePower);
|
||||||
static_cast<int>(victronChargePower));
|
|
||||||
|
|
||||||
if (millis() - _lastPowerMeterUpdate < (30 * 1000)) {
|
if (millis() - _lastPowerMeterUpdate < (30 * 1000)) {
|
||||||
MessageOutput.printf("[PowerLimiterClass::loop] dcVoltage: %f config.PowerLimiter_VoltageStartThreshold: %f config.PowerLimiter_VoltageStopThreshold: %f inverter->isProducing(): %d\r\n",
|
MessageOutput.printf("[PowerLimiterClass::loop] dcVoltage: %.2f config.PowerLimiter_VoltageStartThreshold: %.2f config.PowerLimiter_VoltageStopThreshold: %.2f inverter->isProducing(): %d\r\n",
|
||||||
dcVoltage, config.PowerLimiter_VoltageStartThreshold, config.PowerLimiter_VoltageStopThreshold, inverter->isProducing());
|
dcVoltage, config.PowerLimiter_VoltageStartThreshold, config.PowerLimiter_VoltageStopThreshold, inverter->isProducing());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +115,7 @@ void PowerLimiterClass::loop()
|
|||||||
if ((!_consumeSolarPowerOnly && isStopThresholdReached(inverter))
|
if ((!_consumeSolarPowerOnly && isStopThresholdReached(inverter))
|
||||||
|| (_consumeSolarPowerOnly && victronChargePower < 10)) {
|
|| (_consumeSolarPowerOnly && victronChargePower < 10)) {
|
||||||
// DC voltage too low, stop the inverter
|
// DC voltage too low, stop the inverter
|
||||||
MessageOutput.printf("[PowerLimiterClass::loop] DC voltage: %f Corrected DC voltage: %f...\r\n",
|
MessageOutput.printf("[PowerLimiterClass::loop] DC voltage: %.2f Corrected DC voltage: %.2f...\r\n",
|
||||||
dcVoltage, correctedDcVoltage);
|
dcVoltage, correctedDcVoltage);
|
||||||
MessageOutput.println("[PowerLimiterClass::loop] Stopping inverter...");
|
MessageOutput.println("[PowerLimiterClass::loop] Stopping inverter...");
|
||||||
inverter->sendPowerControlRequest(Hoymiles.getRadio(), false);
|
inverter->sendPowerControlRequest(Hoymiles.getRadio(), false);
|
||||||
@ -174,7 +173,15 @@ void PowerLimiterClass::loop()
|
|||||||
upperPowerLimit = victronChargePower;
|
upperPowerLimit = victronChargePower;
|
||||||
}
|
}
|
||||||
|
|
||||||
newPowerLimit = constrain(newPowerLimit, (uint16_t)config.PowerLimiter_LowerPowerLimit, upperPowerLimit);
|
if (newPowerLimit > upperPowerLimit)
|
||||||
|
newPowerLimit = upperPowerLimit;
|
||||||
|
else if (newPowerLimit < (uint16_t)config.PowerLimiter_LowerPowerLimit) {
|
||||||
|
newPowerLimit = (uint16_t)config.PowerLimiter_LowerPowerLimit;
|
||||||
|
// stop the inverter
|
||||||
|
MessageOutput.println("[PowerLimiterClass::loop] Power limit too low. Stopping inverter...");
|
||||||
|
inverter->sendPowerControlRequest(Hoymiles.getRadio(), false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
MessageOutput.printf("[PowerLimiterClass::loop] powerMeter: %d W lastRequestedPowerLimit: %d\r\n",
|
MessageOutput.printf("[PowerLimiterClass::loop] powerMeter: %d W lastRequestedPowerLimit: %d\r\n",
|
||||||
static_cast<int>(_powerMeter1Power + _powerMeter2Power + _powerMeter3Power), _lastRequestedPowerLimit);
|
static_cast<int>(_powerMeter1Power + _powerMeter2Power + _powerMeter3Power), _lastRequestedPowerLimit);
|
||||||
@ -211,13 +218,13 @@ bool PowerLimiterClass::canUseDirectSolarPower()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t PowerLimiterClass::getDirectSolarPower()
|
float PowerLimiterClass::getDirectSolarPower()
|
||||||
{
|
{
|
||||||
if (!this->canUseDirectSolarPower()) {
|
if (!this->canUseDirectSolarPower()) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (uint32_t) round(VeDirect.veFrame.PPV);
|
return VeDirect.veFrame.PPV;
|
||||||
}
|
}
|
||||||
|
|
||||||
float PowerLimiterClass::getLoadCorrectedVoltage(std::shared_ptr<InverterAbstract> inverter)
|
float PowerLimiterClass::getLoadCorrectedVoltage(std::shared_ptr<InverterAbstract> inverter)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user