Wifi zeigt connected - ist es aber nicht und RSSI bleibt konstant niedrig

Mein ESP8266 (CO2 Sensor mit MQTT) zeigt, nachdem er eine Weile funktioniert hat, konstant status=3 (also connected) und rssi -94. Natürlich war das Wifi an dem Standort (zum Test) schlecht. Aber daran ändert sich auch nichts, wenn ich das Board wieder näher an den Router bringe.
Warum zeigt der Sensor connected, misst aber gleichzeitig die Feldstärke nicht mehr richtig? Ich hab jetzt keine Ahung was schief gegangen ist und wie ich das abfangen soll. Jemand ne Idee?

Hintergrund:
Versuche meinem CO2 Sensor mehr Stabilität zu geben. Er soll grundsätzlich auch ohne Wifi funktionieren. Aber nach einer Weile ohne WiFi-Verbindung soll er einen setup() machen um neu zu starten (und ggf WiFi zu connecten). Das aber nicht dauernd, falls mal der Router aus ist - weil das so sehr auf die Batterie geht.

Dazu messen ich WiFi.RSSI() und WiFi.status().
Wenn status != 3 (connected) oder rssi > 0 ist (normalerweise so -50...-94) dann zählt ein counter hoch und nach einer bestimmten Anzahl wird das Programm mit setup() neu gestartet. So möchte ich Stromverbrauch und Zuverlässigkeit in Einklang bringen.

Hallo
Hast du mal in deinem Router nachgesehen ob der ESP in deinem Netz angemeldet ist.

Dann könntest du mal ein Mini Testprogramm nutzen , nur im wifi anmelden , um zu sehen ob das klappt. Am Besten nutzt du ein Beispiel dazu.

Also nur WiFi.begin(xxx,yyyy)
Und dann die lokale Ip anzeigen , sowas in der Art

Nachtrag
Ich hatte da schon mal Probleme wenn der Router automatisch den Kanal wechselt.Das habe ich in der Fritzbox abgeschaltet . Die Abfrage isconnected scheint beim Verlust der Verbindung nicht immer zuverlässig zu sein . Der ESP bietet dazu aber bessere Ereignisse. Da musst du mal in der doku zur Core nachsehen . fips hat da auch ein Beispiel zu.

Es ist so, dass es zunächst funktioniert. Ich sehe die Daten und alles ok. In der Fritzbox habe ich es m.E. trotzdem nicht akiv gesehen. Kanalwechsel ist off bei mir.
Es geht also mehr um Stabilität, in diesem (Test)Fall um auch wirklich schwierige Empfangsbedingungen. Trotzdem sollte doch entweder ein disconnect stehen oder der rssi zuverlässig sein. Oder welches Kriterium kann ich sonst noch heranziehen?
Was gäbe notfalls mqttClient.xxx (xxx=beginMessage, print, endMassage) als Rückgabewert noch her?

Hallo,
Ok verstehe , die Verbindung wird aufgebaut , geht aber irgendwann verloren, und der ESP bekommst es nicht mit.

schau mal hier
https://arduino-esp8266.readthedocs.io/en/3.1.2/esp8266wifi/generic-class.html

und
https://arduino-esp8266.readthedocs.io/en/3.1.2/esp8266wifi/generic-examples.html#event-driven-methods

speziell dann disconnectedEventHandler

da gibts auch ein Beispiel zu wie man das macht.

du müsstes dann eventuell einen Merker setzen und abhängig davon nach Ablauf einer von Dir gewünschten Zeit durch millis() erneut ein WiFi.begin(ssid, password); machen.

Ich hab das auch noch nicht so genutzt da ich eigentlich immer eine WIFI Verbindung haben will nutze ich WiFi.setAutoReconnect(true)

Danke, hab das Event mal programmiert. Nun heißt es warten, so oft kam das bei mir auch nicht vor.

Hallo,
wäre super wenn DU dann eine Rückmeldung gibst. Wie Du schon schreibst ist das Thema schlecht reproduzierbar. Und es lässt sich sicher auch nur bedingt mit einer Blechdose über dem ESP simulieren. :wink:

Gruß Heinz

Ja, das ist wirklich ein Problem. Und um zu erfahren was los ist muss man das serial cable dran machen, das kann dann auch schon wieder was ändert. Ziemlich tricky dem ganzen auf die Spur zu kommen. Zu 90% geht es realtiv einfach, aber dann....

Für solche Fälle schreibe ich eine Logdatei im LittleFS und schicke die ins Netz.

