Ich möchte gerne die Anzahl der Clients wissen, die an einem ESP8266 als Accesspoint hängen. Genau genommen interessiert mich der Fall, dass KEIN Client angemeldet ist. Im Web findet man (für Adruino-IDE) die Befehle number_client = wifi_softap_get_station_num(); stat_info = wifi_softap_get_station_info(); Erster liefert die Zahl direkt, zweiter liefert eine Struct, deren Elemente man zählen könnte. Das Problem: Bei beiden wird leider nicht auf Null aktualisiert, wenn sich der letzte Client verabschiedet hat. Das Web ist voll von diesem ungelösten Problem ... Hat hier evtl. jemand eine funktionierende Idee? Klar könnte ich den überschaubaren IP-Adressraum auch durchpingen und zählen, aber das würde ich aus Performance-Gründen nur als letzte Möglichkeit in Betracht ziehen. Ausserdem versendet der AP UDP-Messages mit Sensordaten und ich kann derzeit nicht abschätzen, was eine ICMP-Lib da für Nebenwirkungen mit sich bringt.
Frank E. schrieb: > Klar könnte ich den überschaubaren IP-Adressraum auch durchpingen Du hast doch die IP Adresse in der Station Info. Vielleicht den RSSI Wert abfragen ?
Frank E. schrieb: > number_client = wifi_softap_get_station_num(); Merkwürdig. Ich benutze dafür WiFi.softAPgetStationNum() Und das funktioniert auch mit 0 Clients am Software Access Point. (Mit den folgenden Webservern:
1 | #ifdef ARDUINO_ARCH_ESP8266
|
2 | #include <ESP8266WebServer.h> |
3 | #endif
|
4 | #ifdef ARDUINO_ARCH_ESP32
|
5 | #include <WebServer.h> |
6 | #endif
|
)
Andree S. schrieb: > Frank E. schrieb: >> number_client = wifi_softap_get_station_num(); > > Merkwürdig. Ich benutze dafür > WiFi.softAPgetStationNum() > > Und das funktioniert auch mit 0 Clients am Software Access Point. > > (Mit den folgenden Webservern: > >
1 | > #ifdef ARDUINO_ARCH_ESP8266 |
2 | > #include <ESP8266WebServer.h> |
3 | > #endif |
4 | > #ifdef ARDUINO_ARCH_ESP32 |
5 | > #include <WebServer.h> |
6 | > #endif |
7 | >
|
> )
Die verwendeten Webserver sollten für den AP überhaupt keine Rolle
spielen. Völlig unterschiedliche Protokollschichten.
Wenn, dann spielt die Implentierung des AP selber eine Rolle. Nämlich
der Sachverhalt, ob er sich selber bei der "StationNum" mitzählt oder ob
er das halt nicht tut. Und falls er es tut, dann stellt sich vielleicht
noch die Frage, unter welchen Randbedingungen er das tut. Das alles
sollte dokumentiert sein. Falls nicht: Im Quelltext letztlich ist es
garantiert "dokumentiert".
Ob S. schrieb: > Das alles sollte dokumentiert sein. "sollte" haha. Es geht hier um Produkte von Espressif!
HTTP ist kein zustandsbehaftetes Protokoll. Pack Dir einfach den Zeitpunkt des letzten Zugriffs in eine Variable, wenn das länger als sagen wir eine Minute oder so her ist, ist mit hoher Wahrscheinlichkeit niemand mehr mit dem Server verbunden. Oder baue Deine Seiten so, daß sie irgend eine Art keep-alive-Signal zum Server senden solange sie verbunden bzw. offen sind.
Sherlock 🕵🏽♂️ schrieb: > Ob S. schrieb: >> Das alles sollte dokumentiert sein. > > "sollte" haha. Es geht hier um Produkte von Espressif! Recht ordentliche Doku gibt es inzwischen. Daraus läßt sich zumindest erst mal entnehmen, dass der AP selber nicht mitzählt und noch einige andere interessante Sachen: SYSTEM_EVENT_AP_STADISCONNECTED This event can happen in the following scenarios: The application calls esp_wifi_disconnect(), or esp_wifi_deauth_sta(), to manually disconnect the station. The Wi-Fi driver kicks off the station, e.g. because the SoftAP has not received any packets in the past five minutes, etc. The station kicks off the SoftAP. When this event happens, the event task will do nothing, but the application event callback needs to do something, e.g., close the socket which is related to this station, etc. Insbesondere der letzte Satz weist darauf hin, dass hier durchaus auch der Webserver eine Rolle spielen kann. Es sollte eigentlich nicht so sein, dass der überhaupt wissen muss, ob eine Verbindung über Kabel oder WiFi läuft. Aber bei der Espressif-Lösung muss er das offensichtlich doch wissen und aktiv entsprechend reagieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.