|
@@ -0,0 +1,80 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "flag"
|
|
|
+ "fmt"
|
|
|
+ "io/ioutil"
|
|
|
+ "net/http"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ temperature "git.snppla.net/snppla/log_temperature"
|
|
|
+)
|
|
|
+
|
|
|
+var host *string
|
|
|
+var db *string
|
|
|
+var username *string
|
|
|
+var password *string
|
|
|
+var dbHost *string
|
|
|
+var location *string
|
|
|
+var seconds *int
|
|
|
+
|
|
|
+type jsonPacket struct {
|
|
|
+ Temperature_C float64
|
|
|
+ Temperature_F float64
|
|
|
+}
|
|
|
+
|
|
|
+func main() {
|
|
|
+ host = flag.String("host", "http://localhost:80", "Http address (http://localhost:80)")
|
|
|
+ db = flag.String("db", "temperature", "Influxdb database")
|
|
|
+ username = flag.String("user", "", "Username")
|
|
|
+ password = flag.String("password", "", "Password")
|
|
|
+ dbHost = flag.String("dbHost", "http://localhost:8086", "Host to connect to")
|
|
|
+ location = flag.String("location", "unknown", "Location of the device")
|
|
|
+ seconds = flag.Int("delay", 1, "Number of seconds to delay between pollings")
|
|
|
+ flag.Parse()
|
|
|
+ locations := map[int]string{0: *location}
|
|
|
+ writer, err := temperature.NewInfluxWriter(*db, *dbHost, *username, *password, locations)
|
|
|
+ if err != nil {
|
|
|
+
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for {
|
|
|
+ resp, err := http.Get(*host)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ contents, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ buffer := []byte(contents)
|
|
|
+ if json.Valid(buffer) {
|
|
|
+ var jsonPacket jsonPacket
|
|
|
+
|
|
|
+ err := json.Unmarshal(buffer, &jsonPacket)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if strings.Contains(strings.ToLower(string(contents)), "_f") {
|
|
|
+ jsonPacket.Temperature_C = (jsonPacket.Temperature_F - 32) * 5 / 9
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Printf("Celcius: %f. Fahrenheit: %f \n", jsonPacket.Temperature_C, jsonPacket.Temperature_F)
|
|
|
+ measurement := temperature.Measurement{Temperature: jsonPacket.Temperature_C, BatteryState: temperature.BATT_NOT_AVAILABLE, ID: 0}
|
|
|
+ err = writer.Write(measurement)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ time.Sleep(time.Duration(*seconds) * time.Second)
|
|
|
+ }
|
|
|
+}
|