Abgesehen davon dass ich nicht weiß was ein LittleFS ist - wenn ich kein Wifi hab kann ich das log auch nirgends hinsenden. Müsste dann eher ein Platz sein, der ein Restart übersteht. Wenn es sowas gibt - hält der Flash das aus oder mach ich ihn damit kaputt über kurz oder lang.

Noch eine Sache. Das mit dem
WiFi.onStationModeDisconnected
hab ich wohl falsch verstanden. Ich dachte das triggert einmal, wenn ich die Verbindung verliere?!? Gibt es sowas denn?

Also das Gerät muss ohne Wifi was anzeigen. Wenn es keins gibt soll oder es verliert, soll es nicht sofort und ständig ein Reconnect versuchen - sonst ist der Akku gleich leer. Nein, so alle halbe Stunde oder so sollte ein reconnect versucht werden um Strom zu sparen.

Wenn ich beim setup() keine Verbindung bekomme ist das einfach zu detectieren. Aber wenn ich hab und sie verliere?!? Dann kann es vielleicht ein/zweimal einen reconnect versuchen. Aber dann erst nach einer gewissen Zeit wieder ... einfach ein setup() aufrufen.
Macht das Sinn? Wie macht man das am besten?

Nicht wirklich.
Der Name einer Funktion sollte andeuten, was sie macht.
Packe alles in eine Funktion connect() und ruf die in setup() und bei Bedarf auf.
Vermutlich gibt es in setup() auch Sachen, die nichts mit connect() zu tun haben...

Da du auch bei Misserfolg was anzeigen willst, darf diese Funktion nicht blockieren, aber sie kann Erfolg/Misserfolg zurückmelden und das gewünschte Zeitverhalten (nach mehreren Fehlversuchen eine Zeitlang nichts tun withoutDelay ) realisieren.

Ok, das kann man im Datenblatt des ESP nachlesen.
Ein spezielles Dateisystem im Speicher des ESP.

Es geht doch um das Debuggen, oder ?
Da kann man sich evtl. auch einfache Funkmodule an den ESP anschließen.

Den Fehler im OP kann ich so wohl nicht abfangen. Wenn man sich auf WiFi.status() nicht verlassen kann ist das nicht gut. Da hilft dann nur noch zusätzlich Test wie ping einzubauen.

Bezgl einen stromsparenden Modes habe ich es nun so gemacht.
Wenn bei Beginn kein WiFi vorhanden ist, dann arbeitet er ohne und zählt loops. Nach einer halben Stunde wird mit setup() alles noch mal neu gestartet.

Ist WiFi zu beginn vorhanden und geht verloren, dann rufe ich reconnect() auf. Kommt innerhalb von 2min keine Verbindung zustande wird WiFi ausgeschaltet und der Zähler beginnt wie oben, als hätte es nie ein WiFi gegeben.

Damit soll letztlich stromsparend eine Balance gefunden werden zwischen aggressiv/dauerndem Versuch die Verbindung zu halten (obwohl der AP vielleicht länger off ist) und dem dauerhaften Abschalten.

Statt dem setup() kann man natürlich auch nur das WiFi.begin() wieder aufrufen. Aber es ist auch noch MQTT neu zu setzen und so viel mehr passiert im setup() auch nicht, als dass man es nicht so nutzen kann.

Hallo,
Danke für die Rückmeldung wie du es jetzt gemacht hast.
Ja wenn man sich auf WiFi.status() nicht verlassen kann , dann wird es doof.

Ich habe da gestern noch was mit dem Thema WiFi.event rumgebastelt.

Das Problem ist dabei das direkt wieder versucht wird die Verbindung aufzubauen.
Ich habe dann versucht mit WiFi.disconnect in dem passenden Handle, das zu verhindern , das klappt auch.
Allerdings hab ich es nicht hinbekommen dann nach einer Zeit mit WiFi.begin() die Verbindung wieder neu aufzubauen. Das klappte letztlich nicht sicher.

Ich habe dabei das Handy als Hotspot genutzt damit ich das WLAN beliebig ein und ausschalten kann.

Gruß Heinz

Ich habe keine Ahnung wie sich wifi.reconnect() im Hintergrund auf den Stromverbrauch auswirkt. Man kann es nur mit einem disconnect beenden und dann muss man wieder mit begin starten. Also das sollte gehen bei dir. Gibts du auch die Parameter (ssid und password) ein? Die merkt es sich nämlich nach einem disconnect soweit ich weiß nicht.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.