From 5a6a4f03a95d36494f2c4448e856608d692464d5 Mon Sep 17 00:00:00 2001 From: Joerg Lehmann Date: Fri, 13 Sep 2019 17:10:51 +0200 Subject: [PATCH] new first packet with fw_version --- lorahandler.go | 63 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 13 deletions(-) diff --git a/lorahandler.go b/lorahandler.go index 92b5931..26d1ef2 100644 --- a/lorahandler.go +++ b/lorahandler.go @@ -33,6 +33,7 @@ type MessageProperties struct { type Message struct { Prop MessageProperties `json:"DevEUI_uplink"` } + type payload_128 struct { Version uint8 Vbat uint8 @@ -44,6 +45,18 @@ type payload_128 struct { W uint16 } +type payload_129 struct { + Version uint8 + Fw_version int32 + Vbat uint8 + H uint8 + T int16 + P uint8 + W1 int32 + W2 int32 + W uint16 +} + type payload_1 struct { Version uint8 Vbat uint8 @@ -92,9 +105,11 @@ func DecodePayload(s string, deveui string, devaddr string, lrrlat float32, lrrl var ba []byte var pl_1 payload_1 var pl_128 payload_128 + var pl_129 payload_129 ba, _ = hex.DecodeString(s) pl_1 = payload_1{} pl_128 = payload_128{} + pl_129 = payload_129{} br := bytes.NewReader(ba) if (s[0:2] == "01") { err := binary.Read(br, binary.LittleEndian, &pl_1) @@ -106,6 +121,11 @@ func DecodePayload(s string, deveui string, devaddr string, lrrlat float32, lrrl if err != nil { fmt.Println(err) } + } else if (s[0:2] == "81") { + err := binary.Read(br, binary.LittleEndian, &pl_129) + if err != nil { + fmt.Println(err) + } } else { fmt.Printf("Payload String is unknown: %s\n",s) } @@ -129,22 +149,21 @@ 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.H1,pl_1.P1,pl_1.W1,0,0,t,lrrlat,lrrlon) - WriteDatapoint(tfp,deveui,devaddr,pl_1.Vbat,pl_1.H2,pl_1.P1,pl_1.W1,0,0,t,lrrlat,lrrlon) + WriteDatapoint(tfp,deveui,devaddr,pl_1.Vbat,pl_1.H2,pl_1.P1,pl_1.W1,0,0,t,lrrlat,lrrlon,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) + WriteDatapoint(tfp + (step),deveui,devaddr,0,pl_1.H2,pl_1.P2,pl_1.W2,0,0,t,lrrlat,lrrlon,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) + WriteDatapoint(tfp + (2 * step),deveui,devaddr,0,pl_1.H3,pl_1.P3,pl_1.W3,0,0,t,lrrlat,lrrlon,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) + WriteDatapoint(tfp + (3 * step),deveui,devaddr,0,pl_1.H4,pl_1.P4,pl_1.W4,0,0,t,lrrlat,lrrlon,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) + WriteDatapoint(tfp + (4 * step),deveui,devaddr,0,pl_1.H5,pl_1.P5,pl_1.W5,0,0,t,lrrlat,lrrlon,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) + WriteDatapoint(tfp + (5 * step),deveui,devaddr,0,pl_1.H6,pl_1.P6,pl_1.W6,0,0,t,lrrlat,lrrlon,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) + WriteDatapoint(tfp + (6 * step),deveui,devaddr,0,pl_1.H7,pl_1.P7,pl_1.W7,0,0,t,lrrlat,lrrlon,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) + WriteDatapoint(tfp + (7 * step),deveui,devaddr,0,pl_1.H8,pl_1.P8,pl_1.W8,0,0,t,lrrlat,lrrlon,0) } } else if (s[0:2] == "80") { fmt.Printf("{\n") @@ -161,7 +180,25 @@ func DecodePayload(s string, deveui string, devaddr string, lrrlat float32, lrrl // Time of Packet received var tfp = (time.Now().Unix() / 60) - WriteDatapoint(tfp,deveui,devaddr,pl_128.Vbat,pl_128.H,pl_128.P,pl_128.W,pl_128.W1,pl_128.W2,pl_128.T,lrrlat,lrrlon) + WriteDatapoint(tfp,deveui,devaddr,pl_128.Vbat,pl_128.H,pl_128.P,pl_128.W,pl_128.W1,pl_128.W2,pl_128.T,lrrlat,lrrlon,0) + } + } else if (s[0:2] == "81") { + fmt.Printf("{\n") + fmt.Printf(" version: %d,\n", pl_129.Version) + fmt.Printf(" fw_version: %d,\n", pl_129.Fw_version) + fmt.Printf(" vbat: %d,\n", pl_129.Vbat) + fmt.Printf(" humidity: %d\n",pl_129.H) + fmt.Printf(" pressure: %d\n",pl_129.P) + fmt.Printf(" weight1: %d\n",pl_129.W1) + fmt.Printf(" weight2: %d\n",pl_129.W2) + fmt.Printf(" weight: %d\n",pl_129.W) + fmt.Printf(" temp: %d\n",pl_129.T) + fmt.Printf("}\n") + if write2file { + // Time of Packet received + var tfp = (time.Now().Unix() / 60) + + WriteDatapoint(tfp,deveui,devaddr,pl_129.Vbat,pl_129.H,pl_129.P,pl_129.W,pl_129.W1,pl_129.W2,pl_129.T,lrrlat,lrrlon,pl_129.Fw_version) } } // Send alert if necessary @@ -177,7 +214,7 @@ func DecodePayload(s string, deveui string, devaddr string, lrrlat float32, lrrl } } -func WriteDatapoint(mytime int64, deveui string, devaddr string, v uint8, h uint8, p uint8, w uint16, w1 int32, w2 int32, t int16, lrrlat float32, lrrlon float32) { +func WriteDatapoint(mytime int64, deveui string, devaddr string, v uint8, h uint8, p uint8, w uint16, w1 int32, w2 int32, t int16, lrrlat float32, lrrlon float32, fw_version int32) { // wir nehmen humidity als Referenz, wenn diese > 0 ist, dann ist es // eine gueltige Messung var vp uint8 // Voltage in % @@ -191,9 +228,9 @@ func WriteDatapoint(mytime int64, deveui string, devaddr string, v uint8, h uint s := "" if (v > 0) { - s = fmt.Sprintf("measurement,deveui=%s devaddr=\"%s\",v=%di,vp=%di,h=%di,p=%di,w=%di,w1=%di,w2=%di,t=%.1f,lrrlat=%f,lrrlon=%f %d\n",deveui,devaddr,int32(v)*7+2510,vp,h,int32(p)+825,w*5,w1,w2,float32(t)/10,lrrlat,lrrlon,mytime*60*1000*1000*1000) + s = fmt.Sprintf("measurement,deveui=%s devaddr=\"%s\",v=%di,vp=%di,h=%di,p=%di,w=%di,w1=%di,w2=%di,t=%.1f,lrrlat=%f,lrrlon=%f,fw_version=%di %d\n",deveui,devaddr,int32(v)*7+2510,vp,h,int32(p)+825,w*5,w1,w2,float32(t)/10,lrrlat,lrrlon,fw_version,mytime*60*1000*1000*1000) } else { - s = fmt.Sprintf("measurement,deveui=%s devaddr=\"%s\",h=%di,p=%di,w=%di,w1=%di,w2=%di,t=%.1f,lrrlat=%f,lrrlon=%f %d\n",deveui,devaddr,h,int32(p)+825,w*5,w1,w2,float32(t)/10,lrrlat,lrrlon,mytime*60*1000*1000*1000) + s = fmt.Sprintf("measurement,deveui=%s devaddr=\"%s\",h=%di,p=%di,w=%di,w1=%di,w2=%di,t=%.1f,lrrlat=%f,lrrlon=%f,fw_version=%di %d\n",deveui,devaddr,h,int32(p)+825,w*5,w1,w2,float32(t)/10,lrrlat,lrrlon,fw_version,mytime*60*1000*1000*1000) } WriteStringToFile(s)