12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package temperature
- import (
- "fmt"
- "strconv"
- "time"
- influx "github.com/influxdata/influxdb1-client/v2"
- )
- // Writer is used to write out measurements
- type Writer interface {
- Write(Measurement) error
- }
- type influxWriter struct {
- locations map[int]string
- db string
- client influx.Client
- }
- func (i influxWriter) Write(measurement Measurement) error {
- bp, err := influx.NewBatchPoints(influx.BatchPointsConfig{
- Database: i.db,
- Precision: "s",
- })
- if err != nil {
- fmt.Println("Could not log temperature")
- fmt.Println(err)
- return err
- }
- var tags = map[string]string{}
- if val, ok := i.locations[measurement.ID]; ok {
- tags["location"] = val
- } else {
- tags["location"] = "id:" + strconv.FormatInt(int64(measurement.ID), 10)
- }
- var batteryState int
- batteryState = int(measurement.BatteryState)
- fields := map[string]interface{}{
- "temperature": measurement.Temperature,
- "battery_good": batteryState,
- }
- pt, err := influx.NewPoint("temperature", tags, fields, time.Now())
- if err != nil {
- fmt.Println("Could not log temperature")
- return err
- }
- bp.AddPoint(pt)
- err = i.client.Write(bp)
- if err != nil {
- fmt.Println("Could not log temperature")
- fmt.Println(err)
- return err
- }
- fmt.Println("Wrote measurement successfully")
- return nil
- }
- // NewInfluxWriter creates an influxdb writer
- func NewInfluxWriter(db string, host string, username string, password string, locations map[int]string) (Writer, error) {
- client, err := influx.NewHTTPClient(influx.HTTPConfig{
- Addr: host,
- Username: username,
- Password: password,
- })
- if err != nil {
- return nil, err
- }
- return &influxWriter{db: db, client: client, locations: locations}, nil
- }
|