Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
97c6a045d2
|
|||
f10f9afd8b
|
|||
64f74c60f3
|
@ -4,14 +4,16 @@ import (
|
||||
"log"
|
||||
"fmt"
|
||||
"bytes"
|
||||
"strconv"
|
||||
"encoding/base64"
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
"udi/database"
|
||||
)
|
||||
|
||||
type hottisThreeWayThermometerValues struct {
|
||||
Status uint8
|
||||
// Battery uint16
|
||||
Battery uint16
|
||||
SensorAddress1 uint64
|
||||
Value1 int32
|
||||
SensorAddress2 uint64
|
||||
@ -20,8 +22,25 @@ type hottisThreeWayThermometerValues struct {
|
||||
Value3 int32
|
||||
}
|
||||
|
||||
func getSensorName(sensorsMap *map[string]string, sensorAddress uint64) string {
|
||||
key := strconv.FormatUint(sensorAddress, 10)
|
||||
if sensorName, exists := (*sensorsMap)[key]; exists {
|
||||
return sensorName
|
||||
}
|
||||
return "Sensor" + key
|
||||
}
|
||||
|
||||
func Parse(fPort int, _ []byte, frmPayload string, variables *map[string]database.VariableType, attributes *map[string]interface{}, _ *database.Device) error {
|
||||
sensorsMap := make(map[string]string)
|
||||
sensorsJSON, ok := (*attributes)["Sensors"].(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("Unable to load sensor map from attributes")
|
||||
}
|
||||
errJ := json.Unmarshal([]byte(sensorsJSON), &sensorsMap)
|
||||
if errJ != nil {
|
||||
return fmt.Errorf("Unable to parse sensor map: %v", errJ)
|
||||
}
|
||||
|
||||
if fPort != 2 {
|
||||
return fmt.Errorf("Unexpected fPort %d", fPort)
|
||||
}
|
||||
@ -37,30 +56,38 @@ func Parse(fPort int, _ []byte, frmPayload string, variables *map[string]databas
|
||||
return fmt.Errorf("Unable to cast into struct: %v", err)
|
||||
}
|
||||
|
||||
var battery float32 = float32(values.Battery) / 1000.0
|
||||
var value1 float32 = float32(values.Value1) / 128.0
|
||||
var value2 float32 = float32(values.Value2) / 128.0
|
||||
var value3 float32 = float32(values.Value3) / 128.0
|
||||
|
||||
//log.Printf("Status: %d, Battery: %d", values.Status, values.Battery);
|
||||
log.Printf("Status: %d", values.Status);
|
||||
log.Printf("Battery: %d, %f", values.Battery, battery);
|
||||
log.Printf("Sensor1: Addr: %d, Value: %f", values.SensorAddress1, value1);
|
||||
log.Printf("Sensor2: Addr: %d, Value: %f", values.SensorAddress2, value2);
|
||||
log.Printf("Sensor3: Addr: %d, Value: %f", values.SensorAddress3, value3);
|
||||
|
||||
(*variables)["Battery"] = database.VariableType {
|
||||
Label: "Battery",
|
||||
Variable: "Voltage",
|
||||
Unit: "V",
|
||||
Value: battery,
|
||||
}
|
||||
(*variables)["Temperature1"] = database.VariableType {
|
||||
Label: "Temperature1",
|
||||
Label: getSensorName(&sensorsMap, values.SensorAddress1),
|
||||
Variable: "Temperature",
|
||||
Unit: "°C",
|
||||
Value: value1,
|
||||
}
|
||||
(*variables)["Temperature2"] = database.VariableType {
|
||||
Label: "Temperature2",
|
||||
Label: getSensorName(&sensorsMap, values.SensorAddress2),
|
||||
Variable: "Temperature",
|
||||
Unit: "°C",
|
||||
Value: value2,
|
||||
}
|
||||
(*variables)["Temperature3"] = database.VariableType {
|
||||
Label: "Temperature3",
|
||||
Label: getSensorName(&sensorsMap, values.SensorAddress3),
|
||||
Variable: "Temperature",
|
||||
Unit: "°C",
|
||||
Value: value3,
|
||||
|
Reference in New Issue
Block a user