diff --git a/lib/Hoymiles/src/inverters/HM_Abstract.cpp b/lib/Hoymiles/src/inverters/HM_Abstract.cpp index 63db5998..a07dec93 100644 --- a/lib/Hoymiles/src/inverters/HM_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HM_Abstract.cpp @@ -17,6 +17,10 @@ HM_Abstract::HM_Abstract(uint64_t serial) bool HM_Abstract::sendStatsRequest(HoymilesRadio* radio) { + if (!getEnablePolling()) { + return false; + } + struct tm timeinfo; if (!getLocalTime(&timeinfo, 5)) { return false; @@ -34,6 +38,10 @@ bool HM_Abstract::sendStatsRequest(HoymilesRadio* radio) bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio, bool force) { + if (!getEnablePolling()) { + return false; + } + struct tm timeinfo; if (!getLocalTime(&timeinfo, 5)) { return false; @@ -62,6 +70,10 @@ bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio, bool force) bool HM_Abstract::sendDevInfoRequest(HoymilesRadio* radio) { + if (!getEnablePolling()) { + return false; + } + struct tm timeinfo; if (!getLocalTime(&timeinfo, 5)) { return false; @@ -83,6 +95,10 @@ bool HM_Abstract::sendDevInfoRequest(HoymilesRadio* radio) bool HM_Abstract::sendSystemConfigParaRequest(HoymilesRadio* radio) { + if (!getEnablePolling()) { + return false; + } + struct tm timeinfo; if (!getLocalTime(&timeinfo, 5)) { return false; @@ -101,6 +117,10 @@ bool HM_Abstract::sendSystemConfigParaRequest(HoymilesRadio* radio) bool HM_Abstract::sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type) { + if (!getEnableCommands()) { + return false; + } + if (type == PowerLimitControlType::RelativNonPersistent || type == PowerLimitControlType::RelativPersistent) { limit = min(100, limit); } @@ -123,6 +143,10 @@ bool HM_Abstract::resendActivePowerControlRequest(HoymilesRadio* radio) bool HM_Abstract::sendPowerControlRequest(HoymilesRadio* radio, bool turnOn) { + if (!getEnableCommands()) { + return false; + } + if (turnOn) { _powerState = 1; } else { @@ -139,6 +163,10 @@ bool HM_Abstract::sendPowerControlRequest(HoymilesRadio* radio, bool turnOn) bool HM_Abstract::sendRestartControlRequest(HoymilesRadio* radio) { + if (!getEnableCommands()) { + return false; + } + _powerState = 2; PowerControlCommand* cmd = radio->enqueCommand(); diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.cpp b/lib/Hoymiles/src/inverters/InverterAbstract.cpp index c9798473..8029995b 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.cpp +++ b/lib/Hoymiles/src/inverters/InverterAbstract.cpp @@ -75,6 +75,26 @@ bool InverterAbstract::isReachable() return Statistics()->getRxFailureCount() <= MAX_ONLINE_FAILURE_COUNT; } +void InverterAbstract::setEnablePolling(bool enabled) +{ + _enablePolling = enabled; +} + +bool InverterAbstract::getEnablePolling() +{ + return _enablePolling; +} + +void InverterAbstract::setEnableCommands(bool enabled) +{ + _enableCommands = enabled; +} + +bool InverterAbstract::getEnableCommands() +{ + return _enableCommands; +} + AlarmLogParser* InverterAbstract::EventLog() { return _alarmLogParser.get(); diff --git a/lib/Hoymiles/src/inverters/InverterAbstract.h b/lib/Hoymiles/src/inverters/InverterAbstract.h index 6334c648..079bf7f4 100644 --- a/lib/Hoymiles/src/inverters/InverterAbstract.h +++ b/lib/Hoymiles/src/inverters/InverterAbstract.h @@ -44,6 +44,12 @@ public: bool isProducing(); bool isReachable(); + void setEnablePolling(bool enabled); + bool getEnablePolling(); + + void setEnableCommands(bool enabled); + bool getEnableCommands(); + void clearRxFragmentBuffer(); void addRxFragment(uint8_t fragment[], uint8_t len); uint8_t verifyAllFragments(CommandAbstract* cmd); @@ -73,6 +79,9 @@ private: uint8_t _rxFragmentLastPacketId = 0; uint8_t _rxFragmentRetransmitCnt = 0; + bool _enablePolling = true; + bool _enableCommands = true; + std::unique_ptr _alarmLogParser; std::unique_ptr _devInfoParser; std::unique_ptr _powerCommandParser;