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());
|
iv->sendStatsRequest(_radio.get());
|
||||||
|
|
||||||
// Fetch event log
|
// Fetch event log
|
||||||
iv->sendAlarmLogRequest(_radio.get());
|
bool force = iv->EventLog()->getLastAlarmRequestSuccess() == CMD_NOK;
|
||||||
|
iv->sendAlarmLogRequest(_radio.get(), force);
|
||||||
|
|
||||||
// Fetch limit
|
// 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()->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);
|
inverter->EventLog()->appendFragment(offs, fragment[i].fragment, fragment[i].len);
|
||||||
offs += (fragment[i].len);
|
offs += (fragment[i].len);
|
||||||
}
|
}
|
||||||
|
inverter->EventLog()->setLastAlarmRequestSuccess(CMD_OK);
|
||||||
inverter->EventLog()->setLastUpdate(millis());
|
inverter->EventLog()->setLastUpdate(millis());
|
||||||
return true;
|
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);
|
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 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio)
|
bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio, bool force)
|
||||||
{
|
{
|
||||||
struct tm timeinfo;
|
struct tm timeinfo;
|
||||||
if (!getLocalTime(&timeinfo, 0)) {
|
if (!getLocalTime(&timeinfo, 0)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Statistics()->hasChannelFieldValue(CH0, FLD_EVT_LOG)) {
|
if (!force) {
|
||||||
if ((uint8_t)Statistics()->getChannelFieldValue(CH0, FLD_EVT_LOG) == _lastAlarmLogCnt) {
|
if (Statistics()->hasChannelFieldValue(CH0, FLD_EVT_LOG)) {
|
||||||
return false;
|
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>();
|
AlarmDataCommand* cmd = radio->enqueCommand<AlarmDataCommand>();
|
||||||
cmd->setTime(now);
|
cmd->setTime(now);
|
||||||
cmd->setTargetAddress(serial());
|
cmd->setTargetAddress(serial());
|
||||||
|
EventLog()->setLastAlarmRequestSuccess(CMD_PENDING);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ class HM_Abstract : public InverterAbstract {
|
|||||||
public:
|
public:
|
||||||
explicit HM_Abstract(uint64_t serial);
|
explicit HM_Abstract(uint64_t serial);
|
||||||
bool sendStatsRequest(HoymilesRadio* radio);
|
bool sendStatsRequest(HoymilesRadio* radio);
|
||||||
bool sendAlarmLogRequest(HoymilesRadio* radio);
|
bool sendAlarmLogRequest(HoymilesRadio* radio, bool force = false);
|
||||||
bool sendDevInfoRequest(HoymilesRadio* radio);
|
bool sendDevInfoRequest(HoymilesRadio* radio);
|
||||||
bool sendSystemConfigParaRequest(HoymilesRadio* radio);
|
bool sendSystemConfigParaRequest(HoymilesRadio* radio);
|
||||||
bool sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type);
|
bool sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type);
|
||||||
|
|||||||
@ -42,7 +42,7 @@ public:
|
|||||||
uint8_t verifyAllFragments(CommandAbstract* cmd);
|
uint8_t verifyAllFragments(CommandAbstract* cmd);
|
||||||
|
|
||||||
virtual bool sendStatsRequest(HoymilesRadio* radio) = 0;
|
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 sendDevInfoRequest(HoymilesRadio* radio) = 0;
|
||||||
virtual bool sendSystemConfigParaRequest(HoymilesRadio* radio) = 0;
|
virtual bool sendSystemConfigParaRequest(HoymilesRadio* radio) = 0;
|
||||||
virtual bool sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type) = 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;
|
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)
|
void AlarmLogParser::getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry)
|
||||||
{
|
{
|
||||||
uint8_t entryStartOffset = 2 + entryId * ALARM_LOG_ENTRY_SIZE;
|
uint8_t entryStartOffset = 2 + entryId * ALARM_LOG_ENTRY_SIZE;
|
||||||
|
|||||||
@ -22,9 +22,14 @@ public:
|
|||||||
uint8_t getEntryCount();
|
uint8_t getEntryCount();
|
||||||
void getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry);
|
void getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry);
|
||||||
|
|
||||||
|
void setLastAlarmRequestSuccess(LastCommandSuccess status);
|
||||||
|
LastCommandSuccess getLastAlarmRequestSuccess();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static int getTimezoneOffset();
|
static int getTimezoneOffset();
|
||||||
|
|
||||||
uint8_t _payloadAlarmLog[ALARM_LOG_PAYLOAD_SIZE];
|
uint8_t _payloadAlarmLog[ALARM_LOG_PAYLOAD_SIZE];
|
||||||
uint8_t _alarmLogLength;
|
uint8_t _alarmLogLength;
|
||||||
|
|
||||||
|
LastCommandSuccess _lastAlarmRequestSuccess = CMD_NOK; // Set to NOK to fetch at startup
|
||||||
};
|
};
|
||||||
Loading…
Reference in New Issue
Block a user