From 20b833b4ee048a5b52381f480de6ef7d9a688d22 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 15 Aug 2024 07:56:24 +0200 Subject: [PATCH] scheduler/mqtt running assync with psram, sync without psram --- lib/framework/MqttSettingsService.cpp | 20 +++++++++++++++----- src/emsesp.cpp | 4 ++++ src/system.cpp | 1 - src/system.h | 4 ++++ src/web/WebSchedulerService.cpp | 4 +++- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/framework/MqttSettingsService.cpp b/lib/framework/MqttSettingsService.cpp index e8082bc64..15a235f11 100644 --- a/lib/framework/MqttSettingsService.cpp +++ b/lib/framework/MqttSettingsService.cpp @@ -41,8 +41,12 @@ void MqttSettingsService::startClient() { } #ifndef TASMOTA_SDK if (_state.enableTLS) { - isSecure = true; - _mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO); + isSecure = true; + if (emsesp::EMSESP::system_.PSram() > 0) { + _mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::YES); + } else { + _mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO); + } if (_state.rootCA == "insecure") { static_cast(_mqttClient)->setInsecure(); } else { @@ -59,8 +63,12 @@ void MqttSettingsService::startClient() { return; } #endif - isSecure = false; - _mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::NO); + isSecure = false; + if (emsesp::EMSESP::system_.PSram() > 0) { + _mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::YES); + } else { + _mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::NO); + } static_cast(_mqttClient)->onConnect([this](bool sessionPresent) { onMqttConnect(sessionPresent); }); static_cast(_mqttClient)->onDisconnect([this](espMqttClientTypes::DisconnectReason reason) { onMqttDisconnect(reason); }); static_cast(_mqttClient) @@ -76,7 +84,9 @@ void MqttSettingsService::loop() { _disconnectedAt = configureMqtt() ? 0 : uuid::get_uptime(); _reconfigureMqtt = false; } - _mqttClient->loop(); + if (emsesp::EMSESP::system_.PSram() == 0) { + _mqttClient->loop(); + } } bool MqttSettingsService::isEnabled() { diff --git a/src/emsesp.cpp b/src/emsesp.cpp index b3e77fbeb..ea5cb092b 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -1538,6 +1538,7 @@ EMSESP::EMSESP() // start all the core services // the services must be loaded in the correct order void EMSESP::start() { + system_.PSram(ESP.getPsramSize()); // don't need shell if running unit tests #ifndef EMSESP_UNITY // Serial console's shell @@ -1669,6 +1670,9 @@ void EMSESP::loop() { publish_all_loop(); // with HA messages in parts to avoid flooding the mqtt queue mqtt_.loop(); // sends out anything in the MQTT queue webModulesService.loop(); // loop through the external library modules + if (system_.PSram() == 0) { + webSchedulerService.loop(); + } // force a query on the EMS devices to fetch latest data at a set interval (1 min) scheduled_fetch_values(); diff --git a/src/system.cpp b/src/system.cpp index 11ca28e8f..78f33534a 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -485,7 +485,6 @@ void System::start() { // get current memory values fstotal_ = LittleFS.totalBytes() / 1024; // read only once, it takes 500 ms to read - psram_ = ESP.getPsramSize() / 1024; appused_ = ESP.getSketchSize() / 1024; appfree_ = esp_ota_get_running_partition()->size / 1024 - appused_; refreshHeapMem(); // refresh free heap and max alloc heap diff --git a/src/system.h b/src/system.h index 41bab0531..18b4e1563 100644 --- a/src/system.h +++ b/src/system.h @@ -246,6 +246,10 @@ class System { uint32_t FStotal() { return fstotal_; } + + void PSram(uint32_t psram) { + psram_ = psram / 1024; + } uint32_t PSram() { return psram_; } diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 0b60ad849..1c6090fd9 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -39,7 +39,9 @@ void WebSchedulerService::begin() { snprintf(topic, sizeof(topic), "%s/#", F_(scheduler)); Mqtt::subscribe(EMSdevice::DeviceType::SCHEDULER, topic, nullptr); // use empty function callback #ifndef EMSESP_STANDALONE - xTaskCreate((TaskFunction_t)scheduler_task, "scheduler_task", 4096, NULL, 1, NULL); + if (EMSESP::system_.PSram()) { + xTaskCreate((TaskFunction_t)scheduler_task, "scheduler_task", 4096, NULL, 1, NULL); + } #endif }