diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index 01866e9b..87b37cce 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -70,17 +70,43 @@ void HoymilesClass::loop() iv->sendChangeChannelRequest(); } - iv->sendStatsRequest(); + if (Utils::getTimeAvailable()) { + // Fetch statistics + iv->sendStatsRequest(); - // Fetch event log - const bool force = iv->EventLog()->getLastAlarmRequestSuccess() == CMD_NOK; - iv->sendAlarmLogRequest(force); + // Fetch event log + const bool force = iv->EventLog()->getLastAlarmRequestSuccess() == CMD_NOK; + iv->sendAlarmLogRequest(force); - // Fetch limit - if (((millis() - iv->SystemConfigPara()->getLastUpdateRequest() > HOY_SYSTEM_CONFIG_PARA_POLL_INTERVAL) - && (millis() - iv->SystemConfigPara()->getLastUpdateCommand() > HOY_SYSTEM_CONFIG_PARA_POLL_MIN_DURATION))) { - _messageOutput->println("Request SystemConfigPara"); - iv->sendSystemConfigParaRequest(); + // Fetch limit + if (((millis() - iv->SystemConfigPara()->getLastUpdateRequest() > HOY_SYSTEM_CONFIG_PARA_POLL_INTERVAL) + && (millis() - iv->SystemConfigPara()->getLastUpdateCommand() > HOY_SYSTEM_CONFIG_PARA_POLL_MIN_DURATION))) { + _messageOutput->println("Request SystemConfigPara"); + iv->sendSystemConfigParaRequest(); + } + + // Fetch grid profile + if (iv->Statistics()->getLastUpdate() > 0 && (iv->GridProfile()->getLastUpdate() == 0 || !iv->GridProfile()->containsValidData())) { + iv->sendGridOnProFileParaRequest(); + } + + // Fetch dev info (but first fetch stats) + if (iv->Statistics()->getLastUpdate() > 0) { + const bool invalidDevInfo = !iv->DevInfo()->containsValidData() + && iv->DevInfo()->getLastUpdateAll() > 0 + && iv->DevInfo()->getLastUpdateSimple() > 0; + + if (invalidDevInfo) { + _messageOutput->println("DevInfo: No Valid Data"); + } + + if ((iv->DevInfo()->getLastUpdateAll() == 0) + || (iv->DevInfo()->getLastUpdateSimple() == 0) + || invalidDevInfo) { + _messageOutput->println("Request device info"); + iv->sendDevInfoRequest(); + } + } } // Set limit if required @@ -95,29 +121,6 @@ void HoymilesClass::loop() iv->resendPowerControlRequest(); } - // Fetch dev info (but first fetch stats) - if (iv->Statistics()->getLastUpdate() > 0) { - const bool invalidDevInfo = !iv->DevInfo()->containsValidData() - && iv->DevInfo()->getLastUpdateAll() > 0 - && iv->DevInfo()->getLastUpdateSimple() > 0; - - if (invalidDevInfo) { - _messageOutput->println("DevInfo: No Valid Data"); - } - - if ((iv->DevInfo()->getLastUpdateAll() == 0) - || (iv->DevInfo()->getLastUpdateSimple() == 0) - || invalidDevInfo) { - _messageOutput->println("Request device info"); - iv->sendDevInfoRequest(); - } - } - - // Fetch grid profile - if (iv->Statistics()->getLastUpdate() > 0 && (iv->GridProfile()->getLastUpdate() == 0 || !iv->GridProfile()->containsValidData())) { - iv->sendGridOnProFileParaRequest(); - } - _messageOutput->printf("Queue size - NRF: %" PRId32 " CMT: %" PRId32 "\r\n", _radioNrf->getQueueSize(), _radioCmt->getQueueSize()); _lastPoll = millis(); } diff --git a/lib/Hoymiles/src/Utils.cpp b/lib/Hoymiles/src/Utils.cpp index c47e40ba..0e60ee84 100644 --- a/lib/Hoymiles/src/Utils.cpp +++ b/lib/Hoymiles/src/Utils.cpp @@ -3,6 +3,7 @@ * Copyright (C) 2023-2025 Thomas Basler and others */ #include "Utils.h" +#include #include uint8_t Utils::getWeekDay() @@ -11,3 +12,9 @@ uint8_t Utils::getWeekDay() struct tm tm = *localtime(&now); return tm.tm_mday; } + +bool Utils::getTimeAvailable() +{ + struct tm timeinfo; + return getLocalTime(&timeinfo, 5); +} diff --git a/lib/Hoymiles/src/Utils.h b/lib/Hoymiles/src/Utils.h index 157dd75c..93fead19 100644 --- a/lib/Hoymiles/src/Utils.h +++ b/lib/Hoymiles/src/Utils.h @@ -6,4 +6,5 @@ class Utils { public: static uint8_t getWeekDay(); -}; \ No newline at end of file + static bool getTimeAvailable(); +}; diff --git a/lib/Hoymiles/src/inverters/HM_Abstract.cpp b/lib/Hoymiles/src/inverters/HM_Abstract.cpp index d58324da..0f5d66c0 100644 --- a/lib/Hoymiles/src/inverters/HM_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HM_Abstract.cpp @@ -24,11 +24,6 @@ bool HM_Abstract::sendStatsRequest() return false; } - struct tm timeinfo; - if (!getLocalTime(&timeinfo, 5)) { - return false; - } - time_t now; time(&now); @@ -45,11 +40,6 @@ bool HM_Abstract::sendAlarmLogRequest(const bool force) return false; } - struct tm timeinfo; - if (!getLocalTime(&timeinfo, 5)) { - return false; - } - if (!force) { if (Statistics()->hasChannelFieldValue(TYPE_INV, CH0, FLD_EVT_LOG)) { if (static_cast(Statistics()->getChannelFieldValue(TYPE_INV, CH0, FLD_EVT_LOG) == _lastAlarmLogCnt)) { @@ -77,11 +67,6 @@ bool HM_Abstract::sendDevInfoRequest() return false; } - struct tm timeinfo; - if (!getLocalTime(&timeinfo, 5)) { - return false; - } - time_t now; time(&now); @@ -102,11 +87,6 @@ bool HM_Abstract::sendSystemConfigParaRequest() return false; } - struct tm timeinfo; - if (!getLocalTime(&timeinfo, 5)) { - return false; - } - time_t now; time(&now); @@ -205,11 +185,6 @@ bool HM_Abstract::sendGridOnProFileParaRequest() return false; } - struct tm timeinfo; - if (!getLocalTime(&timeinfo, 5)) { - return false; - } - time_t now; time(&now);