Implemented getTimeout method in AlarmDataCommand
This commit is contained in:
parent
0af809e4ea
commit
3153ee4993
@ -29,7 +29,8 @@ void HoymilesClass::loop()
|
||||
iv->sendStatsRequest(_radio.get());
|
||||
|
||||
// Fetch event log
|
||||
iv->sendAlarmLogRequest(_radio.get());
|
||||
bool force = iv->EventLog()->getLastAlarmRequestSuccess() == CMD_NOK;
|
||||
iv->sendAlarmLogRequest(_radio.get(), force);
|
||||
|
||||
// Fetch limit
|
||||
if ((iv->SystemConfigPara()->getLastLimitRequestSuccess() == CMD_NOK) || (millis() - iv->SystemConfigPara()->getLastUpdate() > HOY_SYSTEM_CONFIG_PARA_POLL_INTERVAL)) {
|
||||
|
||||
@ -23,6 +23,12 @@ bool AlarmDataCommand::handleResponse(InverterAbstract* inverter, fragment_t fra
|
||||
inverter->EventLog()->appendFragment(offs, fragment[i].fragment, fragment[i].len);
|
||||
offs += (fragment[i].len);
|
||||
}
|
||||
inverter->EventLog()->setLastAlarmRequestSuccess(CMD_OK);
|
||||
inverter->EventLog()->setLastUpdate(millis());
|
||||
return true;
|
||||
}
|
||||
|
||||
void AlarmDataCommand::gotTimeout(InverterAbstract* inverter)
|
||||
{
|
||||
inverter->EventLog()->setLastAlarmRequestSuccess(CMD_NOK);
|
||||
}
|
||||
@ -7,4 +7,5 @@ public:
|
||||
explicit AlarmDataCommand(uint64_t target_address = 0, uint64_t router_address = 0, time_t time = 0);
|
||||
|
||||
virtual bool handleResponse(InverterAbstract* inverter, fragment_t fragment[], uint8_t max_fragment_id);
|
||||
virtual void gotTimeout(InverterAbstract* inverter);
|
||||
};
|
||||
@ -27,16 +27,18 @@ bool HM_Abstract::sendStatsRequest(HoymilesRadio* radio)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio)
|
||||
bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio, bool force)
|
||||
{
|
||||
struct tm timeinfo;
|
||||
if (!getLocalTime(&timeinfo, 0)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Statistics()->hasChannelFieldValue(CH0, FLD_EVT_LOG)) {
|
||||
if ((uint8_t)Statistics()->getChannelFieldValue(CH0, FLD_EVT_LOG) == _lastAlarmLogCnt) {
|
||||
return false;
|
||||
if (!force) {
|
||||
if (Statistics()->hasChannelFieldValue(CH0, FLD_EVT_LOG)) {
|
||||
if ((uint8_t)Statistics()->getChannelFieldValue(CH0, FLD_EVT_LOG) == _lastAlarmLogCnt) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,6 +50,7 @@ bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio)
|
||||
AlarmDataCommand* cmd = radio->enqueCommand<AlarmDataCommand>();
|
||||
cmd->setTime(now);
|
||||
cmd->setTargetAddress(serial());
|
||||
EventLog()->setLastAlarmRequestSuccess(CMD_PENDING);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ class HM_Abstract : public InverterAbstract {
|
||||
public:
|
||||
explicit HM_Abstract(uint64_t serial);
|
||||
bool sendStatsRequest(HoymilesRadio* radio);
|
||||
bool sendAlarmLogRequest(HoymilesRadio* radio);
|
||||
bool sendAlarmLogRequest(HoymilesRadio* radio, bool force = false);
|
||||
bool sendDevInfoRequest(HoymilesRadio* radio);
|
||||
bool sendSystemConfigParaRequest(HoymilesRadio* radio);
|
||||
bool sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type);
|
||||
|
||||
@ -42,7 +42,7 @@ public:
|
||||
uint8_t verifyAllFragments(CommandAbstract* cmd);
|
||||
|
||||
virtual bool sendStatsRequest(HoymilesRadio* radio) = 0;
|
||||
virtual bool sendAlarmLogRequest(HoymilesRadio* radio) = 0;
|
||||
virtual bool sendAlarmLogRequest(HoymilesRadio* radio, bool force = false) = 0;
|
||||
virtual bool sendDevInfoRequest(HoymilesRadio* radio) = 0;
|
||||
virtual bool sendSystemConfigParaRequest(HoymilesRadio* radio) = 0;
|
||||
virtual bool sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type) = 0;
|
||||
|
||||
@ -22,6 +22,16 @@ uint8_t AlarmLogParser::getEntryCount()
|
||||
return (_alarmLogLength - 2) / ALARM_LOG_ENTRY_SIZE;
|
||||
}
|
||||
|
||||
void AlarmLogParser::setLastAlarmRequestSuccess(LastCommandSuccess status)
|
||||
{
|
||||
_lastAlarmRequestSuccess = status;
|
||||
}
|
||||
|
||||
LastCommandSuccess AlarmLogParser::getLastAlarmRequestSuccess()
|
||||
{
|
||||
return _lastAlarmRequestSuccess;
|
||||
}
|
||||
|
||||
void AlarmLogParser::getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry)
|
||||
{
|
||||
uint8_t entryStartOffset = 2 + entryId * ALARM_LOG_ENTRY_SIZE;
|
||||
|
||||
@ -22,9 +22,14 @@ public:
|
||||
uint8_t getEntryCount();
|
||||
void getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry);
|
||||
|
||||
void setLastAlarmRequestSuccess(LastCommandSuccess status);
|
||||
LastCommandSuccess getLastAlarmRequestSuccess();
|
||||
|
||||
private:
|
||||
static int getTimezoneOffset();
|
||||
|
||||
uint8_t _payloadAlarmLog[ALARM_LOG_PAYLOAD_SIZE];
|
||||
uint8_t _alarmLogLength;
|
||||
|
||||
LastCommandSuccess _lastAlarmRequestSuccess = CMD_NOK; // Set to NOK to fetch at startup
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user