diff --git a/lorahandler.go b/lorahandler.go index 3139083..5dda50b 100644 --- a/lorahandler.go +++ b/lorahandler.go @@ -24,6 +24,20 @@ const ( NOT_PLAUSIBLE_32 = 2147483647 ) +type TTNv3EndDeviceIds struct { + Dev_eui string `json:"dev_eui"` +} + +type TTNv3UplinkMessage struct { + Frm_payload string `json:"frm_payload"` + Received_at string `json:"received_at"` +} + +type MessageTTNv3 struct { + EndDeviceIds TTNv3EndDeviceIds `json:"end_device_ids"` + UplinkMessage TTNv3UplinkMessage `json:"uplink_message"` +} + type MetadataTTN struct { Time string `json:"time"` } @@ -479,7 +493,7 @@ func WriteDatapoint(mytime int64, deveui string, devaddr string, v uint8, h uint //fmt.Printf("WriteDatapoint: h: %d\n", h) if h > 0 { sv := "" - // vp for Lipo + // vp for Lipo vp = int16(v) - 70 if vp < 0 { vp = 0 @@ -578,6 +592,7 @@ func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { var message_swisscom Message var message_ttn MessageTTN + var message_ttnv3 MessageTTNv3 if r.Body == nil { http.Error(w, "Please send a request body", 400) return @@ -600,9 +615,27 @@ func main() { fmt.Printf("Length of JSON Body: %d\n", len(buf)) - if strings.Contains(string(buf), "mini-beieli") { - fmt.Printf("Seems to be a TTN Packet...\n") - // it is probably a TTN package... + if strings.Contains(string(buf), "mini-beieli-v3") { + fmt.Printf("Seems to be a TTNv3 Packet...\n") + // it is probably a TTNv3 package... + err := json.NewDecoder(r.Body).Decode(&message_ttnv3) + if err != nil { + http.Error(w, err.Error(), 400) + return + } + + fmt.Println("Time: " + message_ttnv3.UplinkMessage.Received_at) + fmt.Println("Payload Raw: " + message_ttnv3.UplinkMessage.Frm_payload) + fmt.Println("DevEUI: " + message_ttnv3.EndDeviceIds.Dev_eui) + payload_hex, err := Convert2Hex(message_ttnv3.UplinkMessage.Frm_payload) + if err == nil { + DecodePayload(payload_hex, message_ttnv3.EndDeviceIds.Dev_eui, "N/A", 0, 0, true) + } else { + fmt.Println("Error: could not convert raw_package to hex: %s" + message_ttnv3.UplinkMessage.Frm_payload) + } + } else if strings.Contains(string(buf), "mini-beieli") { + fmt.Printf("Seems to be a TTNv2 Packet...\n") + // it is probably a TTNv2 package... err := json.NewDecoder(r.Body).Decode(&message_ttn) if err != nil { http.Error(w, err.Error(), 400)