diff --git a/lib/Hoymiles/src/HoymilesRadio.cpp b/lib/Hoymiles/src/HoymilesRadio.cpp index 8111fb5..172cfde 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 bd37f11..0e9b336 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 20ed9d6..4ceb69a 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; }