diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 5c9b23d025..bd18cc6f1b 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -381,19 +381,16 @@ WiFiAP WiFiComponent::build_wifi_ap_from_selected_() const { params.set_bssid(scan.get_bssid()); params.set_channel(scan.get_channel()); // hidden defaults to false, no need to set explicitly - } else if (config->get_hidden()) { - // For hidden networks, use config SSID but clear BSSID and channel + } else { + // No scan data - use config SSID + params.set_ssid(config->get_ssid()); + const bool hidden = config->get_hidden(); + params.set_hidden(hidden); + // Hidden network - clear BSSID and channel even if set in config // There might be multiple hidden networks with same SSID but we can't know which is correct // Rely on probe-req with just SSID. Empty channel triggers ALL_CHANNEL_SCAN. - params.set_ssid(config->get_ssid()); - params.set_hidden(true); - params.set_bssid(optional{}); - params.set_channel(optional{}); - } else { - // No scan data, visible network - use all config values - params.set_ssid(config->get_ssid()); - params.set_bssid(config->get_bssid()); - params.set_channel(config->get_channel()); + params.set_bssid(hidden ? optional{} : config->get_bssid()); + params.set_channel(hidden ? optional{} : config->get_channel()); } return params;