Added function t retrieve a inverter just by a given payload fragment

This commit is contained in:
Thomas Basler 2022-05-31 19:29:05 +02:00
parent b597e907de
commit 0d9b994c92
2 changed files with 24 additions and 1 deletions

View File

@ -53,6 +53,29 @@ std::shared_ptr<InverterAbstract> HoymilesClass::getInverterBySerial(uint64_t se
return nullptr;
}
std::shared_ptr<InverterAbstract> HoymilesClass::getInverterByFragment(fragment_t* fragment)
{
if (fragment->len <= 4) {
return nullptr;
}
std::shared_ptr<InverterAbstract> inv;
for (uint8_t i = 0; i < _inverters.size(); i++) {
inv = _inverters[i];
serial_u p;
p.u64 = inv->serial();
if ((p.b[3] == fragment->fragment[1])
&& (p.b[2] == fragment->fragment[2])
&& (p.b[1] == fragment->fragment[3])
&& (p.b[0] == fragment->fragment[4])) {
return inv;
}
}
return nullptr;
}
void HoymilesClass::removeInverterByPos(uint8_t pos)
{
_inverters.erase(_inverters.begin() + pos);

View File

@ -15,7 +15,7 @@ public:
std::shared_ptr<InverterAbstract> addInverter(const char* name, uint64_t serial);
std::shared_ptr<InverterAbstract> getInverterByPos(uint8_t pos);
std::shared_ptr<InverterAbstract> getInverterBySerial(uint64_t serial);
std::shared_ptr<InverterAbstract> getInverterByTelegram(uint8_t buf[]);
std::shared_ptr<InverterAbstract> getInverterByFragment(fragment_t* fragment);
void removeInverterByPos(uint8_t pos);
size_t getNumInverters();