json_get.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. "strings"
  9. "time"
  10. temperature "git.snppla.net/snppla/log_temperature"
  11. )
  12. var host *string
  13. var db *string
  14. var username *string
  15. var password *string
  16. var dbHost *string
  17. var location *string
  18. var seconds *int
  19. type jsonPacket struct {
  20. Temperature_C float64
  21. Temperature_F float64
  22. }
  23. func main() {
  24. host = flag.String("host", "http://localhost:80", "Http address (http://localhost:80)")
  25. db = flag.String("db", "temperature", "Influxdb database")
  26. username = flag.String("user", "", "Username")
  27. password = flag.String("password", "", "Password")
  28. dbHost = flag.String("dbHost", "http://localhost:8086", "Host to connect to")
  29. location = flag.String("location", "unknown", "Location of the device")
  30. seconds = flag.Int("delay", 1, "Number of seconds to delay between pollings")
  31. flag.Parse()
  32. locations := map[int]string{0: *location}
  33. writer, err := temperature.NewInfluxWriter(*db, *dbHost, *username, *password, locations)
  34. if err != nil {
  35. fmt.Println(err.Error())
  36. return
  37. }
  38. for {
  39. resp, err := http.Get(*host)
  40. if err != nil {
  41. fmt.Println(err.Error())
  42. return
  43. }
  44. defer resp.Body.Close()
  45. contents, err := ioutil.ReadAll(resp.Body)
  46. if err != nil {
  47. fmt.Println(err.Error())
  48. return
  49. }
  50. buffer := []byte(contents)
  51. if json.Valid(buffer) {
  52. var jsonPacket jsonPacket
  53. err := json.Unmarshal(buffer, &jsonPacket)
  54. if err != nil {
  55. fmt.Println(err.Error())
  56. return
  57. }
  58. if strings.Contains(strings.ToLower(string(contents)), "_f") {
  59. jsonPacket.Temperature_C = (jsonPacket.Temperature_F - 32) * 5 / 9
  60. }
  61. fmt.Printf("Celcius: %f. Fahrenheit: %f \n", jsonPacket.Temperature_C, jsonPacket.Temperature_F)
  62. measurement := temperature.Measurement{Temperature: jsonPacket.Temperature_C, BatteryState: temperature.BATT_NOT_AVAILABLE, ID: 0}
  63. err = writer.Write(measurement)
  64. if err != nil {
  65. fmt.Println(err.Error())
  66. return
  67. }
  68. }
  69. time.Sleep(time.Duration(*seconds) * time.Second)
  70. }
  71. }