diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index e19e46c2..6107789d 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 4fc5dd52..079c8642 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 3a471faa..8cd07562 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 b8add3f7..4b9a2593 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();