WLAN Aufklappliste

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 :wink:

5 „Gefällt mir“

Wow, sehr geil! Das steht ja schon ganz lange quasi auf meiner ToDo-Liste und ich bin die Tage quasi wieder drauf gestoßen: Für meinen (neuen) Zweirichtungszähler habe ich mir einen IR-Lesekopf besorgt und der wird mit einem ESP32 ausgelesen - auf dem ESP32 läuft das allseits bekannte Tasmota (bei mir mit SML-Support).
Das ist schon nice. Ich hatte das ja lange nicht auf dem Schirm, da der Name meines WLANs so kurz ist, dass ich gar nicht auf die Idee kam, dass das doof sein kann, wenn man das von Hand eingeben muss.

Ich habe hier eine Nixie-Uhr stehen, da läuft genau dieser auf einem ESP8266.
Der ist wirklich optisch schick und funktioniert zuverlässig.

Ich mag die Optik und würde es befürworten.

Ich kann hier leider keine echten Support liefern, da ich das Projekt nicht umgesetzt habe, da ist mein Wissen zu dünn.

Ich finde die Idee sehr gut. Ich hatte mich auch schon damit befasst, aber nur konzeptuell.

Zum Backend: Ich hätte mir hier mehr Möglichkeiten vom ESPAsyncWebServer gewünscht, auch tatsächlich erst asynchron nach ein paar Sekunden zu antworten. Es gibt die Möglichkeit, mit Callbacks zu arbeiten, aber da muss die Größe voher bekannt sein.

Auch würde ich aufpassen, über die API nicht unnötig viele Scans auszulösen. Vielleicht das Ergebnis ein paar Sekunden cachen oder so.

Zum frontend: Hier laufen wir schon wieder in die nervige Situation, im AP kein bootstrap zu haben. Das heißt wir brauchen zwei Implementierungen für das Frontend, wobei die mit Bootstrap einfacher und schöner machbar ist. Aber die im AP ist eigentlich viel wichtiger. Ich hatte ein ähnliches Problem für die Auflistung der gespeicherten Netzwerke, die letztlich im AP nicht verfügbar ist.

Hi, gehört hier evtl. nicht hin , aber wenn ihr gerade an WiFi schraubt … könnt ihr das umsetzen. Ich kann es leider nicht .
VG

Caching ist glaube ich gar nicht notwendig. Sobald das JSON da ist wird es ins HTML geschrieben. Damit ist das dann quasi schon gecacht. Beim nächsten Ergebnis wird die HTML-Liste einfach überschrieben.

OK im Frontend ohne Bootstrap wäre so ein Dropdown-Edit sicher schwieriger umzusetzen. Evt. dann doch eine Liste über/unter dem SSID-Eingabefeld?

Aber die im AP ist eigentlich viel wichtiger.

Genau, für die Ersteinrichtung. Sehe aber nicht warum der obige Code für AP-Modus fehlschlagen könnte.

Was haltet Ihr davon?

AP

5 „Gefällt mir“

Sehr cool! Mir gefällt es!
Die Liste poppt dann einfach auf, sobald der Scan durch ist?

Ja genau!
Evt. kann man den ersten Scan schon anstossen wenn der Access-Point gestartet wird. Dann ist die Liste schon da beim ersten Laden da.

Wenn ein WLAN auf der Liste angeklickt wird übertrage ich auch die BSSID (Mac-Adresse des Routers) als „hidden field“. Damit wäre es auch möglich zwei gleiche WLAN’s (Mesh/Repeater Netzwerk) zu unterscheiden und sich z.B. mit dem stärkeren Netz zu verbinden.

4 „Gefällt mir“

Das mit dem Scan gleich beim Hochfahren finde ich eine sehr gute Idee! Dann ist die Liste gleich schon beim ersten öffnen da und es verschiebt sich nichts mehr :slight_smile: :+1:

1 „Gefällt mir“

Sehr gut. Ich würde noch vermeiden, dass die Eingabefelder herumspringen. Zum Beispiel die Scan-Ergebnisse ganz unten oder in einem div mit fester Größe.

2 „Gefällt mir“

Durch das Anstossen eines Scans nach AP Start ist die Liste bereits da, ich kann kein Zuppeln mehr feststellen:

Wolt Ihr mal drüberschauen?

2 „Gefällt mir“

