Choosing the most efficient accesspoint now

This commit is contained in:
Moirtz Wagner 2026-02-26 17:39:02 +01:00
parent e9b307343d
commit f7a56bdc2c

View File

@ -251,14 +251,83 @@ bool checkPairingValid() {
} }
} }
uint32_t WiFi_scanNetworks(void ){
uint32_t _numNetworks = 0;
int8_t res;
res = WiFi.scanNetworks();
if(res == WIFI_SCAN_FAILED){
addLogMessage(F("NetworkScanFailed"));
}else if(res == WIFI_SCAN_RUNNING){
while(WiFi.scanComplete() == WIFI_SCAN_RUNNING){
delay(100);
}
_numNetworks = WiFi.scanComplete();
}else if(res >=0 ) {
_numNetworks = res;
}
return _numNetworks;
}
bool initWifi() { bool initWifi() {
uint32_t _numNetworks = 0;
// Connect to Wi-Fi // Connect to Wi-Fi
WifiSettings wifiSettings = settingsManager.getWifiSettings(); WifiSettings wifiSettings = settingsManager.getWifiSettings();
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE);
WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL);
WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN);
WiFi.persistent(false);
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
WiFi.disconnect(true); // delete old config
WiFi.begin();
delay(500); // 500ms seems to work in most cases, may depend on AP
WiFi.disconnect(true); // delete old config
WiFi.setHostname(wifiSettings.hostname.c_str()); //define hostname WiFi.setHostname(wifiSettings.hostname.c_str()); //define hostname
_numNetworks = WiFi_scanNetworks(); // scan in case this gets called before any scans
if (_numNetworks == 0) {
addLogMessage(F("No networks found"));
WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str()); WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str());
} else {
#ifdef WM_DEBUG_LEVEL
DEBUG_WM(n, F("networks found"));
#endif
int bestConnection = -1;
// Find best RSSI AP for given SSID
for (int i = 0; i < _numNetworks; i++) {
if (wifiSettings.ssid == WiFi.SSID(i)) {
addLogMessage(String(F("SSID ")) + wifiSettings.ssid + String(F(" found with RSSI: ")) +
String(WiFi.RSSI(i)) + String(F("(")) +
String(constrain((100.0 + WiFi.RSSI(i)) * 2, 0, 100)) +
String(F(" %) and BSSID: ")) + WiFi.BSSIDstr(i) +
String(F(" and channel: ")) + String(WiFi.channel(i)));
if (bestConnection == -1) {
bestConnection = i;
} else {
if (WiFi.RSSI(i) > WiFi.RSSI(bestConnection)) {
bestConnection = i;
}
}
}
}
if (bestConnection == -1) {
addLogMessage(String(F("No network found with SSID: "))+wifiSettings.ssid.c_str());
WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str());
} else {
addLogMessage(String(F("Trying to connect to SSID ")) + wifiSettings.ssid + String(F(" found with RSSI: ")) +
String(WiFi.RSSI(bestConnection)) + String(F("(")) +
String(constrain((100.0 + WiFi.RSSI(bestConnection)) * 2, 0, 100)) +
String(F(" %) and BSSID: ")) + WiFi.BSSIDstr(bestConnection) +
String(F(" and channel: ")) + String(WiFi.channel(bestConnection)));
WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str(), 0,
WiFi.BSSID(bestConnection));
}
}
//WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str());
int counter = 0; int counter = 0;
while (WiFi.status() != WL_CONNECTED) { while (WiFi.status() != WL_CONNECTED) {
delay(1000); delay(1000);