From 0441bbbe722c750860195b088380f703ba3a93b0 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 25 Apr 2023 19:24:56 +0200 Subject: [PATCH] Fix: Queue consumed whole memory on inverter timeout When the poll interval was e.g. 1sec it was possible that the queue ran full and consumed the whole memory. Now new entries are only added to the queue automatically if the queue is empty. This issue also caused a lot of "DTU command failed" messages. --- lib/Hoymiles/src/Hoymiles.cpp | 2 +- lib/Hoymiles/src/HoymilesRadio.cpp | 7 ++++++- lib/Hoymiles/src/HoymilesRadio.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index 4ae3223d..3a9999ff 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -54,7 +54,7 @@ void HoymilesClass::loop() } } - if (iv != nullptr && iv->getRadio()->isInitialized() && iv->getRadio()->isIdle()) { + if (iv != nullptr && iv->getRadio()->isInitialized() && iv->getRadio()->isQueueEmpty()) { _messageOutput->print("Fetch inverter: "); _messageOutput->println(iv->serial(), HEX); diff --git a/lib/Hoymiles/src/HoymilesRadio.cpp b/lib/Hoymiles/src/HoymilesRadio.cpp index 117d45e9..8faf1727 100644 --- a/lib/Hoymiles/src/HoymilesRadio.cpp +++ b/lib/Hoymiles/src/HoymilesRadio.cpp @@ -69,4 +69,9 @@ bool HoymilesRadio::isInitialized() bool HoymilesRadio::isIdle() { return !_busyFlag; -} \ No newline at end of file +} + +bool HoymilesRadio::isQueueEmpty() +{ + return _commandQueue.size() == 0; +} diff --git a/lib/Hoymiles/src/HoymilesRadio.h b/lib/Hoymiles/src/HoymilesRadio.h index 056b61c3..2ee2ad25 100644 --- a/lib/Hoymiles/src/HoymilesRadio.h +++ b/lib/Hoymiles/src/HoymilesRadio.h @@ -12,6 +12,7 @@ public: virtual void setDtuSerial(uint64_t serial); bool isIdle(); + bool isQueueEmpty(); bool isInitialized(); template