package main import ( "encoding/json" "log" "net/http" "time" influxClient "github.com/influxdata/influxdb/client/v2" ) type sensorData struct { ID string `json: "id"` Name string `json: "name,omitempty"` Temp float32 `json: "temp"` Pressure float32 `json: "pressure"` } const ( database = "sensors" username = "sensor" password = "dQ87dpjq7V7Y93U7" ) func main() { http.HandleFunc("/esp8266/sensors", func(w http.ResponseWriter, r *http.Request) { handleSensor(w, r) }) http.ListenAndServe(":3000", nil) } func handleSensor(rw http.ResponseWriter, req *http.Request) { ts := time.Now() c, err := influxClient.NewHTTPClient(influxClient.HTTPConfig{ Addr: "http://10.42.30.0:8086", Username: username, Password: password, }) if err != nil { log.Fatal(err) } _, _, err = c.Ping(0) if err != nil { log.Fatal(err) } defer c.Close() decoder := json.NewDecoder(req.Body) var data sensorData err = decoder.Decode(&data) if err != nil { log.Println("Error in the sent data.") log.Println(err) return } defer req.Body.Close() log.Printf("Got data: %s %s (%f) (%f)\n", data.ID, data.Name, data.Temp, data.Pressure) bp, err := influxClient.NewBatchPoints(influxClient.BatchPointsConfig{ Database: database, Precision: "ms", }) if err != nil { log.Fatalln("Error: ", err) } tags := map[string]string{ "node": data.ID, "name": data.Name, } fieldsTemp := map[string]interface{}{ "value": data.Temp, } fieldsPressure := map[string]interface{}{ "value": data.Pressure, } pointTemp, err := influxClient.NewPoint( "temperature", tags, fieldsTemp, ts, ) if err != nil { log.Fatalln("Error: ", err) } pointPressure, err := influxClient.NewPoint( "pressure", tags, fieldsPressure, ts, ) if err != nil { log.Fatalln("Error: ", err) } bp.AddPoint(pointTemp) bp.AddPoint(pointPressure) log.Println("Sending", bp, c) err = c.Write(bp) if err != nil { log.Fatalln("Error: ", err) } }