2016-07-01 13 views
1

Ich versuche, von dweet.io in meine eigene InfluxDB-Datenbank zu überführen.Übergeben der POST-Anfrage über ESP8266 an InfluxDB

Die Anfrage ich tat so ausgesehen dweet.io:

client.print(String("GET /dweet/for/nJLDK4mm3Xl6TcT8Yr06?key=7hHa9AhSGp6u684LGfya4Y&temperature=") + String(t) + "&humidity=" + String(h) + " HTTP/1.1\r\n" + 
    "Host: " + host + "\r\n" + 
    "Connection: close\r\n\r\n"); 
delay(10); 

Also, obwohl ich das konnte ich nur bearbeiten auf der Datenbank zu arbeiten, habe ich versucht, dies:

client.print(String("GET /write?db=mydb' --data-binary 'temperature,host=ESP826601 value=") + String(t) + "' HTTP/1.1\r\n" + 
    "Host: " + host + "\r\n" + 
    "Connection: close\r\n\r\n"); 
delay(10); 

Es funktionierte nicht, es konnte eine Verbindung zum Server herstellen, obwohl die Anfrage nicht ausgeführt werden konnte. Mein Code basiert darauf: https://www.openhomeautomation.net/cloud-temperature-logger-esp8266/

+0

Wenn Sie eine POST-Anfrage wünschen, warum machen Sie eine GET-Anfrage? –

+0

Nun, ich fand diese Skizze, die ich im ersten Post verlinkt habe, es funktionierte, sogar, dass auf der dweet.io-Website es auch sagen, dass dies eine POST-Anfrage ist .. http://i.imgur.com /Q6INHVM.png Oder vielleicht bin ich falsch in diesem .. –

+0

Jetzt habe ich es so versucht: 'client.print (String (" POST/schreiben? Db = mydb '- Data-binary' Temperatur , host = ESP8266-Wert = 1,42' HTTP/1.1 \ r \ n ") + \t \t "Host:" + Host + "\ r \ n" + \t \t" Connection: close \ r \ n \ r \ n "); \t delay (10); ' Immer noch' Bad Request' Fehler –

Antwort

0

Eine bequemere Methode zum Senden von Daten an InfluxDB von einem ESP8266 oder ESP32 ist die Verwendung der HTTPclient-Bibliothek anstelle des WiFiClient. Der folgende Code setzt den Header und die Payload und sendet sie dann über die REST API an InfluxDB.

#include <ESP8266HTTPClient.h> 

const char* influxUrl = "http://localhost:8086/write?db=mydb"; 
const char* influxUser = "username"; 
const char* influxPassword = "password"; 

// Add your own sensors here, e.g., read from OneWire or ADC 
id[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
value[10] = {22, 25, 24, 21, 22, 26, 22, 25, 24, 21}; 

// Send to InfluxDB 
Serial.println("Sending data to InfluxDB"); 

String influxData = ""; 
for(int i = 0; i < 10; i++){ 
    // Set data type and add tags 
    influxData += "air_temperature,house=hydroponic,id=" + id[i]; 
    // Add temperature value and delimiter for next measurement 
    influxData += " value=" + String(value[i]) + "\n"; 
} 

// Create POST message 
http.begin(influxUrl); 
http.addHeader("Content-Type", "application/x-www-form-urlencoded"); 
http.setAuthorization(influxUser, influxPassword); 

// The first attempt to send returns -1 
int httpCode = -1; 
while(httpCode == -1){ 
    httpCode = http.POST(influxData); 
    http.writeToStream(&Serial); 
} 
http.end(); 

Als Bonus macht es Sinn, es mit ESP deep sleep Funktionalität zu verbinden den Stromverbrauch von 80 mA bis weniger als 10 mA (nach meinen Messungen, die auf 0,01 A begrenzt sind) zu reduzieren.

Hinweis: Der obige Code wurde aus einem größeren Projekt extrahiert, kann also einen Fehler oder zwei aus der Transkription haben.

Verwandte Themen