1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package log_temperature
- import (
- "bufio"
- "encoding/json"
- "fmt"
- "strconv"
- )
- // JSONParser reads the json output
- type jsonParser struct {
- Reader *bufio.Reader
- }
- func NewJsonParser(reader *bufio.Reader) Parser {
- return &jsonParser{Reader: reader}
- }
- // {"time" : "2018-04-13 23:04:50", "model" : "Acurite 606TX Sensor", "id" : -5, "battery" : "OK", "temperature_C" : 21.800}
- type jsonPacket struct {
- Time string
- Model string
- ID int
- Battery string
- Temperature_C float64
- }
- // Measure returns the temperature. Null if it can't
- func (jp jsonParser) Measure() (*Measurement, error) {
- text, err := jp.Reader.ReadString('\n')
- if err != nil {
- return nil, err
- }
- buffer := []byte(text)
- if json.Valid(buffer) {
- var jsonPacket jsonPacket
- err = json.Unmarshal(buffer, &jsonPacket)
- if err != nil {
- fmt.Println(err.Error())
- return nil, err
- }
- fmt.Println("temp is " + strconv.FormatFloat(jsonPacket.Temperature_C, 'f', 6, 64))
- return &Measurement{ID: jsonPacket.ID, Temperature: jsonPacket.Temperature_C}, nil
- }
- return nil, nil
- }
|