Removing un-necessary timestamp, commenting code and cleanups
This commit is contained in:
parent
03ce71519d
commit
9ff1885d5a
@ -28,7 +28,6 @@ public:
|
|||||||
bool getDisable();
|
bool getDisable();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32_t _lastCommandSent = 0;
|
|
||||||
uint32_t _lastLoop = 0;
|
uint32_t _lastLoop = 0;
|
||||||
int32_t _lastRequestedPowerLimit = 0;
|
int32_t _lastRequestedPowerLimit = 0;
|
||||||
uint32_t _lastLimitSetTime = 0;
|
uint32_t _lastLimitSetTime = 0;
|
||||||
|
|||||||
@ -26,24 +26,19 @@ void PowerLimiterClass::loop()
|
|||||||
// Run inital checks to make sure we have met the basic conditions
|
// Run inital checks to make sure we have met the basic conditions
|
||||||
if (!config.PowerMeter_Enabled
|
if (!config.PowerMeter_Enabled
|
||||||
|| !Hoymiles.getRadio()->isIdle()
|
|| !Hoymiles.getRadio()->isIdle()
|
||||||
|| (millis() - _lastCommandSent) < (config.PowerLimiter_Interval * 1000)
|
|
||||||
|| (millis() - _lastLoop) < (config.PowerLimiter_Interval * 1000)) {
|
|| (millis() - _lastLoop) < (config.PowerLimiter_Interval * 1000)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_lastLoop = millis();
|
_lastLoop = millis();
|
||||||
|
|
||||||
// Debug state transistions, TODO: Remove
|
|
||||||
MessageOutput.printf("****************** PL STATE: %i\r\n", _plState);
|
|
||||||
|
|
||||||
std::shared_ptr<InverterAbstract> inverter = Hoymiles.getInverterByPos(config.PowerLimiter_InverterId);
|
std::shared_ptr<InverterAbstract> inverter = Hoymiles.getInverterByPos(config.PowerLimiter_InverterId);
|
||||||
if (inverter == nullptr || !inverter->isReachable()) {
|
if (inverter == nullptr || !inverter->isReachable()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure inverter is turned off if PL is disabled by user
|
// Make sure inverter is turned off if PL is disabled by user/MQTT
|
||||||
// Make sure inverter is turned off when lower battery threshold is reached
|
// Make sure inverter is turned off when low battery threshold is reached
|
||||||
// In this case we are in some state and want to reach STATE_PL_SHUTDOWN
|
|
||||||
if (((!config.PowerLimiter_Enabled || _disabled) && _plState != SHUTDOWN)
|
if (((!config.PowerLimiter_Enabled || _disabled) && _plState != SHUTDOWN)
|
||||||
|| isStopThresholdReached(inverter)) {
|
|| isStopThresholdReached(inverter)) {
|
||||||
if (inverter->isProducing()) {
|
if (inverter->isProducing()) {
|
||||||
@ -55,35 +50,34 @@ void PowerLimiterClass::loop()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If power limiter is disabled
|
// Return if power limiter is disabled
|
||||||
if (!config.PowerLimiter_Enabled) {
|
if (!config.PowerLimiter_Enabled || _disabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// At this point the PL is enabled but we could still be in the shutdown state
|
||||||
float dcVoltage = inverter->Statistics()->getChannelFieldValue(TYPE_DC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_UDC);
|
_plState = ACTIVE;
|
||||||
//float acPower = inverter->Statistics()->getChannelFieldValue(TYPE_AC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_PAC);
|
|
||||||
//float correctedDcVoltage = dcVoltage + (acPower * config.PowerLimiter_VoltageLoadCorrectionFactor);
|
|
||||||
|
|
||||||
// If the last inverter update is too old, don't do anything.
|
// If the last inverter update is too old, don't do anything.
|
||||||
// If the last inverter update was before the last limit updated, don't do anything.
|
// If the last inverter update was before the last limit updated, don't do anything.
|
||||||
// Also give the Power meter 3 seconds time to recognize power changes because of the last set limit
|
// Also give the Power meter 3 seconds time to recognize power changes after the last set limit
|
||||||
// and also because the Hoymiles MPPT might not react immediately.
|
// as the Hoymiles MPPT might not react immediately.
|
||||||
if ((millis() - inverter->Statistics()->getLastUpdate()) > 10000
|
if ((millis() - inverter->Statistics()->getLastUpdate()) > 10000
|
||||||
|| inverter->Statistics()->getLastUpdate() <= _lastLimitSetTime
|
|| inverter->Statistics()->getLastUpdate() <= _lastLimitSetTime
|
||||||
|| PowerMeter.getLastPowerMeterUpdate() <= (_lastLimitSetTime + 3000)) {
|
|| PowerMeter.getLastPowerMeterUpdate() <= (_lastLimitSetTime + 3000)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Printout some stats
|
||||||
if (millis() - PowerMeter.getLastPowerMeterUpdate() < (30 * 1000)) {
|
if (millis() - PowerMeter.getLastPowerMeterUpdate() < (30 * 1000)) {
|
||||||
|
float dcVoltage = inverter->Statistics()->getChannelFieldValue(TYPE_DC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_UDC);
|
||||||
MessageOutput.printf("[PowerLimiterClass::loop] dcVoltage: %.2f Voltage Start Threshold: %.2f Voltage Stop Threshold: %.2f inverter->isProducing(): %d\r\n",
|
MessageOutput.printf("[PowerLimiterClass::loop] dcVoltage: %.2f Voltage Start Threshold: %.2f Voltage Stop Threshold: %.2f inverter->isProducing(): %d\r\n",
|
||||||
dcVoltage, config.PowerLimiter_VoltageStartThreshold, config.PowerLimiter_VoltageStopThreshold, inverter->isProducing());
|
dcVoltage, config.PowerLimiter_VoltageStartThreshold, config.PowerLimiter_VoltageStopThreshold, inverter->isProducing());
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we're in shutdown move to active operation
|
|
||||||
if (_plState == SHUTDOWN) {
|
|
||||||
_plState = ACTIVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Battery charging cycle conditions
|
||||||
|
// The battery can only be discharged after a full charge in the
|
||||||
|
// EMPTY_WHEN_FULL case
|
||||||
if (isStopThresholdReached(inverter)) {
|
if (isStopThresholdReached(inverter)) {
|
||||||
// Disable battery discharge when empty
|
// Disable battery discharge when empty
|
||||||
_batteryDischargeEnabled = false;
|
_batteryDischargeEnabled = false;
|
||||||
@ -98,10 +92,11 @@ void PowerLimiterClass::loop()
|
|||||||
_batteryDischargeEnabled = true;
|
_batteryDischargeEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate and set Power Limit
|
||||||
int32_t newPowerLimit = calcPowerLimit(inverter, !_batteryDischargeEnabled);
|
int32_t newPowerLimit = calcPowerLimit(inverter, !_batteryDischargeEnabled);
|
||||||
|
setNewPowerLimit(inverter, newPowerLimit);
|
||||||
// Debug, TODO: Remove
|
// Debug, TODO: Remove
|
||||||
MessageOutput.printf("****************************** Powerlimit: %i\r\n", newPowerLimit);
|
MessageOutput.printf("****************************** Powerlimit: %i\r\n", newPowerLimit);
|
||||||
setNewPowerLimit(inverter, newPowerLimit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
plStates PowerLimiterClass::getPowerLimiterState() {
|
plStates PowerLimiterClass::getPowerLimiterState() {
|
||||||
@ -205,7 +200,6 @@ void PowerLimiterClass::setNewPowerLimit(std::shared_ptr<InverterAbstract> inver
|
|||||||
if (!inverter->isProducing() && newPowerLimit > config.PowerLimiter_LowerPowerLimit) {
|
if (!inverter->isProducing() && newPowerLimit > config.PowerLimiter_LowerPowerLimit) {
|
||||||
MessageOutput.println("[PowerLimiterClass::loop] Starting up inverter...");
|
MessageOutput.println("[PowerLimiterClass::loop] Starting up inverter...");
|
||||||
inverter->sendPowerControlRequest(Hoymiles.getRadio(), true);
|
inverter->sendPowerControlRequest(Hoymiles.getRadio(), true);
|
||||||
_lastCommandSent = millis();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop the inverter if limit is below threshold.
|
// Stop the inverter if limit is below threshold.
|
||||||
@ -214,7 +208,6 @@ void PowerLimiterClass::setNewPowerLimit(std::shared_ptr<InverterAbstract> inver
|
|||||||
if (inverter->isProducing()) {
|
if (inverter->isProducing()) {
|
||||||
MessageOutput.println("[PowerLimiterClass::loop] Stopping inverter...");
|
MessageOutput.println("[PowerLimiterClass::loop] Stopping inverter...");
|
||||||
inverter->sendPowerControlRequest(Hoymiles.getRadio(), false);
|
inverter->sendPowerControlRequest(Hoymiles.getRadio(), false);
|
||||||
_lastCommandSent = millis();
|
|
||||||
}
|
}
|
||||||
newPowerLimit = config.PowerLimiter_LowerPowerLimit;
|
newPowerLimit = config.PowerLimiter_LowerPowerLimit;
|
||||||
}
|
}
|
||||||
@ -223,7 +216,7 @@ void PowerLimiterClass::setNewPowerLimit(std::shared_ptr<InverterAbstract> inver
|
|||||||
// and differs from the last requested value
|
// and differs from the last requested value
|
||||||
if( _lastRequestedPowerLimit != newPowerLimit &&
|
if( _lastRequestedPowerLimit != newPowerLimit &&
|
||||||
/* newPowerLimit > config.PowerLimiter_LowerPowerLimit && --> This will always be true given the check above, kept for code readability */
|
/* newPowerLimit > config.PowerLimiter_LowerPowerLimit && --> This will always be true given the check above, kept for code readability */
|
||||||
newPowerLimit < config.PowerLimiter_UpperPowerLimit ) {
|
newPowerLimit <= config.PowerLimiter_UpperPowerLimit ) {
|
||||||
MessageOutput.printf("[PowerLimiterClass::loop] Limit Non-Persistent: %d W\r\n", newPowerLimit);
|
MessageOutput.printf("[PowerLimiterClass::loop] Limit Non-Persistent: %d W\r\n", newPowerLimit);
|
||||||
inverter->sendActivePowerControlRequest(Hoymiles.getRadio(), newPowerLimit, PowerLimitControlType::AbsolutNonPersistent);
|
inverter->sendActivePowerControlRequest(Hoymiles.getRadio(), newPowerLimit, PowerLimitControlType::AbsolutNonPersistent);
|
||||||
_lastRequestedPowerLimit = newPowerLimit;
|
_lastRequestedPowerLimit = newPowerLimit;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user