Datenaustausch über das HTTP-Protokoll

In diesem Artikel zeige ich Dir, wie Du per HTTP-Request Daten vom ESP8266 übertragen kannst.

In meinem Beispiel möchte ich Temperatur- und Feuchtigkeitswerte vom ESP8266 per HTTP-Reuqest an die simpleAPI von ioBroker übertragen. Im ersten Schritt muss dazu zunächst der simpleAPI-Adapter installiert und eingestellt werden. Ich habe die Installation und Konfiguration bereits in einem separaten Artikel beschrieben:

ioBroker Simple-API Adapter

Nach dem nun der Adapter installiert, konfiguriert und gestartet ist, können wir uns nun ein Beispiel-HTTP Aufruf aufbauen und zunächst im Browser testen. Für das Beispiel soll die gemessene Temperatur vom ESP8266 an den folgenden Datenpunkt in ioBroker übertragen werden:

 

Der Datenpunkt hat somit für den Aufruf folgenden Namen:

MeineDatenpunkte.0.SensorData.Sensor_1.Temperature

Bei der Übertragung von nur einem Parameter (z.B. nur der Temperatur) können wir mit SET arbeiten:

http://192.168.0.128:8087/set/MeineDatenpunkte.0.SensorData.Sensor_1.Temperature?value=28

 

Bei der Übertragung von mehreren Werten (Temperatur und Feuchtigkeit) nutzen wir SETBULK.

Der SETBULK-Befehl wird folgendermaßen aufgebaut:

setBulk?<DatenpunktA>=<WertA>&<DatenpunktB>=<WertB>&…

 

Anbei der entsprechende Aufruf:

http://192.168.0.128:8087/setBulk?MeineDatenpunkte.0.SensorData.Sensor_1.Temperature=28&MeineDatenpunkte.0.SensorData.Sensor_1.Humidity=55

 

Um den ESP8266 für die Messung und Übertragung der Temperatur und Feuchtigkeit zu nutzen, benötigen wir nun folgenden Sketch:

 

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include "DHT.h"

const char* ssid = "WLAN_SSID";
const char* password = "WLAN_PWD";

#define DHT22PIN D2

DHT dht22(DHT22PIN, DHT22);

void setup() {
  Serial.begin(115200);
  delay(10);

  dht22.begin();

  Serial.print("Connect to Wifi ");

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  delay(2000);

  if (WiFi.status() == WL_CONNECTED)
  {
    float tempValue = dht22.readTemperature();
    float humidityValue = dht22.readHumidity();

    Serial.print(humidityValue);
    Serial.println(" %");
    Serial.print(tempValue);
    Serial.println(" Grad Celsius");

    String host = "192.168.0.128";

    WiFiClient client;
    if (client.connect(host, 8087)) {
      // URL die aufgerufen werden soll generieren
      String url = "/setBulk?MeineDatenpunkte.0.SensorData.Sensor_1.Temperature="+String(tempValue)+"&MeineDatenpunkte.0.SensorData.Sensor_1.Humidity="+String(humidityValue);

      client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
      delay(10);

      while(client.available()) {
        String line = client.readStringUntil('\r');
        Serial.print(line);
      }
      Serial.println("Website was called, closing connection");
    }
    else
    {
      Serial.println("Connection error");
    }

    delay(10000);
  }
}

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere