From 8f7a285289bc476802e93b8d72d64998c6eef666 Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Mon, 31 Aug 2020 07:01:40 +0200 Subject: [PATCH] Extract data from mqtt json payload --- models/mo.go | 17 +++++++++++++++++ mqtt/mqtt.go | 25 ++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 models/mo.go diff --git a/models/mo.go b/models/mo.go new file mode 100644 index 0000000..1bfadbe --- /dev/null +++ b/models/mo.go @@ -0,0 +1,17 @@ +package models + +type Mo struct { + ID MoID `json:"id"` + MO MoMO `json:"mo"` +} + +type MoID struct { + PTU4_MAC string + PTU4_SN string +} + +type MoMO struct { + Action string `json:"action"` + Description string `json:"description"` + Number string `json:"number"` +} diff --git a/mqtt/mqtt.go b/mqtt/mqtt.go index 25d8749..940f784 100644 --- a/mqtt/mqtt.go +++ b/mqtt/mqtt.go @@ -2,19 +2,20 @@ package mqtt import ( "crypto/tls" - //"crypto/x509" "fmt" "log" "net/url" "strconv" "strings" - MQTT "github.com/eclipse/paho.mqtt.golang" - //"os" "mqttListener/Config" "mqttListener/models" "regexp" "time" + + MQTT "github.com/eclipse/paho.mqtt.golang" + + "encoding/json" ) /* @@ -126,6 +127,8 @@ var subscriptionHandler = func(client MQTT.Client, msg MQTT.Message) { fmt.Printf("MSG: \n%s\n", msg.Payload()) //fmt.Printf("* [%s] %s\n", msg.Topic(), string(msg.Payload())) + //------------------------------------------------------------------- + // create ID from topic regexpWithType := "\\/ATB\\/[A-Z]+\\/[0-9]+\\/[0-9]+\\/mo" regexpDefault := "\\/ATB\\/[0-9]+\\/[0-9]+\\/[0-9]+\\/[0-9]+\\/mo" @@ -160,5 +163,21 @@ var subscriptionHandler = func(client MQTT.Client, msg MQTT.Message) { device.SN = "t.b.d." device.LastMsg = "t.b.d" + //------------------------------------------------------------------- + // extract data from payload + bytes := []byte(msg.Payload()) + mo := models.Mo{} + err = json.Unmarshal(bytes, &mo) + if err != nil { + fmt.Println(err.Error()) + return + } + + device.MAC = mo.ID.PTU4_MAC + device.SN = mo.ID.PTU4_SN + + fmt.Printf("Device MAC = %s\n", device.MAC) + fmt.Printf("Device SN = %s\n", device.SN) + // TODO: store this device in database }