From 5265c6281f9877afca7537a56b7293b5b37f335d Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sun, 15 Dec 2024 13:23:45 +0100 Subject: [PATCH] Feature: Set Limit transfer only to "OK" if the queue does not contain any more commands --- lib/Hoymiles/src/HoymilesRadio.cpp | 5 +++++ lib/Hoymiles/src/HoymilesRadio.h | 1 + lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/Hoymiles/src/HoymilesRadio.cpp b/lib/Hoymiles/src/HoymilesRadio.cpp index 8111fb5d..172cfde6 100644 --- a/lib/Hoymiles/src/HoymilesRadio.cpp +++ b/lib/Hoymiles/src/HoymilesRadio.cpp @@ -161,6 +161,11 @@ void HoymilesRadio::removeCommands(InverterAbstract* inv) _commandQueue.removeAllEntriesForInverter(inv); } +uint8_t HoymilesRadio::countSimilarCommands(std::shared_ptr cmd) +{ + return _commandQueue.countSimilarCommands(cmd); +} + bool HoymilesRadio::isIdle() const { return !_busyFlag; diff --git a/lib/Hoymiles/src/HoymilesRadio.h b/lib/Hoymiles/src/HoymilesRadio.h index bd37f112..0e9b3364 100644 --- a/lib/Hoymiles/src/HoymilesRadio.h +++ b/lib/Hoymiles/src/HoymilesRadio.h @@ -24,6 +24,7 @@ public: bool isInitialized() const; void removeCommands(InverterAbstract* inv); + uint8_t countSimilarCommands(std::shared_ptr cmd); void enqueCommand(std::shared_ptr cmd) { diff --git a/lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp b/lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp index 20ed9d61..4ceb69ab 100644 --- a/lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp +++ b/lib/Hoymiles/src/commands/ActivePowerControlCommand.cpp @@ -87,7 +87,10 @@ bool ActivePowerControlCommand::handleResponse(const fragment_t fragment[], cons } } _inv->SystemConfigPara()->setLastUpdateCommand(millis()); - _inv->SystemConfigPara()->setLastLimitCommandSuccess(CMD_OK); + std::shared_ptr cmd(std::shared_ptr(), this); + if (_inv->getRadio()->countSimilarCommands(cmd) == 1) { + _inv->SystemConfigPara()->setLastLimitCommandSuccess(CMD_OK); + } return true; }