1
0
mirror of https://github.com/esphome/esphome.git synced 2025-11-16 06:45:48 +00:00
This commit is contained in:
J. Nick Koston
2025-11-06 13:55:08 -06:00
parent 4439b45fba
commit ef680933dc
2 changed files with 12 additions and 11 deletions

View File

@@ -174,7 +174,8 @@ void WiFiComponent::loop() {
// All APs tried, fall back to scanning
this->start_scanning();
} else {
// NOTE: This check may not make sense here as it could interfere with AP cycling
// Safety check: Ensure selected_sta_index_ is valid before retrying
// (should already be set by retry_connect(), but check for robustness)
this->reset_selected_ap_to_first_if_invalid_();
this->start_connecting_to_selected_(false);
}
@@ -708,11 +709,6 @@ void WiFiComponent::check_scanning_finished() {
return;
}
#ifdef USE_WIFI_FAST_CONNECT
// Scan found a network, reset exhausted flag to allow fast connect to work next time
this->fast_connect_exhausted_ = false;
#endif
yield();
this->start_connecting_to_selected_(false);
@@ -923,11 +919,13 @@ bool WiFiComponent::load_fast_connect_settings_() {
void WiFiComponent::save_fast_connect_settings_() {
bssid_t bssid = wifi_bssid();
uint8_t channel = get_wifi_channel();
int8_t ap_index = this->selected_sta_index_ >= 0 ? this->selected_sta_index_ : 0;
// Skip save if settings haven't changed (compare with current scan result if available)
if (!this->scan_result_.empty()) {
const WiFiScanResult &scan = this->scan_result_[0];
if (bssid == scan.get_bssid() && channel == scan.get_channel()) {
// Skip save if settings haven't changed (compare with previously saved settings to reduce flash wear)
SavedWifiFastConnectSettings previous_save{};
if (this->fast_connect_pref_.load(&previous_save)) {
if (memcmp(previous_save.bssid, bssid.data(), 6) == 0 && previous_save.channel == channel &&
previous_save.ap_index == ap_index) {
return; // No change, nothing to save
}
}
@@ -935,7 +933,7 @@ void WiFiComponent::save_fast_connect_settings_() {
SavedWifiFastConnectSettings fast_connect_save{};
memcpy(fast_connect_save.bssid, bssid.data(), 6);
fast_connect_save.channel = channel;
fast_connect_save.ap_index = this->selected_sta_index_ >= 0 ? this->selected_sta_index_ : 0;
fast_connect_save.ap_index = ap_index;
this->fast_connect_pref_.save(&fast_connect_save);

View File

@@ -218,6 +218,8 @@ class WiFiComponent : public Component {
WiFiComponent();
void set_sta(const WiFiAP &ap);
// Returns a copy of the currently selected AP configuration
// Note: This copies the 88-byte WiFiAP. Only used by WiFiConfigureAction for state save/restore.
WiFiAP get_sta();
void init_sta(size_t count);
void add_sta(const WiFiAP &ap);
@@ -471,6 +473,7 @@ class WiFiComponent : public Component {
uint8_t num_retried_{0};
// Index into sta_ array for the currently selected AP configuration (-1 = none selected)
// Used to access password, manual_ip, priority, EAP settings, and hidden flag
// int8_t limits to 127 APs which should be sufficient for all practical use cases
int8_t selected_sta_index_{-1};
#if USE_NETWORK_IPV6
uint8_t num_ipv6_addresses_{0};