ESP8266 im AP-Modus: Anzahl der Clients

OP (Firma: Q3) #7877661
Lesenswert?
• ▲
▼

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.

#7877685
Lesenswert?
• ▲
▼

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

)

(Firma: 1984now) #7877877
Lesenswert?
• ▲
▼

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".

(Firma: Funkenflug Industries) #7877890
Lesenswert?
• ▲
▼

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.

(Firma: 1984now) #7878076
Lesenswert?
• ▲
▼

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:

1
    The application calls esp_wifi_disconnect(), or esp_wifi_deauth_sta(), to manually disconnect the station.
2
    The Wi-Fi driver kicks off the station, e.g. because the SoftAP has not received any packets in the past five minutes, etc.
3
    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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.