-
-
Notifications
You must be signed in to change notification settings - Fork 225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature request: connect always to AP with strongest RSSI #611
Comments
Teil 1 ist umgesetzt, Teil 2 ist heavy!
ich würde sagen sie muss weiterhin |
ja, die Zeile ist richtig, das ist so gewollt. In der nächsten Zeile wird auf Das einzige, was noch passieren kann ist, dass man sich am AP anmeldet, während eine STA Verbindung aufgebaut wird. Dann ist nur die Frage, wer schneller den Modus umschaltet, AP oder STA. Der Schnellere wird den anderen mit der Umschaltung 'rauskicken'. Aber ist das ein Problem? Eher nicht. Wenn doch: vor dem ersten reconnect Versuch auf |
@beegee3 ich dachte mDns wird u.a. im AP Modus benötigt um die Captive Portal Funktion des ESP bereit zu stellen |
@stefan123t den ersten Punkt würde ich auch so sehen, aber ein Test von @beegee3 hatte gezeigt, dass dies uU. garnicht nötig ist. |
@stefan123t @lumapu die Namensfestlegung erfolgt über Frage: braucht man |
Und im STA Modus braucht man mDns nicht ? Ich kann doch dann auch von zwei Geräten zugreifen bzw auch die Namensauflösung für MQTT Broker, NTP Server, etc. oder macht das die ESPWifi Bibliothek ohne mDns ? |
im STA Modus kommuniziert der ESP nur mit dem einen AP zu dem er verbunden ist (i.a. ein Router wie z.B. die Fritzbox), andere Geräte kennt er nicht! Dieser AP (nennen wir ihn Router) macht die ganze Kommunikationsarbeit, d.h. die Namensauflösung. Verbindungen mit anderen IP Adressen laufen i.d.R. auch über den Router und werden von diesem durchgereicht. Über die IP Adressen, die der ESP vom Router erhält, unterscheidet er die verschiedenen Geräte und kommuniziert so auch mit MQTT Broker und NTP Server. |
Hatte heute einen endlosen Wifi Scan, weil wohl kein 'Scan Complete' gemeldet wurde. Daher eine kleine Anpassung im Code oben. Ein Counter |
Ich wurde gerade unfreiwillig Tester dieser neuen Funktion. Weibilein hat den Repeater gezogen weil da unbedingt der Staubsauger jetzt rein muß 🤪 Funktioniert, er geh sofort zum nächstbesten AP den er findet 😎 aaaber, er geht nicht mehr zurück wenn ein noch besserer wieder da ist. Offenbar bleibt er solange hängen bis eben dieser vorher bessere auch wieder ausfällt. Kann man das noch optimieren ? |
Stop ! Kommando zurück, er macht es. Dauert halt nur ein paar Minuten 🤭 Ich habe nüx gesagt 🙉🙈🙊 |
@knickohr 🤔eigentlich bleibt die Verbindung, ein permanenter Scan um einen besseren AP zu finden (wie bei den Shellies) ist nicht vorgesehen (wo soll der Vorteil sein?). Vielleicht ist bei dir die Verbindung zum zweitbesten abgebrochen, nachdem der beste wieder vorhanden war (das 'Staubsauger Phänomen' 😁). |
Naja, -88dBm ist nicht gerade stark, er wird wohl wieder gewechselt haben 😉 Oder das Mesh der Fritz!Box regelt das. Keine Ahnung. |
@knickohr der Code ist doch noch garnicht in der dev drin 😳😉. @beegee3 ich bin auch noch am probieren mit deinem Code, da der Scan in AP Modus eher schlecht als Recht funktioniert. Ich denke ich bin schon auf einen guten Weg, gleichzeitig drängt sich mir das Gefühl auf, das wir noch ein paar Iterationen brauchen bis es wieder perfekt ist. |
@lumapu Scan in AP Modus??? Im WIFI_AP gibt's doch keinen Scan! |
Bitte ?! Dann macht das Fritz! Mesh da definitiv was 😲 Nun ja gut, waren Ausfälle, also mußte er ja wohin connecten. |
@beegee3 ja ich meinte natürlich den kombinierten Modus, deinen Code habe ich zuerst komplett übernommen und dann das testen angefangen 😊. |
|
hab oben die Wartezeitverkürzung nochmal angepasst, war nicht wie gewünscht. |
@beegee3 mein Problem ist die Zeile |
🤔 merkwürdig. Ich hatte beim Testen zunächst auch
|
aber der fliegt doch sofort raus oder? Weiß nicht ob das was verbessert. 🤔
|
stimmt, du hast Recht. Mein Fehler (war spät am Abend 🌕). Suchte nach Prozessen, die auf's Wifi zugreifen. Es ist nicht Ntp, sondern Mqtt (was ich testweise abgeklemmt hatte). Wird das im
Mit der v0.5.78 verstehe ich jetzt auch deine Scan Probleme. Da war wieder 'die Katze, die sich in den Schwanz beißt' 🐈:
keine Ahnung, warum das bei mir klappte (einziger Unterschied: ich hatte
|
@beegee3 für den ESP32 können wir es uns scheinbar einfacher machen mit folgenden zwei Zeilen:
|
@lumapu hatte ich auch gesehen, als ich nach einer Lösung gesucht habe. Für ESP32 die einfachste Methode. |
wir disktutieren in #652 weiter |
zunächst ein Hinweis, wenn man sich nach einem boot/reboot am ESP im AP Modus anmeldet:
anders als im STA Modus läuft weiterhin nur die
app::loopWifi
. Um aufapp::loopStandard
umzuschalten, ist inahoywifi::tickWifiLoop
nachWiFi.mode(WIFI_AP);
nochmAppWifiCb(true);
einzufügen. Dann läuft auch im AP Modus alles wie gewünscht (bis auf die Zeit, die man über Web Browser setzen muss, bevor man Live Werte erhält). Allerdings merkt das Programm nicht, wenn man die Verbindung zum AP trennt, da nach dem Callback Aufruf der Wifi Ticker nicht mehr läuft. Entweder man fängt entsprechende 'Station disconnected' Events ab, oder startet einfach den Wifi Ticker inapp::onWifi
:nun aber der eigentliche Vorschlag, angeregt durch @knickohr in #571.
Auch dazu ein paar Worte vorab:
wenn man mehrere APs mit derselben SSID hat, wird bisher nicht notwendig mit dem verbunden, der das stärkste RSSI hat, auch wenn die Auswahl bei den Settings in der Web Oberfläche das suggeriert.
Allerdings kann man gezielt nach allen APs mit derselben SSID scannen und erhält im Ergebnis u.a. deren BSSID (manchmal auch als MAC des AP bezeichnet). Diese kann man dann beim Verbindungsaufbau mit angeben und so den gewünschten AP auswählen.
Die Sache hat nur einen Haken: wenn der AP die Verbindung ablehnt (
CONNECTED
gefolgt vonDISCONNECTED
Event), weil z.B. der ESP nicht auf der Whitelist, oder in der Blacklist des APs steht, muss man den zweitbesten AP ausprobieren, usw. Daher werden die BSSIDs absteigend nach RSSI sortiert in eine Liste gepackt, die man abarbeitet, bis die Verbindung steht. Sollte keine Verbindung zustande kommen, fängt die Prozedur von vorne an (wie bisher auch: immer wieder neu versuchen).Mit dem Vorschlag hier kann man sich trotz Scan im AP Modus anmelden, ein laufender Scan wird dann abgebrochen. Wie bisher geht die Anmeldung allerdings nur bis zum ersten
CONNECTED
Event. Aber darauf kann ja einDISCONNECTED
folgen (s.o.)Besser wäre es, den AP Modus erst abzuschalten, wenn die Verbindung steht, d.h. beim 'GOT_IP' Event. Geht im Moment nicht, der DNSServer des AP Modus verhindert das. (Frage @lumapu braucht man
mDns
überhaupt? Ich hab' mal alle Vorkommen auskommentiert und sehe keinen Nachteil, alles läuft wie immer).Der Scanvorgang ist asynchron, analog zu dem (für die Web Oberfläche) schon vorhandenen, deshalb ist die RSSI Sortiermethode jetzt in einer eigenen Funktion (und
getAvailNetworks
minimal korrigiert). Ist der Scanvorgang fertig wird die Zeit bis zum Verbindungsversuch ggfs. auf 2 sec verkürzt. Hier muss man überlegen, ob ein anderer Wert sinnvoller ist. Sollte nicht zu sehr verkürzt werden, sonst hat man keine Chance mehr, in den AP Modus zu kommen. Dauert der Scanvorgang knapp mehr als 10 sec, würde man ohne Verkürzung weitere 10 sec warten.Die BSSID Liste ist einfach gehalten. BSSIDs werden immer als 6
uint_8t
geliefert. Die schiebt man einfach in die Liste und liest sie entsprechen im 6er Block wieder aus (FIFO). Sind noch einige Debug Ausgaben für BSSID enthalten, nach belieben lassen, ändern oder löschen 😄. Und wie immer: hab' nur einen ESP32. Der Aufruf vonWiFi.scanNetworks
ist beim ESP8266 anders, bitte testen!neu in ahoywifi.h
Anpassungen in ahoywifi.cpp
in
setupStation
die ZeilemStaConn = (WiFi.begin(...) != WL_CONNECTED) ? DISCONNECTED : CONNECTED;
löschen,dafür die Zeile
mBSSIDList.clear();
einfügen.Viel Spaß damit 😄
The text was updated successfully, but these errors were encountered: