Fix: Ignore incomplete SystemConfigPara packages
Some inverters seem to transmit too less and incomplete data. These packages will be ignored now.
This commit is contained in:
parent
0260af9ada
commit
8023b6620a
@ -3,6 +3,7 @@
|
||||
* Copyright (C) 2022 Thomas Basler and others
|
||||
*/
|
||||
#include "SystemConfigParaCommand.h"
|
||||
#include "Hoymiles.h"
|
||||
#include "inverters/InverterAbstract.h"
|
||||
|
||||
SystemConfigParaCommand::SystemConfigParaCommand(uint64_t target_address, uint64_t router_address, time_t time)
|
||||
@ -25,6 +26,18 @@ bool SystemConfigParaCommand::handleResponse(InverterAbstract* inverter, fragmen
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if at least all required bytes are received
|
||||
// In case of low power in the inverter it occours that some incomplete fragments
|
||||
// with a valid CRC are received.
|
||||
uint8_t fragmentsSize = getTotalFragmentSize(fragment, max_fragment_id);
|
||||
uint8_t expectedSize = inverter->SystemConfigPara()->getExpectedByteCount();
|
||||
if (fragmentsSize < expectedSize) {
|
||||
Hoymiles.getMessageOutput()->printf("ERROR in %s: Received fragment size: %d, min expected size: %d\r\n",
|
||||
getCommandName().c_str(), fragmentsSize, expectedSize);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Move all fragments into target buffer
|
||||
uint8_t offs = 0;
|
||||
inverter->SystemConfigPara()->beginAppendFragment();
|
||||
|
||||
@ -85,3 +85,8 @@ void SystemConfigParaParser::setLastUpdateRequest(uint32_t lastUpdate)
|
||||
_lastUpdateRequest = lastUpdate;
|
||||
setLastUpdate(lastUpdate);
|
||||
}
|
||||
|
||||
uint8_t SystemConfigParaParser::getExpectedByteCount()
|
||||
{
|
||||
return SYSTEM_CONFIG_PARA_SIZE;
|
||||
}
|
||||
|
||||
@ -23,6 +23,9 @@ public:
|
||||
uint32_t getLastUpdateRequest();
|
||||
void setLastUpdateRequest(uint32_t lastUpdate);
|
||||
|
||||
// Returns 1 based amount of expected bytes of data
|
||||
uint8_t getExpectedByteCount();
|
||||
|
||||
private:
|
||||
uint8_t _payload[SYSTEM_CONFIG_PARA_SIZE];
|
||||
uint8_t _payloadLength;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user