Hoymiles Lib: Added flags to inverter to enable/disable polling and commands to the inverter

This commit is contained in:
Thomas Basler 2023-02-18 15:51:46 +01:00
parent 6a6165e8c5
commit 7da782c4ef
3 changed files with 57 additions and 0 deletions

View File

@ -17,6 +17,10 @@ HM_Abstract::HM_Abstract(uint64_t serial)
bool HM_Abstract::sendStatsRequest(HoymilesRadio* radio) bool HM_Abstract::sendStatsRequest(HoymilesRadio* radio)
{ {
if (!getEnablePolling()) {
return false;
}
struct tm timeinfo; struct tm timeinfo;
if (!getLocalTime(&timeinfo, 5)) { if (!getLocalTime(&timeinfo, 5)) {
return false; return false;
@ -34,6 +38,10 @@ bool HM_Abstract::sendStatsRequest(HoymilesRadio* radio)
bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio, bool force) bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio, bool force)
{ {
if (!getEnablePolling()) {
return false;
}
struct tm timeinfo; struct tm timeinfo;
if (!getLocalTime(&timeinfo, 5)) { if (!getLocalTime(&timeinfo, 5)) {
return false; return false;
@ -62,6 +70,10 @@ bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio, bool force)
bool HM_Abstract::sendDevInfoRequest(HoymilesRadio* radio) bool HM_Abstract::sendDevInfoRequest(HoymilesRadio* radio)
{ {
if (!getEnablePolling()) {
return false;
}
struct tm timeinfo; struct tm timeinfo;
if (!getLocalTime(&timeinfo, 5)) { if (!getLocalTime(&timeinfo, 5)) {
return false; return false;
@ -83,6 +95,10 @@ bool HM_Abstract::sendDevInfoRequest(HoymilesRadio* radio)
bool HM_Abstract::sendSystemConfigParaRequest(HoymilesRadio* radio) bool HM_Abstract::sendSystemConfigParaRequest(HoymilesRadio* radio)
{ {
if (!getEnablePolling()) {
return false;
}
struct tm timeinfo; struct tm timeinfo;
if (!getLocalTime(&timeinfo, 5)) { if (!getLocalTime(&timeinfo, 5)) {
return false; return false;
@ -101,6 +117,10 @@ bool HM_Abstract::sendSystemConfigParaRequest(HoymilesRadio* radio)
bool HM_Abstract::sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type) bool HM_Abstract::sendActivePowerControlRequest(HoymilesRadio* radio, float limit, PowerLimitControlType type)
{ {
if (!getEnableCommands()) {
return false;
}
if (type == PowerLimitControlType::RelativNonPersistent || type == PowerLimitControlType::RelativPersistent) { if (type == PowerLimitControlType::RelativNonPersistent || type == PowerLimitControlType::RelativPersistent) {
limit = min<float>(100, limit); limit = min<float>(100, limit);
} }
@ -123,6 +143,10 @@ bool HM_Abstract::resendActivePowerControlRequest(HoymilesRadio* radio)
bool HM_Abstract::sendPowerControlRequest(HoymilesRadio* radio, bool turnOn) bool HM_Abstract::sendPowerControlRequest(HoymilesRadio* radio, bool turnOn)
{ {
if (!getEnableCommands()) {
return false;
}
if (turnOn) { if (turnOn) {
_powerState = 1; _powerState = 1;
} else { } else {
@ -139,6 +163,10 @@ bool HM_Abstract::sendPowerControlRequest(HoymilesRadio* radio, bool turnOn)
bool HM_Abstract::sendRestartControlRequest(HoymilesRadio* radio) bool HM_Abstract::sendRestartControlRequest(HoymilesRadio* radio)
{ {
if (!getEnableCommands()) {
return false;
}
_powerState = 2; _powerState = 2;
PowerControlCommand* cmd = radio->enqueCommand<PowerControlCommand>(); PowerControlCommand* cmd = radio->enqueCommand<PowerControlCommand>();

View File

@ -75,6 +75,26 @@ bool InverterAbstract::isReachable()
return Statistics()->getRxFailureCount() <= MAX_ONLINE_FAILURE_COUNT; 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() AlarmLogParser* InverterAbstract::EventLog()
{ {
return _alarmLogParser.get(); return _alarmLogParser.get();

View File

@ -44,6 +44,12 @@ public:
bool isProducing(); bool isProducing();
bool isReachable(); bool isReachable();
void setEnablePolling(bool enabled);
bool getEnablePolling();
void setEnableCommands(bool enabled);
bool getEnableCommands();
void clearRxFragmentBuffer(); void clearRxFragmentBuffer();
void addRxFragment(uint8_t fragment[], uint8_t len); void addRxFragment(uint8_t fragment[], uint8_t len);
uint8_t verifyAllFragments(CommandAbstract* cmd); uint8_t verifyAllFragments(CommandAbstract* cmd);
@ -73,6 +79,9 @@ private:
uint8_t _rxFragmentLastPacketId = 0; uint8_t _rxFragmentLastPacketId = 0;
uint8_t _rxFragmentRetransmitCnt = 0; uint8_t _rxFragmentRetransmitCnt = 0;
bool _enablePolling = true;
bool _enableCommands = true;
std::unique_ptr<AlarmLogParser> _alarmLogParser; std::unique_ptr<AlarmLogParser> _alarmLogParser;
std::unique_ptr<DevInfoParser> _devInfoParser; std::unique_ptr<DevInfoParser> _devInfoParser;
std::unique_ptr<PowerCommandParser> _powerCommandParser; std::unique_ptr<PowerCommandParser> _powerCommandParser;