Ich rege mal Diskussion zu Punkt 2 auf der Liste geplanter Features an:
Das wäre schon praktisch für die Access-Point und Management Webseite. Habe hier schon mehrfach den WLAN-Namen mit falscher Groß-/Kleinschreibung eingetippt und konnte mich anschließend nicht verbinden. Eine Auswahlliste würde diesen Bedienfehler ausschließen.
Der WLAN-Scan sollte asynchron sein & nur angestoßen werden wenn die Liste in der Web-UI benötigt wird. Der Scan darf die Audio-Wiedergabe nicht stören (Webradio). Im Backend würde ich im Gegensatz zu RSSI-Signalstärke/Batteriestatus die Liste nicht über das Websocket übertragen sondern durch das Frontend über einen REST Endpunkt bei Bedarf anfordern. RSSI/Batteriestatus soll ja evt. mal mit einen Icon in Echtzeit aktualisiert werden.
Habe jetzt mal einen Test mit diesem Code-Snippet gemacht (Web.cpp):
//First request will return 0 results unless you start scan from somewhere else (loop/setup)
//Do not request more often than 3-5 seconds
wServer.on("/scan", HTTP_GET, [](AsyncWebServerRequest *request){
String json = "[";
int n = WiFi.scanComplete();
if(n == -2){
WiFi.scanNetworks(true);
} else if(n){
for (int i = 0; i < n; ++i){
if(i) json += ",";
json += "{";
json += "\"rssi\":"+String(WiFi.RSSI(i));
json += ",\"ssid\":\""+WiFi.SSID(i)+"\"";
json += ",\"bssid\":\""+WiFi.BSSIDstr(i)+"\"";
json += ",\"channel\":"+String(WiFi.channel(i));
json += ",\"secure\":"+String(WiFi.encryptionType(i));
json += "}";
}
WiFi.scanDelete();
if(WiFi.scanComplete() == -2){
WiFi.scanNetworks(true);
}
}
json += "]";
request->send(200, "application/json", json);
json = String();
});
Im Frontend müsste „/scan“ einmal beim Laden $(document).ready() aufgerufen werden, das stößt den ersten Scan an (Rückgabe ist zunächst leer „“ weil der Scan dauert & asynchron ist)
Das Eingabefeld müsste so ein „Text-Dropdown-Edit“ sein. Man kann den WLAN-Namen eintippen aber auch aufklappen. Beim Aufklappen wird ein asynchroner JavaScript XHR-Request an „/scan“ gesendet und beim Empfang das JSON geparst. Die Empfangstärke RSSI und Verschlüsselung könnte neben dem Namen als Symbol dargestellt werden. Eine automatische Aktualisierung könnte über einen Timer z.B. alle 10 Sekunden erfolgen. Eine ähnliche Umsetzung findet sich hier beim ESP32-Wifi-Manager, finde aber eine Aufklappliste schöner als die WLAN-Liste nur einfach davorzuklatschen:
Die Symbole sind da aber schön umgesetzt.
Was haltet Ihr von diesem Entwurf? Diskussionen gern hier.
Meine Javascript-Skills reichen jetzt nicht für die Umsetzung im Frontend, auch zeitlich ist es eng bei mir.
Bin bei der Frontend-Umsetzung also zunächst raus.
Aber evt. findet sich jemand der das angehen möchte? Das lange Pfingstwochenende beginnt ja jetzt