dashboard: prevent overlapping status polls
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
static const char *DASHBOARD_VERSION = "0.0.10-api-timing";
|
static const char *DASHBOARD_VERSION = "0.0.11-no-overlap-polling";
|
||||||
|
|
||||||
// Update these if your Cargo ESP AP credentials are different.
|
// Update these if your Cargo ESP AP credentials are different.
|
||||||
static const char *CARGO_WIFI_SSID = "OverlandController";
|
static const char *CARGO_WIFI_SSID = "OverlandController";
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ static unsigned long last_wifi_attempt_ms = 0;
|
|||||||
static unsigned long last_wifi_label_update_ms = 0;
|
static unsigned long last_wifi_label_update_ms = 0;
|
||||||
static unsigned long last_status_poll_ms = 0;
|
static unsigned long last_status_poll_ms = 0;
|
||||||
static unsigned long last_metadata_poll_ms = 0;
|
static unsigned long last_metadata_poll_ms = 0;
|
||||||
|
static bool api_request_in_progress = false;
|
||||||
|
static bool fast_status_refresh_requested = false;
|
||||||
|
|
||||||
static String last_battery_text;
|
static String last_battery_text;
|
||||||
static String last_temps_text;
|
static String last_temps_text;
|
||||||
@@ -44,9 +46,9 @@ static String on_off(bool value)
|
|||||||
return value ? "ON" : "OFF";
|
return value ? "ON" : "OFF";
|
||||||
}
|
}
|
||||||
|
|
||||||
static void force_status_poll_now()
|
static void request_fast_status_refresh()
|
||||||
{
|
{
|
||||||
last_status_poll_ms = 0;
|
fast_status_refresh_requested = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool post_relay_state(const String &relay_id, bool state)
|
static bool post_relay_state(const String &relay_id, bool state)
|
||||||
@@ -122,8 +124,7 @@ static void relay_button_event_cb(lv_event_t *event)
|
|||||||
optimistic_text += "\nRefreshing status...";
|
optimistic_text += "\nRefreshing status...";
|
||||||
set_label_text_if_changed(system_label, last_system_text, optimistic_text);
|
set_label_text_if_changed(system_label, last_system_text, optimistic_text);
|
||||||
|
|
||||||
force_status_poll_now();
|
request_fast_status_refresh();
|
||||||
poll_status_api();
|
|
||||||
} else {
|
} else {
|
||||||
relay_states[index] = previous_state;
|
relay_states[index] = previous_state;
|
||||||
update_relay_buttons();
|
update_relay_buttons();
|
||||||
@@ -463,11 +464,19 @@ static void update_wifi_label()
|
|||||||
|
|
||||||
static bool fetch_status_fields(const char *url, const char *label)
|
static bool fetch_status_fields(const char *url, const char *label)
|
||||||
{
|
{
|
||||||
|
if (api_request_in_progress) {
|
||||||
|
Serial.print("Skipping ");
|
||||||
|
Serial.print(label);
|
||||||
|
Serial.println(": request already in progress");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (WiFi.status() != WL_CONNECTED) {
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
set_label_text_if_changed(system_label, last_system_text, "API: waiting for WiFi");
|
set_label_text_if_changed(system_label, last_system_text, "API: waiting for WiFi");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
api_request_in_progress = true;
|
||||||
unsigned long start_ms = millis();
|
unsigned long start_ms = millis();
|
||||||
|
|
||||||
Serial.print("GET ");
|
Serial.print("GET ");
|
||||||
@@ -521,6 +530,7 @@ static bool fetch_status_fields(const char *url, const char *label)
|
|||||||
Serial.println(body.length());
|
Serial.println(body.length());
|
||||||
|
|
||||||
http.end();
|
http.end();
|
||||||
|
api_request_in_progress = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -547,6 +557,7 @@ static bool fetch_status_fields(const char *url, const char *label)
|
|||||||
set_label_text_if_changed(system_label, last_system_text, system);
|
set_label_text_if_changed(system_label, last_system_text, system);
|
||||||
|
|
||||||
http.end();
|
http.end();
|
||||||
|
api_request_in_progress = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -557,7 +568,8 @@ static void poll_status_api()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (millis() - last_status_poll_ms >= 2000) {
|
if (fast_status_refresh_requested || millis() - last_status_poll_ms >= 2000) {
|
||||||
|
fast_status_refresh_requested = false;
|
||||||
last_status_poll_ms = millis();
|
last_status_poll_ms = millis();
|
||||||
fetch_status_fields(CARGO_API_FAST_STATUS_URL, "fast status");
|
fetch_status_fields(CARGO_API_FAST_STATUS_URL, "fast status");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user