Sieht gut aus! Und funktioniert :slight_smile:
Habe es gerade mal getestet und würde das so lassen.
Ich würde das „TODO“ im Code mit dem Speichern der BSSID noch entfernen. Es macht glaub echt keinen Sinn die BSSID zu speichern, da das schon beim nächsten Einschalten nicht mehr der stärkste Punkt sein könnte und wenn ein Router mal offline ist er sich ja dann gar nicht mehr verbinden könnte.
In dem Zuge könnte man noch überlegen, ob man eventuell jede SSID nur einmal anzeigt, aber eigentlich gefällt es mir auch auf diese Art.
Wennn es nach mir geht lieber die Option den Scan immer zu aktivieren und wirklich direkt nach dem Scan mit der BSSID zum stärksten Punkt zu verbinden.
Oder halt der Vorschlag nach dem Verbinden einen Scan im Hintergrund auszuführen und bei gleichher SSID und besserem Signal gleich am Anfang nochmal neu zu verbinden.
Zumindest ist das meine Meinung dazu :slight_smile:

1 „Gefällt mir“

@Joe91 Danke fürs Testen, du bist ein echter Early Bird!

Ja, ich bin mir nicht sicher, ob man die BSSID (Mac-Adresse des Routers) speichern & später verwenden kann.

Aber man könnte dann zumindest einen AP-Wechsel im Log anzeigen.

Also ich bin im AP-Modus, speichere das ausgewählte WLAN, die BSSID wird im NVS gespeichert. Beim normalen Start im Stationsmodus (mit Scan) gibt es ein stärkeres WLAN mit gleichem Namen. Dann kann man die vorher gespeicherte BSSID vergleichen und den AP-Wechsel z.B. im Log anzeigen „Wechsel zu stärkerem WLAN ‚XY‘“.

Deshalb ein Todo Eintrag, aber ich hänge da auch nicht dran :wink:
Übrigens wundere ich mich, warum die AP-Seite auf Englisch startet, das war schon mal anders. Wer hat das kaputt gemacht, kriegen wir das wieder auf Deutsch?

1 „Gefällt mir“

Das mit der Sprache ist mir gar nicht aufgefallen, aber das nehme ich glaub ganz generell nicht mehr wahr ^^.
Muss ich mir nächste Woche mal anschauen. Spricht aber von meiner Seite aus nichts dagegen das so in den Dev zu bringen. Hatte die Änderungen von dir seither auf dem Produktivsystem und da gab es keine Probleme (auch zusammen mit dem BSSID-Commit von mir).

Wie oben angesprochen: Ich habe die Übertragung der „BSSID“ aus dem PR entfernt. Ist für das Speichern eines WLANs nicht notwendig.

1 „Gefällt mir“

Die WLAN Auswahl ist jetzt für die Accesspoint-Seite verfügbar (DEV-Branch):

Start auf Deutsch wäre einfach wenn wir die „Fallback“ Sprache auf „de“ ändern, gibt es dazu eine Meinung?

Was noch fehlt ist ein Dropdown-Edit für die Managementseite. Hier wäre eine sichtbare Liste wohl eher unschön. Gibt es hier Bootstrap Experten die sowas umsetzen möchten?

2 „Gefällt mir“

Also tatsächlich ist es so, dass ich ja viel Arbeit/Zeit in Mehrsprachlichkeit gesteckt habe, aber unterm Strich wird das Ganze nahezu ausschließlich von Nutzern verwendet, die Deutsch können. Ich hatte demletzt mal eine Bestellung aus Saudi-Arabien dabei; das war das erste Mal, dass mich jmd. nicht auf Deutsch angeschrieben hat.

Also von der Nutzerbasis wäre es gerechtfertigt, dass per Default auf de zu ändern. Allerdings weiß ich nicht, ob das den Einzelnen, die kein Deutsch können, dann Probleme bereitet.

Hab’s eben mal getestet und finde es sehr cool, dass man das jetzt so auswählen kann :+1:

2 „Gefällt mir“

Nachdem so viel an WLAN passiert ist möchte ich ein Problem ansprechen was ich während meines Aufenthaltes im letzen Dezember/Januar in Toronto hatte.
Die 2 Boxen meiner Enkel haben seit Dezember 2021 dort gelaufen. Ich habe dann im Januar 2023 ein Update auf die damals verfügbare Version vom 30.12.2022 gemacht. Dabei trat folgendes Problem auf und ich habe es, auch aus Zeitgründen wegen Abreise, nicht gefixt bekommen :
Die Boxen haben per DHCP vom Router keine IP-Adresse bekommen, was mit der Version vom 3.12.2022 noch funktioniert hat. Der Router ist ein Bell Home Hub 3000. Die Boxen laufen jetzt mit fester IP.
Ich habe mit Wireshark beide Protokolle, funktioniert/funktioniert nicht, hier hinterlegt. Vielleicht kann mal jemand drüberschauen ob man erkennt woran das gelegen hat. Ich habe Wireshark während meiner Tätigkeit als Techniker oft benutzt. Das ist aber >14 Jahre her und ich weiß nix mehr. Ich werde im September wieder nach Toronto reisen und könnte es dann nochmals testen. Der Router hat auch schon lange kein Update erhalten. Ob da was möglich ist weiß ich allerdings nicht.