From 4031b71d7d37a72508952d51425e8824b2eecadc Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 3 Oct 2022 22:47:31 +0200 Subject: [PATCH] Implemented resend of PowerCommand --- lib/Hoymiles/src/Hoymiles.cpp | 6 ++++++ lib/Hoymiles/src/inverters/HM_Abstract.cpp | 7 +++++++ lib/Hoymiles/src/inverters/HM_Abstract.h | 3 +++ lib/Hoymiles/src/inverters/InverterAbstract.h | 1 + 4 files changed, 17 insertions(+) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index e19e46c..6107789 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -46,6 +46,12 @@ void HoymilesClass::loop() iv->resendActivePowerControlRequest(_radio.get()); } + // Set power status if required + if (iv->PowerCommand()->getLastPowerCommandSuccess() == CMD_NOK) { + Serial.println(F("Resend PowerCommand")); + iv->resendPowerControlRequest(_radio.get()); + } + // Fetch dev info (but first fetch stats) if (iv->Statistics()->getLastUpdate() > 0 && (iv->DevInfo()->getLastUpdateAll() == 0 || iv->DevInfo()->getLastUpdateSimple() == 0)) { Serial.println(F("Request device info")); diff --git a/lib/Hoymiles/src/inverters/HM_Abstract.cpp b/lib/Hoymiles/src/inverters/HM_Abstract.cpp index 4fc5dd5..079c864 100644 --- a/lib/Hoymiles/src/inverters/HM_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HM_Abstract.cpp @@ -115,10 +115,17 @@ bool HM_Abstract::resendActivePowerControlRequest(HoymilesRadio* radio) bool HM_Abstract::sendPowerControlRequest(HoymilesRadio* radio, bool turnOn) { + _powerState = turnOn; + PowerControlCommand* cmd = radio->enqueCommand(); cmd->setPowerOn(turnOn); cmd->setTargetAddress(serial()); PowerCommand()->setLastPowerCommandSuccess(CMD_PENDING); return true; +} + +bool HM_Abstract::resendPowerControlRequest(HoymilesRadio* radio) +{ + return sendPowerControlRequest(radio, _powerState); } \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/HM_Abstract.h b/lib/Hoymiles/src/inverters/HM_Abstract.h index 3a471fa..8cd0756 100644 --- a/lib/Hoymiles/src/inverters/HM_Abstract.h +++ b/lib/Hoymiles/src/inverters/HM_Abstract.h @@ -12,9 +12,12 @@ public: bool sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type); bool resendActivePowerControlRequest(HoymilesRadio* radio); bool sendPowerControlRequest(HoymilesRadio* radio, bool turnOn); + bool resendPowerControlRequest(HoymilesRadio* radio); private: uint8_t _lastAlarmLogCnt = 0; float _activePowerControlLimit = 0; PowerLimitControlType _activePowerControlType = PowerLimitControlType::AbsolutNonPersistent; + + bool _powerState = true; }; \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index b8add3f..4b9a259 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -53,6 +53,7 @@ public: virtual bool sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type) = 0; virtual bool resendActivePowerControlRequest(HoymilesRadio* radio) = 0; virtual bool sendPowerControlRequest(HoymilesRadio* radio, bool turnOn) = 0; + virtual bool resendPowerControlRequest(HoymilesRadio* radio) = 0; AlarmLogParser* EventLog(); DevInfoParser* DevInfo();