From 0d9b994c9289e67e289ab203217d855f7e4b7677 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 31 May 2022 19:29:05 +0200 Subject: [PATCH] Added function t retrieve a inverter just by a given payload fragment --- lib/Hoymiles/src/Hoymiles.cpp | 23 +++++++++++++++++++++++ lib/Hoymiles/src/Hoymiles.h | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index e372222e..0ba60175 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -53,6 +53,29 @@ std::shared_ptr HoymilesClass::getInverterBySerial(uint64_t se return nullptr; } +std::shared_ptr HoymilesClass::getInverterByFragment(fragment_t* fragment) +{ + if (fragment->len <= 4) { + return nullptr; + } + + std::shared_ptr 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); diff --git a/lib/Hoymiles/src/Hoymiles.h b/lib/Hoymiles/src/Hoymiles.h index cba4ddd2..0ed5823f 100644 --- a/lib/Hoymiles/src/Hoymiles.h +++ b/lib/Hoymiles/src/Hoymiles.h @@ -15,7 +15,7 @@ public: std::shared_ptr addInverter(const char* name, uint64_t serial); std::shared_ptr getInverterByPos(uint8_t pos); std::shared_ptr getInverterBySerial(uint64_t serial); - std::shared_ptr getInverterByTelegram(uint8_t buf[]); + std::shared_ptr getInverterByFragment(fragment_t* fragment); void removeInverterByPos(uint8_t pos); size_t getNumInverters();