Ankündigung

Einklappen
Keine Ankündigung bisher.

HTTP Get Abfrage für Temperatursensor

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Das ist simples php. Um den BS in den DL zu stellen, sollten noch einige Anpassungen gemacht werden. Ich würde z.B die Einheiten bei der Ausgabe noch abtrennen, um mit den Werten weiter rechnen zu können. Ich kans nicht testen, aber wenn mal Zeit ist gerne umbauen.Ausserdem sehe ich gerade das der Eingang 2 den BS auch triggert, das ist auch unnötig.

    Kommentar


      #17
      Das ist PHP.
      "Wie" Du das lernen kannst weiss ich leider auch nicht. Ich persoenlich bevorzuge Buecher, aber YMMV

      Kommentar


        #18
        alles klar, danke. Das hilft mir jedenfalls mal weiter.

        Ich werde die Sensoren bei mir so programmieren, dass diese die Werte auf einen Webserver hochladen. Was könnt ihr mir das empfehlen? So etwas gibt es sicherlich bereits doch oder?

        Vorstellung ist, dass der Sensor die daten auf einem http://SERVER (Beispielsweise EDOMI Server) und dieser speichert die Anfrage und liest über einen Baustein wieder ein.

        Ziel der Geschichte ist, dass die Tempsensoren nicht so viel Strom fressen und nach erfolgreicher Übermittlung wieder in den Tiefschlaf gehen.

        Für alle anderen Leute, die diesen Beitrag noch lesen werden und auch sich dafür interessieren: ich habe hierzu derzeit den WEMOS D1 R2 &mini + DHT Shield genommen. Das ist der Code für die Arduino Programmierung:

        Code:
        /* WeMos DHT Server
         *
         * Connect to WiFi and respond to http requests with temperature and humidity
         *
         * Based on Adafruit ESP8266 Temperature / Humidity Webserver
         * https://learn.adafruit.com/esp8266-temperature-slash-humidity-webserver
         *
         * Depends on Adafruit DHT Arduino library
         * https://github.com/adafruit/DHT-sensor-library
         */
        
        #include <ESP8266WiFi.h>
        #include <WiFiClient.h>
        #include <ESP8266WebServer.h>
        #include <DHT.h>
        
        #define DHTTYPE DHT11   // DHT Shield uses DHT 11
        #define DHTPIN D4       // DHT Shield uses pin D4
        
        // Existing WiFi network
        const char* ssid     = "SSID von WLAN";
        const char* password = "PASSWORD-WLAN";
        
        // Listen for HTTP requests on standard port 80
        ESP8266WebServer server(80);
        
        // Initialize DHT sensor
        // Note that older versions of this library took an optional third parameter to
        // tweak the timings for faster processors.  This parameter is no longer needed
        // as the current DHT reading algorithm adjusts itself to work on faster procs.
        DHT dht(DHTPIN, DHTTYPE);
        
        float humidity, temperature;                 // Raw float values from the sensor
        char str_humidity[10], str_temperature[10];  // Rounded sensor values and as strings
        // Generally, you should use "unsigned long" for variables that hold time
        unsigned long previousMillis = 0;            // When the sensor was last read
        const long interval = 2000;                  // Wait this long until reading again
        
        void handle_root() {
          server.send(200, "text/plain", "WeMos DHT Server. Get /temp or /humidity");
          delay(100);
        }
        
        void read_sensor() {
          // Wait at least 2 seconds seconds between measurements.
          // If the difference between the current time and last time you read
          // the sensor is bigger than the interval you set, read the sensor.
          // Works better than delay for things happening elsewhere also.
          unsigned long currentMillis = millis();
        
          if (currentMillis - previousMillis >= interval) {
            // Save the last time you read the sensor
            previousMillis = currentMillis;
        
            // Reading temperature and humidity takes about 250 milliseconds!
            // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
            humidity = dht.readHumidity();        // Read humidity as a percent
            temperature = dht.readTemperature();  // Read temperature as Celsius
        
            // Check if any reads failed and exit early (to try again).
            if (isnan(humidity) || isnan(temperature)) {
              Serial.println("Failed to read from DHT sensor!");
              return;
            }
        
            // Convert the floats to strings and round to 2 decimal places
            dtostrf(humidity, 1, 2, str_humidity);
            dtostrf(temperature, 1, 2, str_temperature);
        
            Serial.print("Humidity: ");
            Serial.print(str_humidity);
            Serial.print(" %\t");
            Serial.print("Temperature: ");
            Serial.print(str_temperature);
            Serial.println(" °C");
          }
        }
        
        void setup(void)
        {
          // Open the Arduino IDE Serial Monitor to see what the code is doing
          Serial.begin(9600);
          dht.begin();
        
          Serial.println("WeMos DHT Server");
          Serial.println("");
        
          // Connect to your WiFi network
          WiFi.begin(ssid, password);
          Serial.print("Connecting");
        
          // Wait for successful connection
          while (WiFi.status() != WL_CONNECTED) {
            delay(500);
            Serial.print(".");
          }
          Serial.println("");
          Serial.print("Connected to: ");
          Serial.println(ssid);
          Serial.print("IP address: ");
          Serial.println(WiFi.localIP());
          Serial.println("");
        
          // Initial read
          read_sensor();
        
          // Handle http requests
          server.on("/", handle_root);
        
          server.on("/temp", [](){
            read_sensor();
            char response[50];
            snprintf(response, 50, "%s °C", str_temperature);
            server.send(200, "text/plain", response);
          });
        
          server.on("/humidity", [](){
            read_sensor();
            char response[50];
            snprintf(response, 50, "%s %", str_humidity);
            server.send(200, "text/plain", response);
          });
        
          // Start the web server
          server.begin();
          Serial.println("HTTP server started");
        }
        
        void loop(void)
        {
          // Listen for http requests
          server.handleClient();
        }

        Kommentar


          #19
          Es gibt in Edomi die Moeglichkeit, per HTTP-Request ein KO zu setzen, das wiederum kann dann in ein Archiv geschrieben werden.
          Ich persoenlich faende es sinnvoller die Daten per UDP-Unicast zu schicken, aber dafuer braeuchte es dann wieder einen entsprechenden Baustein fuer Edomi, HTTP ist halt "schon da"...

          BTW: wenn Du das eh grad noch "am Bauen dran bist" - nimm lieber einen BME280 als einen DHT, der DHT misst Mist

          Kommentar


            #20
            Zitat von wintermute Beitrag anzeigen
            Es gibt in Edomi die Moeglichkeit, per HTTP-Request ein KO zu setzen, das wiederum kann dann in ein Archiv geschrieben werden.
            Ich persoenlich faende es sinnvoller die Daten per UDP-Unicast zu schicken, aber dafuer braeuchte es dann wieder einen entsprechenden Baustein fuer Edomi, HTTP ist halt "schon da"...
            Genauso will ich das machen:

            die Abfrage meines Feinstaubsensors über den Browser funktioniert, zurück kommt ein JSON-String:

            2020_03_07_08_04_11_Window.png

            Nur leider funktioniert meine HTTP-GET Abfrage in Edomi NICHT (zyklische Abfrage alle 5min):

            2020_03_07_08_01_22_Window.png

            2020_03_07_07_59_57_Window.png

            KO-Fehler zeigt "1" mit folgendem Log-Eintrag:

            2020_03_07_08_12_09_Window.png

            Was mache ich falsch ?
            Zuletzt geändert von ak68; 07.03.2020, 08:18.

            Kommentar


              #21
              Zitat von ak68 Beitrag anzeigen
              Was mache ich falsch ?
              Du hast das Protokoll nicht angegeben.

              Code:
              [B]http://[/B]10.10.1.103/data.json

              Kommentar


                #22
                Zitat von Glotzkowski Beitrag anzeigen

                Du hast das Protokoll nicht angegeben.

                Code:
                [B]http://[/B]10.10.1.103/data.json
                .. und schon klappt´s !

                Vielen Dank !!!

                Kommentar

                Lädt...
                X