add TTN as possible datasource
This commit is contained in:
parent
40dadbb7b4
commit
bebcfbf846
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
|
@ -22,6 +23,16 @@ const (
|
||||||
NOT_ATTACHED = -2147483648
|
NOT_ATTACHED = -2147483648
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type MetadataTTN struct {
|
||||||
|
Time string `json:"time"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MessageTTN struct {
|
||||||
|
Hardware_serial string `json:"hardware_serial"`
|
||||||
|
Metadata MetadataTTN `json:"metadata"`
|
||||||
|
Payload_raw string `json:"payload_raw"`
|
||||||
|
}
|
||||||
|
|
||||||
type MessageProperties struct {
|
type MessageProperties struct {
|
||||||
Time string `json:"Time"`
|
Time string `json:"Time"`
|
||||||
Payload_hex string `json:"payload_hex"`
|
Payload_hex string `json:"payload_hex"`
|
||||||
|
|
@ -344,6 +355,15 @@ func WriteStringToFile(s string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Convert2Hex(payload_raw string) (string, error) {
|
||||||
|
res := "error"
|
||||||
|
p, err := base64.StdEncoding.DecodeString(payload_raw)
|
||||||
|
if err == nil {
|
||||||
|
res = hex.EncodeToString(p)
|
||||||
|
}
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Init Redis
|
// Init Redis
|
||||||
initDB()
|
initDB()
|
||||||
|
|
@ -362,7 +382,8 @@ func main() {
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
var u Message
|
var message_swisscom Message
|
||||||
|
var message_ttn MessageTTN
|
||||||
if r.Body == nil {
|
if r.Body == nil {
|
||||||
http.Error(w, "Please send a request body", 400)
|
http.Error(w, "Please send a request body", 400)
|
||||||
return
|
return
|
||||||
|
|
@ -380,18 +401,45 @@ func main() {
|
||||||
log.Printf("BODY: %s", rdr1)
|
log.Printf("BODY: %s", rdr1)
|
||||||
r.Body = rdr2
|
r.Body = rdr2
|
||||||
|
|
||||||
err := json.NewDecoder(r.Body).Decode(&u)
|
// We look for the text string "mini-beieli" in the buffer, then it is a TTN Packet,
|
||||||
if err != nil {
|
// otherwise it should be a Swisscom Packet...
|
||||||
http.Error(w, err.Error(), 400)
|
|
||||||
return
|
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...
|
||||||
|
err := json.NewDecoder(r.Body).Decode(&message_ttn)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Time: " + message_ttn.Metadata.Time)
|
||||||
|
fmt.Println("Payload Raw: " + message_ttn.Payload_raw)
|
||||||
|
fmt.Println("DevEUI: " + message_ttn.Hardware_serial)
|
||||||
|
payload_hex, err := Convert2Hex(message_ttn.Payload_raw)
|
||||||
|
if err == nil {
|
||||||
|
DecodePayload(payload_hex, message_ttn.Hardware_serial, "N/A", 0, 0, true)
|
||||||
|
} else {
|
||||||
|
fmt.Println("Error: could not convert raw_package to hex: %s" + message_ttn.Payload_raw)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fmt.Printf("Seems to be a Swisscom Packet...\n")
|
||||||
|
// it is probably a Swisscom package...
|
||||||
|
err := json.NewDecoder(r.Body).Decode(&message_swisscom)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("Time: " + message_swisscom.Prop.Time)
|
||||||
|
fmt.Println("Payload Hex: " + message_swisscom.Prop.Payload_hex)
|
||||||
|
fmt.Println("DevEUI: " + message_swisscom.Prop.DevEUI)
|
||||||
|
fmt.Println("DevAddr: " + message_swisscom.Prop.DevAddr)
|
||||||
|
fmt.Printf("LrrLAT: %f\n", message_swisscom.Prop.LrrLAT)
|
||||||
|
fmt.Printf("LrrLON: %f\n", message_swisscom.Prop.LrrLON)
|
||||||
|
DecodePayload(message_swisscom.Prop.Payload_hex, message_swisscom.Prop.DevEUI, message_swisscom.Prop.DevAddr, message_swisscom.Prop.LrrLAT, message_swisscom.Prop.LrrLON, true)
|
||||||
}
|
}
|
||||||
fmt.Println("Time: " + u.Prop.Time)
|
|
||||||
fmt.Println("Payload Hex: " + u.Prop.Payload_hex)
|
|
||||||
fmt.Println("DevEUI: " + u.Prop.DevEUI)
|
|
||||||
fmt.Println("DevAddr: " + u.Prop.DevAddr)
|
|
||||||
fmt.Printf("LrrLAT: %f\n", u.Prop.LrrLAT)
|
|
||||||
fmt.Printf("LrrLON: %f\n", u.Prop.LrrLON)
|
|
||||||
DecodePayload(u.Prop.Payload_hex, u.Prop.DevEUI, u.Prop.DevAddr, u.Prop.LrrLAT, u.Prop.LrrLON, true)
|
|
||||||
})
|
})
|
||||||
log.Fatal(http.ListenAndServe(":8080", nil))
|
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue