This repository has been archived on 2025-02-01. You can view files and clone it, but cannot push or open issues or pull requests.
esp8266-temperature/server-go-ingress/server.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)
}
}