diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index db739c72..5b0d29ef 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -56,6 +56,7 @@ std::shared_ptr HoymilesClass::addInverter(const char* name, u if (i) { i->setName(name); + i->init(); _inverters.push_back(std::move(i)); return _inverters.back(); } diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.cpp b/lib/Hoymiles/src/inverters/InverterAbstract.cpp index 8c7c93e2..7e708914 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.cpp +++ b/lib/Hoymiles/src/inverters/InverterAbstract.cpp @@ -9,6 +9,15 @@ InverterAbstract::InverterAbstract(uint64_t serial) _statisticsParser.reset(new StatisticsParser()); } +void InverterAbstract::init() +{ + // This has to be done here because: + // Not possible in constructor --> virtual function + // Not possible in verifyAllFragments --> Because no data if nothing is ever received + // It has to be executed because otherwise the getChannelCount method in stats always returns 0 + _statisticsParser.get()->setByteAssignment(getByteAssignment(), getAssignmentCount()); +} + uint64_t InverterAbstract::serial() { return _serial.u64; @@ -45,12 +54,6 @@ void InverterAbstract::clearRxFragmentBuffer() _rxFragmentMaxPacketId = 0; _rxFragmentLastPacketId = 0; _rxFragmentRetransmitCnt = 0; - - // This has to be done here because: - // Not possible in constructor --> virtual function - // Not possible in verifyAllFragments --> Because no data if nothing is ever received - // It has to be executed because otherwise the getChannelCount method in stats always returns 0 - _statisticsParser.get()->setByteAssignment(getByteAssignment(), getAssignmentCount()); } void InverterAbstract::addRxFragment(uint8_t fragment[], uint8_t len) diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index 357ba4d0..64f8aef2 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -22,6 +22,7 @@ enum { class InverterAbstract { public: InverterAbstract(uint64_t serial); + void init(); uint64_t serial(); void setName(const char* name); const char* name();