diff --git a/lib/Hoymiles/src/inverters/HM_Abstract.cpp b/lib/Hoymiles/src/inverters/HM_Abstract.cpp index 6520500..0b7c255 100644 --- a/lib/Hoymiles/src/inverters/HM_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HM_Abstract.cpp @@ -37,5 +37,6 @@ bool HM_Abstract::sendStatsRequest(HoymilesRadio* radio) clearRxFragmentBuffer(); radio->enqueTransaction(&payload); + setLastRequest(RequestType::Stats); return true; } \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.cpp b/lib/Hoymiles/src/inverters/InverterAbstract.cpp index dd61076..195308f 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.cpp +++ b/lib/Hoymiles/src/inverters/InverterAbstract.cpp @@ -104,15 +104,16 @@ uint8_t InverterAbstract::verifyAllFragments() return FRAGMENT_CRC_ERROR; } - // todo: hier muss noch ein check bzgl. packet type usw rein (ist ja nicht alles statistik) - // Move all fragments into target buffer - memset(_payloadStats, 0, MAX_RF_FRAGMENT_COUNT * MAX_RF_PAYLOAD_SIZE); - uint8_t offs = 0; - for (uint8_t i = 0; i < _rxFragmentMaxPacketId; i++) { - memcpy(&_payloadStats[offs], _rxFragmentBuffer[i].fragment, _rxFragmentBuffer[i].len); - offs += (_rxFragmentBuffer[i].len); + if (getLastRequest() == RequestType::Stats) { + // Move all fragments into target buffer + memset(_payloadStats, 0, MAX_RF_FRAGMENT_COUNT * MAX_RF_PAYLOAD_SIZE); + uint8_t offs = 0; + for (uint8_t i = 0; i < _rxFragmentMaxPacketId; i++) { + memcpy(&_payloadStats[offs], _rxFragmentBuffer[i].fragment, _rxFragmentBuffer[i].len); + offs += (_rxFragmentBuffer[i].len); + } + _lastStatsUpdate = millis(); } - _lastStatsUpdate = millis(); return FRAGMENT_OK; } @@ -122,6 +123,16 @@ uint32_t InverterAbstract::getLastStatsUpdate() return _lastStatsUpdate; } +void InverterAbstract::setLastRequest(RequestType request) +{ + _lastRequest = request; +} + +RequestType InverterAbstract::getLastRequest() +{ + return _lastRequest; +} + uint8_t InverterAbstract::getChannelCount() { const byteAssign_t* b = getByteAssignment(); diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index 023c567..e16c74f 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -66,6 +66,10 @@ enum { FRAGMENT_OK = 0 }; +enum class RequestType { + Stats +}; + typedef struct { uint8_t fieldId; // field id uint8_t unitId; // uint id @@ -130,6 +134,10 @@ public: virtual bool sendStatsRequest(HoymilesRadio* radio) = 0; uint32_t getLastStatsUpdate(); +protected: + void setLastRequest(RequestType request); + RequestType getLastRequest(); + private: serial_u _serial; char _name[MAX_NAME_LENGTH]; @@ -141,4 +149,6 @@ private: uint8_t _payloadStats[MAX_RF_FRAGMENT_COUNT * MAX_RF_PAYLOAD_SIZE]; uint32_t _lastStatsUpdate = 0; uint16_t _chanMaxPower[CH4]; + + RequestType _lastRequest; }; \ No newline at end of file