work on calibration
This commit is contained in:
parent
d15653021f
commit
8f5e75f28e
|
|
@ -45,10 +45,10 @@ func MakePost(url string) {
|
||||||
|
|
||||||
func ResetNodeToZero(deveui string, w1_0 int32, w2_0 int32) {
|
func ResetNodeToZero(deveui string, w1_0 int32, w2_0 int32) {
|
||||||
fmt.Printf("Called ResetNodeToZero for deveui %s\n", deveui)
|
fmt.Printf("Called ResetNodeToZero for deveui %s\n", deveui)
|
||||||
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=00", api_url, deveui)
|
valstr := fmt.Sprintf("%08X%08X%08X%08X",uint32(w1_0),uint32(w2_0),0,0)
|
||||||
|
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=00%s", api_url, deveui, valstr)
|
||||||
MakePost(s)
|
MakePost(s)
|
||||||
// values should be taken from next packet...
|
SetDownlinkCommand(deveui,"do_nothing")
|
||||||
SetDownlinkCommand(deveui,"update_cal_from_node")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CalibrateScale(deveui string, downlink_command string, w1 int32, w2 int32) {
|
func CalibrateScale(deveui string, downlink_command string, w1 int32, w2 int32) {
|
||||||
|
|
@ -86,40 +86,45 @@ func CalibrateScale(deveui string, downlink_command string, w1 int32, w2 int32)
|
||||||
valstr := fmt.Sprintf("%08X%08X%08X%08X",uint32(cur_cal_settings.w1_0),uint32(cur_cal_settings.w2_0),math.Float32bits(new_w1_c),math.Float32bits(cur_cal_settings.w2_c))
|
valstr := fmt.Sprintf("%08X%08X%08X%08X",uint32(cur_cal_settings.w1_0),uint32(cur_cal_settings.w2_0),math.Float32bits(new_w1_c),math.Float32bits(cur_cal_settings.w2_c))
|
||||||
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=01%s", api_url, deveui, valstr)
|
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=01%s", api_url, deveui, valstr)
|
||||||
MakePost(s)
|
MakePost(s)
|
||||||
|
SetDownlinkCommand(deveui,"do_nothing")
|
||||||
} else if (tokens[0] == "tare_b") {
|
} else if (tokens[0] == "tare_b") {
|
||||||
new_w2_c := float32(w2 - cur_cal_settings.w2_0) / float32(calibration_weight_gram)
|
new_w2_c := float32(w2 - cur_cal_settings.w2_0) / float32(calibration_weight_gram)
|
||||||
valstr := fmt.Sprintf("%08X%08X%08X%08X",uint32(cur_cal_settings.w1_0),uint32(cur_cal_settings.w2_0),math.Float32bits(cur_cal_settings.w2_c),math.Float32bits(new_w2_c))
|
valstr := fmt.Sprintf("%08X%08X%08X%08X",uint32(cur_cal_settings.w1_0),uint32(cur_cal_settings.w2_0),math.Float32bits(cur_cal_settings.w1_c),math.Float32bits(new_w2_c))
|
||||||
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=01%s", api_url, deveui, valstr)
|
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=01%s", api_url, deveui, valstr)
|
||||||
MakePost(s)
|
MakePost(s)
|
||||||
|
SetDownlinkCommand(deveui,"do_nothing")
|
||||||
} else if (tokens[0] == "tare") {
|
} else if (tokens[0] == "tare") {
|
||||||
new_w1_c := float32(w1 - cur_cal_settings.w1_0) / float32(calibration_weight_gram)
|
new_w1_c := float32(w1 - cur_cal_settings.w1_0) / float32(calibration_weight_gram)
|
||||||
new_w2_c := float32(w2 - cur_cal_settings.w2_0) / float32(calibration_weight2_gram)
|
new_w2_c := float32(w2 - cur_cal_settings.w2_0) / float32(calibration_weight2_gram)
|
||||||
valstr := fmt.Sprintf("%08X%08X%08X%08X",uint32(cur_cal_settings.w1_0),uint32(cur_cal_settings.w2_0),math.Float32bits(new_w1_c),math.Float32bits(new_w2_c))
|
valstr := fmt.Sprintf("%08X%08X%08X%08X",uint32(cur_cal_settings.w1_0),uint32(cur_cal_settings.w2_0),math.Float32bits(new_w1_c),math.Float32bits(new_w2_c))
|
||||||
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=01%s", api_url, deveui, valstr)
|
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=01%s", api_url, deveui, valstr)
|
||||||
MakePost(s)
|
MakePost(s)
|
||||||
|
SetDownlinkCommand(deveui,"do_nothing")
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf("Error: either use tare_a or tare_b or tare; deveui %s\n", deveui)
|
fmt.Printf("Error: either use tare_a or tare_b or tare; deveui %s\n", deveui)
|
||||||
}
|
}
|
||||||
SetDownlinkCommand(deveui,"update_cal_from_node")
|
|
||||||
}
|
|
||||||
|
|
||||||
func UpdateNodeCalibrationSettings(deveui string) {
|
|
||||||
fmt.Printf("Called UpdateNodeCalibrationSettings for deveui %s\n", deveui)
|
|
||||||
var cur_cal_settings CalSettings
|
|
||||||
cur_cal_settings = GetCurrentCalibrationSettings(deveui)
|
|
||||||
|
|
||||||
valstr := fmt.Sprintf("%08X%08X%08X%08X",uint32(cur_cal_settings.w1_0),uint32(cur_cal_settings.w2_0),math.Float32bits(cur_cal_settings.w1_c),math.Float32bits(cur_cal_settings.w2_c))
|
|
||||||
s := fmt.Sprintf("%s/downlink?DevEUI=%s&FPort=1&Payload=01%s", api_url, deveui, valstr)
|
|
||||||
MakePost(s)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateCalibrationSettingsFromNode(deveui string, w1_0 int32, w2_0 int32, w1_c float32, w2_c float32) {
|
func UpdateCalibrationSettingsFromNode(deveui string, w1_0 int32, w2_0 int32, w1_c float32, w2_c float32) {
|
||||||
fmt.Printf("Called UpdateCalibrationSettingsFromNode for deveui %s\n", deveui)
|
fmt.Printf("Called UpdateCalibrationSettingsFromNode for deveui %s\n", deveui)
|
||||||
|
var cur_cal_settings CalSettings
|
||||||
var new_cal_settings CalSettings
|
var new_cal_settings CalSettings
|
||||||
|
|
||||||
|
cur_cal_settings = GetCurrentCalibrationSettings(deveui)
|
||||||
|
|
||||||
new_cal_settings.w1_0 = w1_0
|
new_cal_settings.w1_0 = w1_0
|
||||||
new_cal_settings.w2_0 = w2_0
|
new_cal_settings.w2_0 = w2_0
|
||||||
new_cal_settings.w1_c = w1_c
|
new_cal_settings.w1_c = w1_c
|
||||||
new_cal_settings.w2_c = w2_c
|
new_cal_settings.w2_c = w2_c
|
||||||
|
|
||||||
|
if ((new_cal_settings.w1_0 != cur_cal_settings.w1_0) ||
|
||||||
|
(new_cal_settings.w2_0 != cur_cal_settings.w2_0) ||
|
||||||
|
(new_cal_settings.w1_c != cur_cal_settings.w1_c) ||
|
||||||
|
(new_cal_settings.w2_c != cur_cal_settings.w2_c)) {
|
||||||
SetCurrentCalibrationSettings(deveui,new_cal_settings)
|
SetCurrentCalibrationSettings(deveui,new_cal_settings)
|
||||||
|
// since something has changed and is reflected in the local config, we don't do anything any more...
|
||||||
SetDownlinkCommand(deveui,"do_nothing")
|
SetDownlinkCommand(deveui,"do_nothing")
|
||||||
|
} else {
|
||||||
|
fmt.Printf("Info: no change in calibration settings for deveui %s\n", deveui)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ func ProcessInitPacket(deveui string, w1_0 int32, w2_0 int32, w1_c float32, w2_c
|
||||||
fmt.Printf("Init Packet, downlink_command set to do_nothing (or not set at all), nothing to do... Deveui %s\n", deveui)
|
fmt.Printf("Init Packet, downlink_command set to do_nothing (or not set at all), nothing to do... Deveui %s\n", deveui)
|
||||||
} else if (downlink_command == "tare_0") {
|
} else if (downlink_command == "tare_0") {
|
||||||
// reset node to 0
|
// reset node to 0
|
||||||
ResetNodeToZero(deveui, w1_0, w2_0)
|
ResetNodeToZero(deveui, w1, w2)
|
||||||
} else if strings.HasPrefix(downlink_command, "tare_a ") {
|
} else if strings.HasPrefix(downlink_command, "tare_a ") {
|
||||||
// calibrate Scale A : tare_a <gram_a>
|
// calibrate Scale A : tare_a <gram_a>
|
||||||
CalibrateScale(deveui, downlink_command, w1, w2)
|
CalibrateScale(deveui, downlink_command, w1, w2)
|
||||||
|
|
@ -126,15 +126,11 @@ func ProcessInitPacket(deveui string, w1_0 int32, w2_0 int32, w1_c float32, w2_c
|
||||||
} else if strings.HasPrefix(downlink_command, "tare ") {
|
} else if strings.HasPrefix(downlink_command, "tare ") {
|
||||||
// calibrate both Scale A and Scale B in on step : tare <gram_a> <gram_b>
|
// calibrate both Scale A and Scale B in on step : tare <gram_a> <gram_b>
|
||||||
CalibrateScale(deveui, downlink_command, w1, w2)
|
CalibrateScale(deveui, downlink_command, w1, w2)
|
||||||
} else if (downlink_command == "update_cal_on_node") {
|
|
||||||
// update calibration settings on node
|
|
||||||
UpdateNodeCalibrationSettings(deveui)
|
|
||||||
} else if (downlink_command == "update_cal_from_node") {
|
|
||||||
// update calibration settings from node
|
|
||||||
UpdateCalibrationSettingsFromNode(deveui, w1_0, w2_0, w1_c, w2_c)
|
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf("Error: Unknown downlink_command: %s (DevEUI: %s)\n", downlink_command, deveui)
|
fmt.Printf("Error: Unknown downlink_command: %s (DevEUI: %s)\n", downlink_command, deveui)
|
||||||
}
|
}
|
||||||
|
// We update the local settings on each init package (if something changed...)
|
||||||
|
UpdateCalibrationSettingsFromNode(deveui, w1_0, w2_0, w1_c, w2_c)
|
||||||
}
|
}
|
||||||
|
|
||||||
func DecodePayload(s string, deveui string, devaddr string, lrrlat float32, lrrlon float32, write2file bool) {
|
func DecodePayload(s string, deveui string, devaddr string, lrrlat float32, lrrlon float32, write2file bool) {
|
||||||
|
|
|
||||||
|
|
@ -288,6 +288,8 @@ func SetCurrentCalibrationSettings(deveui string, cal_settings CalSettings) erro
|
||||||
w1_c := fmt.Sprintf("%f",cal_settings.w1_c)
|
w1_c := fmt.Sprintf("%f",cal_settings.w1_c)
|
||||||
w2_c := fmt.Sprintf("%f",cal_settings.w2_c)
|
w2_c := fmt.Sprintf("%f",cal_settings.w2_c)
|
||||||
|
|
||||||
|
fmt.Printf("DEBUG SetCurrentCalibrationSettings: w1_0: %s, w2_0: %s, w1_c: %s, w2_c: %s\n",w1_0, w2_0, w1_c, w2_c)
|
||||||
|
|
||||||
// SET object
|
// SET object
|
||||||
_, err := conn.Do("HMSET", devPrefix+deveui, "w1_0",w1_0,"w2_0",w2_0,"w1_c",w1_c,"w2_c",w2_c)
|
_, err := conn.Do("HMSET", devPrefix+deveui, "w1_0",w1_0,"w2_0",w2_0,"w1_c",w1_c,"w2_c",w2_c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue