From 95831d5e477328465b9fed0629900a0bbf8fab11 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Wed, 4 Dec 2024 12:49:49 +0100 Subject: [PATCH] gy21 --- .../ttn/models/hottisGy21/hottisGY21.go | 55 +++++++++++++++++++ src/udi/handlers/ttn/ttn.go | 3 + 2 files changed, 58 insertions(+) create mode 100644 src/udi/handlers/ttn/models/hottisGy21/hottisGY21.go diff --git a/src/udi/handlers/ttn/models/hottisGy21/hottisGY21.go b/src/udi/handlers/ttn/models/hottisGy21/hottisGY21.go new file mode 100644 index 0000000..15e4f15 --- /dev/null +++ b/src/udi/handlers/ttn/models/hottisGy21/hottisGY21.go @@ -0,0 +1,55 @@ +package hottisGy21 + +import ( + //"log" + "fmt" + "bytes" + "encoding/base64" + "encoding/binary" + "udi/database" +) + +type hottisGy21Values struct { + Connected uint8 + Status uint8 + RawHumidity uint16 + RawTemperature uint16 +} + + +func Parse(fPort int, _ []byte, frmPayload string, variables *map[string]database.VariableType, attributes *map[string]interface{}, _ *database.Device) error { + if fPort != 2 { + return fmt.Errorf("Unexpected fPort %d", fPort) + } + + b, err := base64.StdEncoding.DecodeString(frmPayload) + if err != nil { + return fmt.Errorf("Unable to base64-decode payload: %v", err) + } + + var values hottisGy21Values + err = binary.Read(bytes.NewReader(b), binary.LittleEndian, &values) + if err != nil { + return fmt.Errorf("Unable to cast into struct: %v", err) + } + var temperature float32 = -46.85 + 175.72 * (float32(values.RawTemperature) / 65536.0) + var humidity float32 = -6 + 125 * (float32(values.RawHumidity) / 65536.0); + + // log.Printf("CO2: %f, Temp: %f, Hum: %f, Status: %d", co2concentration, temperature, humidity, values.Status) + + (*variables)["Humidity"] = database.VariableType { + Label: "Humidity", + Variable: "Humidity", + Unit: "%", + Value: humidity, + } + (*variables)["Temperature"] = database.VariableType { + Label: "Temperature", + Variable: "Temperature", + Unit: "°C", + Value: temperature, + } + + (*attributes)["Status"] = values.Status + return nil +} diff --git a/src/udi/handlers/ttn/ttn.go b/src/udi/handlers/ttn/ttn.go index 5731fd7..6fd18a5 100644 --- a/src/udi/handlers/ttn/ttn.go +++ b/src/udi/handlers/ttn/ttn.go @@ -14,6 +14,7 @@ import ( "udi/handlers/ttn/models/draginoLsn50" "udi/handlers/ttn/models/rawPayloadPrinter" "udi/handlers/ttn/models/hottisScd30" + "udi/handlers/ttn/models/hottisGy21 "udi/handlers/ttn/models/hottisThreeWayThermometer" "udi/database" ) @@ -153,6 +154,8 @@ func (self *TTNHandler) Handle(message handler.MessageT) { parser = rawPayloadPrinter.Parse case "hottis-scd30": parser = hottisScd30.Parse + case "hottis-gy21": + parser = hottisGy21.Parse case "hottis-threeway-thermometer": parser = hottisThreeWayThermometer.Parse default: