From 188805462743252ad51a265fc9d0a530e24ee1be Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sun, 31 Mar 2024 12:42:00 +0200 Subject: [PATCH] Fix: Re-Request grid profile parameters if received data are invalid / to short Fixes #1874 --- lib/Hoymiles/src/Hoymiles.cpp | 2 +- lib/Hoymiles/src/parser/GridProfileParser.cpp | 7 ++++++- lib/Hoymiles/src/parser/GridProfileParser.h | 4 +++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index eda3500..b145859 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -114,7 +114,7 @@ void HoymilesClass::loop() } // Fetch grid profile - if (iv->Statistics()->getLastUpdate() > 0 && iv->GridProfile()->getLastUpdate() == 0) { + if (iv->Statistics()->getLastUpdate() > 0 && (iv->GridProfile()->getLastUpdate() == 0 || !iv->GridProfile()->containsValidData())) { iv->sendGridOnProFileParaRequest(); } diff --git a/lib/Hoymiles/src/parser/GridProfileParser.cpp b/lib/Hoymiles/src/parser/GridProfileParser.cpp index 37cb1d4..a7b912a 100644 --- a/lib/Hoymiles/src/parser/GridProfileParser.cpp +++ b/lib/Hoymiles/src/parser/GridProfileParser.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2023 Thomas Basler and others + * Copyright (C) 2023 - 2024 Thomas Basler and others */ #include "GridProfileParser.h" #include "../Hoymiles.h" @@ -446,6 +446,11 @@ std::list GridProfileParser::getProfile() const return l; } +bool GridProfileParser::containsValidData() const +{ + return _gridProfileLength > 6; +} + uint8_t GridProfileParser::getSectionSize(const uint8_t section_id, const uint8_t section_version) { uint8_t count = 0; diff --git a/lib/Hoymiles/src/parser/GridProfileParser.h b/lib/Hoymiles/src/parser/GridProfileParser.h index 1be12e1..7afdfb8 100644 --- a/lib/Hoymiles/src/parser/GridProfileParser.h +++ b/lib/Hoymiles/src/parser/GridProfileParser.h @@ -43,6 +43,8 @@ public: std::list getProfile() const; + bool containsValidData() const; + private: static uint8_t getSectionSize(const uint8_t section_id, const uint8_t section_version); static int16_t getSectionStart(const uint8_t section_id, const uint8_t section_version); @@ -52,4 +54,4 @@ private: static const std::array _profileTypes; static const std::array _profileValues; -}; \ No newline at end of file +};