From 16dc34b858add16291a189b9a703d744dc7a509c Mon Sep 17 00:00:00 2001 From: Joerg Lehmann Date: Fri, 19 Jun 2020 13:52:03 +0200 Subject: [PATCH] fix bugs --- .gitignore | 1 + lorahandler.go | 49 ++++++++++++++++++++++++++++++++++++++----------- persistence.go | 4 ++-- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 5c800ff..f3ba2f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ lorahandler lorahandler.log* +logs/* diff --git a/lorahandler.go b/lorahandler.go index e13ff67..0e7e944 100644 --- a/lorahandler.go +++ b/lorahandler.go @@ -203,21 +203,37 @@ func DecodePayload(s string, deveui string, devaddr string, lrrlat float32, lrrl // the second measurement as first..., the same for humidity, which is usually too low... t := pl_1.T t = t + int16(pl_1.TC1) - WriteDatapoint(tfp, deveui, devaddr, pl_1.Vbat, pl_1.H2, pl_1.P1, pl_1.W1, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + if valid_measurements > 0 { + WriteDatapoint(tfp, deveui, devaddr, pl_1.Vbat, pl_1.H2, pl_1.P1, pl_1.W1, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + } //t = t + int16(pl_1.TC1) - WriteDatapoint(tfp+(step), deveui, devaddr, 0, pl_1.H2, pl_1.P2, pl_1.W2, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + if valid_measurements > 1 { + WriteDatapoint(tfp+(step), deveui, devaddr, 0, pl_1.H2, pl_1.P2, pl_1.W2, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + } t = t + int16(pl_1.TC2) - WriteDatapoint(tfp+(2*step), deveui, devaddr, 0, pl_1.H3, pl_1.P3, pl_1.W3, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + if valid_measurements > 2 { + WriteDatapoint(tfp+(2*step), deveui, devaddr, 0, pl_1.H3, pl_1.P3, pl_1.W3, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + } t = t + int16(pl_1.TC3) - WriteDatapoint(tfp+(3*step), deveui, devaddr, 0, pl_1.H4, pl_1.P4, pl_1.W4, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + if valid_measurements > 3 { + WriteDatapoint(tfp+(3*step), deveui, devaddr, 0, pl_1.H4, pl_1.P4, pl_1.W4, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + } t = t + int16(pl_1.TC4) - WriteDatapoint(tfp+(4*step), deveui, devaddr, 0, pl_1.H5, pl_1.P5, pl_1.W5, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + if valid_measurements > 4 { + WriteDatapoint(tfp+(4*step), deveui, devaddr, 0, pl_1.H5, pl_1.P5, pl_1.W5, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + } t = t + int16(pl_1.TC5) - WriteDatapoint(tfp+(5*step), deveui, devaddr, 0, pl_1.H6, pl_1.P6, pl_1.W6, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + if valid_measurements > 5 { + WriteDatapoint(tfp+(5*step), deveui, devaddr, 0, pl_1.H6, pl_1.P6, pl_1.W6, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + } t = t + int16(pl_1.TC6) - WriteDatapoint(tfp+(6*step), deveui, devaddr, 0, pl_1.H7, pl_1.P7, pl_1.W7, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + if valid_measurements > 6 { + WriteDatapoint(tfp+(6*step), deveui, devaddr, 0, pl_1.H7, pl_1.P7, pl_1.W7, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + } t = t + int16(pl_1.TC7) - WriteDatapoint(tfp+(7*step), deveui, devaddr, 0, pl_1.H8, pl_1.P8, pl_1.W8, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + if valid_measurements > 7 { + WriteDatapoint(tfp+(7*step), deveui, devaddr, 0, pl_1.H8, pl_1.P8, pl_1.W8, 0, 0, t, lrrlat, lrrlon, 0, 0, 0, 0, 0) + } } } else if s[0:2] == "80" { fmt.Printf("{\n") @@ -295,7 +311,7 @@ func DecodePayload(s string, deveui string, devaddr string, lrrlat float32, lrrl deleteValues(deveui) } if val2, ok2 := alertLogMap[deveui]; ok2 { - WriteStringToFile(val2) + WriteStringToFile(val2, deveui) delete(alertLogMap, deveui) } } @@ -329,7 +345,7 @@ func WriteDatapoint(mytime int64, deveui string, devaddr string, v uint8, h uint } s = fmt.Sprintf("measurement,deveui=%s devaddr=\"%s\",%sh=%di,p=%di,w=%di,t=%.1f,lrrlat=%f,lrrlon=%f%s %d\n", deveui, devaddr, sv, h, int32(p)+825, uint32(w)*5, float32(t)/10, lrrlat, lrrlon, sfw, mytime*60*1000*1000*1000) - WriteStringToFile(s) + WriteStringToFile(s, deveui) w_gram := uint32(w) * 5 addValue(deveui, w_gram) @@ -343,7 +359,7 @@ func WriteDatapoint(mytime int64, deveui string, devaddr string, v uint8, h uint } } -func WriteStringToFile(s string) { +func WriteStringToFile(s string, deveui string) { n, err := file.WriteString(s) if err != nil { fmt.Println(err) @@ -353,6 +369,17 @@ func WriteStringToFile(s string) { fmt.Println("failed to write data") os.Exit(1) } + + // Also write to individual files + datestr := time.Now().Format("2006-01") + individual_file := "/home/beieli/lorahandler/logs/" + deveui + "-" + datestr + ".log" + fi, err := os.OpenFile(individual_file, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + defer fi.Close() + fi.WriteString(s) } func Convert2Hex(payload_raw string) (string, error) { diff --git a/persistence.go b/persistence.go index 9b53013..0e1abfd 100644 --- a/persistence.go +++ b/persistence.go @@ -121,8 +121,8 @@ func addValue(deveui string, value uint32) { return } - // we set an expiration time of one hour - _, err3 := conn.Do("EXPIRE", lastvaluesPrefix+deveui, 3600) + // we set an expiration time of three hours + _, err3 := conn.Do("EXPIRE", lastvaluesPrefix+deveui, 10800) if err3 != nil { return