- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 13

Thema: NodeMCU Webserver teilweise nicht erreichbar/hängt sich auf

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2019
    Beiträge
    5

    NodeMCU Webserver teilweise nicht erreichbar/hängt sich auf

    Hallo zusammen,

    Ich bin gerade dabei mein erstes Projekt mit dem NodeMCU zu verwirklichen. Dazu habe ich mir den DHT22 dazu geholt und gebe dessen Daten über einen Webserver auf dem NodeMCU im XML Format aus, die ich dann wiederum mit Icinga2 auslese und mir mit Grafana darstellen lasse. Ähnlich wie in diesem Tutorial: https://daniel-ziegler.com/monitorin...afana-esp8266/

    Nun habe ich das Gefühl, dass sich der Webserver ab und zu aufhängt. Ich komme einfach nicht mehr drauf und auch Grafana zeigt mir, dass in dieser Zeit keine Daten empfangen werden konnten. Nach einer Weile fängt er sich dann wohl wieder.

    Hat jemand gleiche Erfahrungen damit gemacht, oder liegt es vielleicht an meinem Code? Habe ich etwas vergessen oder falsch gemacht? Falsche Bibliotheken geladen?

    Klicke auf die Grafik für eine größere Ansicht

Name:	Bildschirmfoto 2019-06-13 um 10.45.05.png
Hits:	8
Größe:	98,6 KB
ID:	34219

    Code:
    // DHT22 Struct
    struct Humidity {
      int humidity;
      unsigned int humidityFrac;
    
      int temperature;
      unsigned int temperatureFrac;
    };
    
    #include <ESP8266WiFi.h>
    #include "DHT.h"
    
    const char* ssid = "<WlanSSID>";
    const char* password = "<MeinWlanPasswort>";
    
    #define DHTTYPE DHT22
    const int DHTPin = D1;
    DHT dht(DHTPin, DHTTYPE);
    
    //Static IP
    IPAddress ip(192, 168, 1, x);
    IPAddress gateway(192, 168, 1, 1);
    IPAddress subnet(255, 255, 255, 0);
    
    // Create an instance of the server
    // specify the port to listen on as an argument
    WiFiServer server(80);
    
    void setup() {
      Serial.begin(115200);
      delay(10);
    
      dht.begin();
    
      // prepare GPIO2
      pinMode(2, OUTPUT);
      digitalWrite(2, 0);
    
      // Connect to WiFi network
      Serial.println();
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
    
      //Disable WiFi AP
      WiFi.mode(WIFI_STA);
    
      //Set Static IP
      WiFi.config(ip, gateway, subnet);
    
      //Connect to WiFi
      WiFi.begin(ssid, password);
    
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
    
      // Start the server
      server.begin();
      Serial.println("Server started");
    
      // Print the IP address
      Serial.println(WiFi.localIP());
    
    }
    
    void loop() {  
      // Check if a client has connected
      WiFiClient client = server.available();
      if (!client) {
        return;
      }
    
      // Wait until the client sends some data
      Serial.println("new client");
      while(!client.available()){
        delay(1);
      }
    
      // Read the first line of the request
      String req = client.readStringUntil('\r');
      Serial.println(req);
      client.flush();
    
      Humidity humidity = getHumidityAndTemperature();
    
      Serial.print("Humidity: ");
      Serial.print(humidity.humidity);
      Serial.print(".");
      Serial.print(humidity.humidityFrac);
      Serial.println("%");
    
      Serial.print("Temperature: ");
      Serial.print(humidity.temperature);
      Serial.print(".");
      Serial.print(humidity.temperatureFrac);
      Serial.println("*C");
    
      // Prepare the response
      String response = "HTTP/1.1 200 OK\r\nContent-Type: application/xml\r\n\r\n<?xml version='1.0'?><document>";
        response += "<humidity>";
        response += humidity.humidity;
        response += ".";
        response += humidity.humidityFrac;
        response += "</humidity>";
    
        response += "<temperature>";
        response += humidity.temperature;
        response += ".";
        response += humidity.temperatureFrac;
        response += "</temperature>";
    
        response += "<freeheap>";
        response += ESP.getFreeHeap();
        response += "</freeheap>";
    
        response += "<cpufreqmhz>";
        response += ESP.getCpuFreqMHz();
        response += "</cpufreqmhz>";
    
      response += "</document>\n";
    
      // Send the response to the client
      client.print(response);
      delay(1);
      Serial.println("Client disonnected");
      Serial.println(server.status());
    
      // The client will actually be disconnected
      // when the function returns and 'client' object is destroyed
    }
    
    Humidity getHumidityAndTemperature() {
      struct Humidity humidityStruct;
      float humidity =  dht.readHumidity();
      float temperature = dht.readTemperature();
    
      humidityStruct.humidity = int(humidity);
      humidityStruct.humidityFrac = (humidity - int(humidity)) * 100;
    
      humidityStruct.temperature = int(temperature);
      humidityStruct.temperatureFrac = (temperature - int(temperature)) * 100;
    
      return humidityStruct;
    }
    Viele Grüße
    B4DschK4Pp

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Erst einmal grundsätzlich gefragt ohne den Code gelesen zu haben:

    Hast du die Firmware aktualisiert? Es gab in letzer Zeit viele viele updates die zu mehr Stabilität is gewissen Szenarien geführt haben (ich verfolge aktiv die Githubs der Projekte).

    Du sagst dass du vermutest dass sich der Web"server" aufhängt, müsste das nicht von deinem Tool erfasst werden können?!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2019
    Beiträge
    5
    Tatsächlich habe ich die Firmware noch nicht aktualisiert. Habe den NodeMCU bekommen und wollte natürlich direkt loslegen. Dann muss ich mich damit mal beschäftigen und mir eine Anleitung raus suchen.

    Ja, Icinga2 kann auch meinen Webserver checken. Das habe ich auch gemacht. Tatsächlich sehe ich hier aber keine Einbußen, aber die Sensordaten kommen über einen gewissen Zeitraum nicht an. Wenn ich auf die URL dann manuell im Browser gehe, bekomme ich einen TimeOut.

    Ich beschäftige mich jetzt mal mit der Firmware Aktualisierung und schaue, ob es was bringt.
    Vielen Dank erstmal.

  4. #4
    HaWe
    Gast
    Aktualisieren vor allem auch die Arduino IDE (1.8.8 oder 1.8.9) und die ESP8266 Board cores (aktuell 2.5.2)
    ich habe auch alte ESP8266 (ESP-12E), aber noch nie die Firmware aktualisieren müssen.


    Nur wenn es damit nicht läuft, dann mal auf core 2.4.0 zurückgehen: da gibt es ein paar Inkompatibilitäten zu früheren Libs und Examples

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Wenn ich auf die URL dann manuell im Browser gehe, bekomme ich einen TimeOut.
    Das klingt irgendwie danach als ob dein Tool die Webseite einfach aus dem Cache lädt! Ich habe leider keine Ahung von dem Tool, aber vielleicht kannst du A) den Tool überzeugen nicht gecachte Daten zu nutzen oder B) deinen Webserver so einrichten, dass er das Cachen der Seite verbietet (im HTML Header ist da eine Möglichkeit, aber ich muss erstmal nachsehen wie das nochmal ging XD)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2019
    Beiträge
    5
    Nein, das glaube ich nicht. Da wird nichts gecachet. Vor allen bekomme ich das Timeout ja auf einem anderen Rechner.
    Wenn es cachen würde, müssten die Werte ja auch alle gleich sein, richtig? In dem angehängten Screenshot im ersten Bild sieht man ja auch, dass sich die Werte unterscheiden. Allerdings gibt es eben zu den markierten Zeiten keine Datenpunkte.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Vor allen bekomme ich das Timeout ja auf einem anderen Rechner.
    Genau DAS veranlasst mich zu denken dass das Tool den Timeout nicht mitbekommt sondern Daten aus einem Cache lädt!

    Wenn es cachen würde, müssten die Werte ja auch alle gleich sein, richtig? In dem angehängten Screenshot im ersten Bild sieht man ja auch, dass sich die Werte unterscheiden. Allerdings gibt es eben zu den markierten Zeiten keine Datenpunkte.
    Mh da hast du natürlich auch recht, hab die Grafik nciht so detailliert angesehen.

    Ja, Icinga2 kann auch meinen Webserver checken. Das habe ich auch gemacht. Tatsächlich sehe ich hier aber keine Einbußen
    wie genau sieht dieser Test denn aus!?

    Code:
      // The client will actually be disconnected
      // when the function returns and 'client' object is destroyed
    Woher stammt die Info? Ich lese hier mind. 2 Issues (okay sie sind älter) auf Github die sagen mit einem client.stop() am Ende der loop würde alles stabiler laufen. (Ist auch einfach gesprochen "anständiger" alle Objekte in definierte Zustände zu überführen bevor man sie fallen lässt!)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

Ähnliche Themen

  1. NodeMCUv3 Webserver nicht von überall erreichbar
    Von Karl123 im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 3
    Letzter Beitrag: 30.01.2017, 07:14
  2. NodeMCU v.1 Webserver wird nicht im WLANi-Netz gefunden/angezeigt
    Von oderlachs im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 4
    Letzter Beitrag: 18.10.2016, 12:38
  3. Webserver nicht aus dem Netz erreichbar =(
    Von Felix H. im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 04.08.2010, 20:01
  4. Lade Programm geht nicht (hängt sich auf)
    Von REX im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 11.09.2004, 04:19

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress