Implemented way to periodically fetch the current limit from the inverter
The fetch is only executed at least 4 minutes after the last set command. Otherwise it would generate a entry in the event log (ID 2)
This commit is contained in:
parent
3153ee4993
commit
754913368a
@ -33,7 +33,9 @@ void HoymilesClass::loop()
|
||||
iv->sendAlarmLogRequest(_radio.get(), force);
|
||||
|
||||
// Fetch limit
|
||||
if ((iv->SystemConfigPara()->getLastLimitRequestSuccess() == CMD_NOK) || (millis() - iv->SystemConfigPara()->getLastUpdate() > HOY_SYSTEM_CONFIG_PARA_POLL_INTERVAL)) {
|
||||
if ((iv->SystemConfigPara()->getLastLimitRequestSuccess() == CMD_NOK)
|
||||
|| ((millis() - iv->SystemConfigPara()->getLastUpdateRequest() > HOY_SYSTEM_CONFIG_PARA_POLL_INTERVAL)
|
||||
&& (millis() - iv->SystemConfigPara()->getLastUpdateCommand() > HOY_SYSTEM_CONFIG_PARA_POLL_MIN_DURATION))) {
|
||||
Serial.println("Request SystemConfigPara");
|
||||
iv->sendSystemConfigParaRequest(_radio.get());
|
||||
}
|
||||
|
||||
@ -7,7 +7,8 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#define HOY_SYSTEM_CONFIG_PARA_POLL_INTERVAL (10 * 60 * 1000) // 10 minutes
|
||||
#define HOY_SYSTEM_CONFIG_PARA_POLL_INTERVAL (2 * 60 * 1000) // 2 minutes
|
||||
#define HOY_SYSTEM_CONFIG_PARA_POLL_MIN_DURATION (4 * 60 * 1000) // at least 4 minutes between sending limit command and read request. Otherwise eventlog entry
|
||||
|
||||
class HoymilesClass {
|
||||
public:
|
||||
|
||||
@ -41,6 +41,12 @@ bool ActivePowerControlCommand::handleResponse(InverterAbstract* inverter, fragm
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((getType() == PowerLimitControlType::RelativNonPersistent) || (getType() == PowerLimitControlType::RelativPersistent)) {
|
||||
inverter->SystemConfigPara()->setLimitPercent(getLimit());
|
||||
} else {
|
||||
// TODO: Not implemented yet because we only can publish the percentage value
|
||||
}
|
||||
inverter->SystemConfigPara()->setLastUpdateCommand(millis());
|
||||
inverter->SystemConfigPara()->setLastLimitCommandSuccess(CMD_OK);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ bool SystemConfigParaCommand::handleResponse(InverterAbstract* inverter, fragmen
|
||||
inverter->SystemConfigPara()->appendFragment(offs, fragment[i].fragment, fragment[i].len);
|
||||
offs += (fragment[i].len);
|
||||
}
|
||||
inverter->SystemConfigPara()->setLastUpdate(millis());
|
||||
inverter->SystemConfigPara()->setLastUpdateRequest(millis());
|
||||
inverter->SystemConfigPara()->setLastLimitRequestSuccess(CMD_OK);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -104,9 +104,6 @@ bool HM_Abstract::sendActivePowerControlRequest(HoymilesRadio* radio, float limi
|
||||
cmd->setTargetAddress(serial());
|
||||
SystemConfigPara()->setLastLimitCommandSuccess(CMD_PENDING);
|
||||
|
||||
// request updated limits
|
||||
sendSystemConfigParaRequest(radio);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -22,6 +22,12 @@ float SystemConfigParaParser::getLimitPercent()
|
||||
return ((((uint16_t)_payload[2]) << 8) | _payload[3]) / 10;
|
||||
}
|
||||
|
||||
void SystemConfigParaParser::setLimitPercent(float value)
|
||||
{
|
||||
_payload[2] = ((uint16_t)(value * 10)) >> 8;
|
||||
_payload[3] = ((uint16_t)(value * 10));
|
||||
}
|
||||
|
||||
void SystemConfigParaParser::setLastLimitCommandSuccess(LastCommandSuccess status)
|
||||
{
|
||||
_lastLimitCommandSuccess = status;
|
||||
@ -32,6 +38,17 @@ LastCommandSuccess SystemConfigParaParser::getLastLimitCommandSuccess()
|
||||
return _lastLimitCommandSuccess;
|
||||
}
|
||||
|
||||
uint32_t SystemConfigParaParser::getLastUpdateCommand()
|
||||
{
|
||||
return _lastUpdateCommand;
|
||||
}
|
||||
|
||||
void SystemConfigParaParser::setLastUpdateCommand(uint32_t lastUpdate)
|
||||
{
|
||||
_lastUpdateCommand = lastUpdate;
|
||||
setLastUpdate(lastUpdate);
|
||||
}
|
||||
|
||||
void SystemConfigParaParser::setLastLimitRequestSuccess(LastCommandSuccess status)
|
||||
{
|
||||
_lastLimitRequestSuccess = status;
|
||||
@ -41,3 +58,14 @@ LastCommandSuccess SystemConfigParaParser::getLastLimitRequestSuccess()
|
||||
{
|
||||
return _lastLimitRequestSuccess;
|
||||
}
|
||||
|
||||
uint32_t SystemConfigParaParser::getLastUpdateRequest()
|
||||
{
|
||||
return _lastUpdateRequest;
|
||||
}
|
||||
|
||||
void SystemConfigParaParser::setLastUpdateRequest(uint32_t lastUpdate)
|
||||
{
|
||||
_lastUpdateRequest = lastUpdate;
|
||||
setLastUpdate(lastUpdate);
|
||||
}
|
||||
@ -10,12 +10,17 @@ public:
|
||||
void appendFragment(uint8_t offset, uint8_t* payload, uint8_t len);
|
||||
|
||||
float getLimitPercent();
|
||||
void setLimitPercent(float value);
|
||||
|
||||
void setLastLimitCommandSuccess(LastCommandSuccess status);
|
||||
LastCommandSuccess getLastLimitCommandSuccess();
|
||||
uint32_t getLastUpdateCommand();
|
||||
void setLastUpdateCommand(uint32_t lastUpdate);
|
||||
|
||||
void setLastLimitRequestSuccess(LastCommandSuccess status);
|
||||
LastCommandSuccess getLastLimitRequestSuccess();
|
||||
uint32_t getLastUpdateRequest();
|
||||
void setLastUpdateRequest(uint32_t lastUpdate);
|
||||
|
||||
private:
|
||||
uint8_t _payload[SYSTEM_CONFIG_PARA_SIZE];
|
||||
@ -23,4 +28,7 @@ private:
|
||||
|
||||
LastCommandSuccess _lastLimitCommandSuccess = CMD_OK; // Set to OK because we have to assume nothing is done at startup
|
||||
LastCommandSuccess _lastLimitRequestSuccess = CMD_NOK; // Set to NOK to fetch at startup
|
||||
|
||||
uint32_t _lastUpdateCommand = 0;
|
||||
uint32_t _lastUpdateRequest = 0;
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user