114 lines
2 KiB
Go
114 lines
2 KiB
Go
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)
|
|
}
|
|
}
|