From ff1444b2bc20ab9061e08b7ea6d5aa465487ddf8 Mon Sep 17 00:00:00 2001 From: Rune Harlyk Date: Sat, 31 Jan 2026 21:05:37 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Makes=20wifi=20try=20to=20connect?= =?UTF-8?q?=20to=20latest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- esp32/include/settings/wifi_settings.h | 1 + esp32/include/wifi_service.h | 2 +- esp32/src/wifi_service.cpp | 24 ++++++++++++++++++++++-- platform_shared/api.proto | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/esp32/include/settings/wifi_settings.h b/esp32/include/settings/wifi_settings.h index d714be3..a52361c 100644 --- a/esp32/include/settings/wifi_settings.h +++ b/esp32/include/settings/wifi_settings.h @@ -42,6 +42,7 @@ inline WiFiSettings WiFiSettings_defaults() { strncpy(settings.hostname, FACTORY_WIFI_HOSTNAME, sizeof(settings.hostname) - 1); settings.priority_rssi = true; settings.wifi_networks_count = 0; + settings.selected_network = 0; if (strlen(FACTORY_WIFI_SSID) > 0) { settings.wifi_networks[0] = WiFiNetwork_defaults(); settings.wifi_networks_count = 1; diff --git a/esp32/include/wifi_service.h b/esp32/include/wifi_service.h index bbcb9cc..3f96da3 100644 --- a/esp32/include/wifi_service.h +++ b/esp32/include/wifi_service.h @@ -25,6 +25,7 @@ class WiFiService : public StatefulService { void loop(); void setupMDNS(const char *hostname); + void selectNetwork(uint32_t index); const char *getHostname() { return state().hostname; } @@ -43,7 +44,6 @@ class WiFiService : public StatefulService { void reconfigureWiFiConnection(); void manageSTA(); - void connectToWiFi(); void configureNetwork(WiFiNetwork &network); unsigned long _lastConnectionAttempt; diff --git a/esp32/src/wifi_service.cpp b/esp32/src/wifi_service.cpp index 751a0f8..04108d2 100644 --- a/esp32/src/wifi_service.cpp +++ b/esp32/src/wifi_service.cpp @@ -27,6 +27,14 @@ void WiFiService::begin() { _persistence.readFromFS(); _lastConnectionAttempt = 0; + + if (state().wifi_networks_count >= 1) { + WiFi.mode(WIFI_MODE_STA); + vTaskDelay(100 / portTICK_PERIOD_MS); + uint32_t idx = state().selected_network; + if (idx >= state().wifi_networks_count) idx = 0; + configureNetwork(state().wifi_networks[idx]); + } } void WiFiService::reconfigureWiFiConnection() { @@ -34,6 +42,16 @@ void WiFiService::reconfigureWiFiConnection() { if (WiFi.disconnect(true)) _stopping = true; } +void WiFiService::selectNetwork(uint32_t index) { + if (index >= state().wifi_networks_count) return; + updateWithoutPropagation([&](WiFiSettings &settings) { + settings.selected_network = index; + return StateUpdateResult::CHANGED; + }); + _persistence.writeToFS(); + reconfigureWiFiConnection(); +} + void WiFiService::loop() { EXECUTE_EVERY_N_MS(reconnectDelay, manageSTA()); } esp_err_t WiFiService::handleScan(httpd_req_t *request) { @@ -137,8 +155,10 @@ void WiFiService::manageSTA() { if (!attempted && state().wifi_networks_count > 0) { attempted = true; - ESP_LOGI(TAG, "Connecting to: %s", state().wifi_networks[0].ssid); - configureNetwork(state().wifi_networks[0]); + uint32_t idx = state().selected_network; + if (idx >= state().wifi_networks_count) idx = 0; + ESP_LOGI(TAG, "Connecting to: %s", state().wifi_networks[idx].ssid); + configureNetwork(state().wifi_networks[idx]); } } diff --git a/platform_shared/api.proto b/platform_shared/api.proto index a6ced33..51ca73a 100644 --- a/platform_shared/api.proto +++ b/platform_shared/api.proto @@ -82,6 +82,7 @@ message WifiSettings { string hostname = 1; bool priority_rssi = 2; repeated WifiNetwork wifi_networks = 3; // max 5 networks + uint32 selected_network = 4; } message WifiSettingsRequest {}