From 4219842088bf04ae5ffc45ed29c3627c78052bda Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 16 Feb 2022 19:36:17 +0100 Subject: [PATCH] fetch devices one by one --- src/emsesp.cpp | 27 +++++++++++++++++++++++---- src/emsesp.h | 1 + src/telegram.h | 4 ++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/emsesp.cpp b/src/emsesp.cpp index fe60f9825..9a9c53ddd 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -1413,6 +1413,28 @@ void EMSESP::start() { webServer.begin(); // start the web server } +// fetch devices one by one +void EMSESP::scheduled_fetch_values() { + static uint8_t no = 0; + if (no || (uuid::get_uptime() - last_fetch_ > EMS_FETCH_FREQUENCY)) { + if (!no) { + last_fetch_ = uuid::get_uptime(); + no = 1; + } + if (txservice_.tx_queue_empty()) { + uint8_t i = 0; + for (const auto & emsdevice : emsdevices) { + if (emsdevice && ++i >= no) { + emsdevice->fetch_values(); + no++; + return; + } + } + no = 0; + } + } +} + // main loop calling all services void EMSESP::loop() { esp8266React.loop(); // web services @@ -1429,10 +1451,7 @@ void EMSESP::loop() { mqtt_.loop(); // sends out anything in the MQTT queue // force a query on the EMS devices to fetch latest data at a set interval (1 min) - if ((uuid::get_uptime() - last_fetch_ > EMS_FETCH_FREQUENCY)) { - last_fetch_ = uuid::get_uptime(); - fetch_device_values(); - } + scheduled_fetch_values(); } console_.loop(); // telnet/serial console diff --git a/src/emsesp.h b/src/emsesp.h index f9fc2fc31..3395824d5 100644 --- a/src/emsesp.h +++ b/src/emsesp.h @@ -206,6 +206,7 @@ class EMSESP { static void fetch_device_values(const uint8_t device_id = 0); static void fetch_device_values_type(const uint8_t device_type); static bool valid_device(const uint8_t device_id); + static void scheduled_fetch_values(); static bool add_device(const uint8_t device_id, const uint8_t product_id, const char * version, const uint8_t brand); static void scan_devices(); diff --git a/src/telegram.h b/src/telegram.h index 5ce46c5ad..e75f53008 100644 --- a/src/telegram.h +++ b/src/telegram.h @@ -399,6 +399,10 @@ class TxService : public EMSbus { return tx_telegrams_; } + bool tx_queue_empty() { + return tx_telegrams_.size() == 0; + } + #if defined(EMSESP_DEBUG) static constexpr uint8_t MAXIMUM_TX_RETRIES = 0; // when compiled with EMSESP_DEBUG don't retry #else