package hottisScd30 import ( //"log" "fmt" "bytes" "encoding/base64" "encoding/binary" "udi/database" ) type hottisScd30Values struct { Status uint8 CO2Conc int32 Temp int32 Hum int32 Bri int32 } 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 hottisScd30Values err = binary.Read(bytes.NewReader(b), binary.LittleEndian, &values) if err != nil { return fmt.Errorf("Unable to cast into struct: %v", err) } var co2concentration float32 = float32(values.CO2Conc) / 100; var temperature float32 = float32(values.Temp) / 100; var humidity float32 = float32(values.Hum) / 100; // log.Printf("CO2: %f, Temp: %f, Hum: %f, Status: %d", co2concentration, temperature, humidity, values.Status) (*variables)["CO2concentration"] = database.VariableType { Label: "CO2concentration", Variable: "Concentration", Unit: "ppm", Value: co2concentration, } (*variables)["Temperature"] = database.VariableType { Label: "Temperature", Variable: "Temperature", Unit: "°C", Value: temperature, } (*variables)["Humidity"] = database.VariableType { Label: "Humidity", Variable: "Humidity", Unit: "%", Value: humidity, } (*variables)["Brightness"] = database.VariableType { Label: "Brightness", Variable: "Brightness", Unit: "", Value: values.Bri, } (*attributes)["Status"] = values.Status return nil }