通过 Cocoa MQTT 库解码从 TN 发送的有效负载

问题描述 投票:0回答:1

我正在学习并尝试设计一个简单的应用程序,该应用程序从 The Thing Network 获取数据,但在尝试解码从 message.payload 中检索到的有效负载时遇到困难

func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message : CocoaMQTTMessage, id: UInt16)

有效负载 của tôi có dạng như sau:

didReceiveMessage: 0 CocoaMQTTMessage(topic: v3/nqh-demo@ttn/devices/eui-ac1f09fffe0b78e8/up, qos: qos0, payload: [123, 34, 101, 110, 100, 95, 100, 101, 118, 105, ...])
payload: [123, 34, 101, 110, 100, 95, 100, 101, 118, 105, 99, 101, 95, 105, 100, 115, 34, 58, 123, 34, 100, 101, 118, 105, 99, 101, 95, 105, 100, 34, 58, 34, 101, 117, 105, 45, 97, 99, 49, 102, 48, 57, 102, 102, 102, 101, 48, 98, 55, 56, 101, 56, 34, 44, 34, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 95, 105, 100, 115, 34, 58, 123, 34, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 95, 105, 100, 34, 58, 34, 110, 113, 104, 45, 100, 101, 109, 111, 34, 125, 44, 34, 100, 101, 118, 95, 101, 117, 105, 34, 58, 34, 65, 67, 49, 70, 48, 57, 70, 70, 70, 69, 48, 66, 55, 56, 69, 56, 34, 44, 34, 106, 111, 105, 110, 95, 101, 117, 105, 34, 58, 34, 48, 67, 56, 53, 56, 54, 54, 50, 70, 65, 52, 53, 65, 52, 53, 50, 34, 44, 34, 100, 101, 118, 95, 97, 100, 100, 114, 34, 58, 34, 50, 54, 48, 68, 49, 57, 55, 70, 34, 125, 44, 34, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 95, 105, 100, 115, 34, 58, 91, 34, 97, 115, 58, 117, 112, 58, 48, 49, 72, 57, 74, 70, 83, 89, 55, 69, 69, 90, 78, 90, 82, 74, 50, 66, 83, 67, 56, 83, 54, 49, 77, 81, 34, 44, 34, 103, 115, 58, 99, 111, 110, 110, 58, 48, 49, 72, 57, 70, 53, 75, 70, 49, 66, 65, 49, 51, 55, 74, 65, 75, 75, 75, 70, 86, 78, 86, 75, 56, 65, 34, 44, 34, 103, 115, 58, 117, 112, 58, 104, 111, 115, 116, 58, 48, 49, 72, 57, 70, 53, 75, 70, 57, 77, 65, 90, 65, 75, 90, 69, 67, 81, 49, 51, 90, 65, 82, 82, 90, 88, 34, 44, 34, 103, 115, 58, 117, 112, 108, 105, 110, 107, 58, 48, 49, 72, 57, 74, 70, 83, 89, 48, 68, 56, 57, 70, 83, 54, 51, 57, 65, 71, 55, 66, 69, 74, 72, 77, 87, 34, 44, 34, 110, 115, 58, 117, 112, 108, 105, 110, 107, 58, 48, 49, 72, 57, 74, 70, 83, 89, 48, 69, 56, 77, 90, 68, 89, 68, 72, 53, 53, 67, 83, 77, 78, 50, 89, 86, 34, 44, 34, 114, 112, 99, 58, 47, 116, 116, 110, 46, 108, 111, 114, 97, 119, 97, 110, 46, 118, 51, 46, 71, 115, 78, 115, 47, 72, 97, 110, 100, 108, 101, 85, 112, 108, 105, 110, 107, 58, 48, 49, 72, 57, 74, 70, 83, 89, 48, 69, 53, 68, 54, 90, 90, 54, 84, 66, 51, 88, 75, 84, 66, 83, 70, 83, 34, 44, 34, 114, 112, 99, 58, 47, 116, 116, 110, 46, 108, 111, 114, 97, 119, 97, 110, 46, 118, 51, 46, 78, 115, 65, 115, 47, 72, 97, 110, 100, 108, 101, 85, 112, 108, 105, 110, 107, 58, 48, 49, 72, 57, 74, 70, 83, 89, 55, 69, 78, 88, 57, 51, 89, 56, 75, 75, 54, 81, 81, 75, 55, 56, 56, 56, 34, 93, 44, 34, 114, 101, 99, 101, 105, 118, 101, 100, 95, 97, 116, 34, 58, 34, 50, 48, 50, 51, 45, 48, 57, 45, 48, 53, 84, 49, 48, 58, 53, 54, 58, 53, 53, 46, 48, 50, 50, 53, 52, 51, 50, 51, 51, 90, 34, 44, 34, 117, 112, 108, 105, 110, 107, 95, 109, 101, 115, 115, 97, 103, 101, 34, 58, 123, 34, 115, 101, 115, 115, 105, 111, 110, 95, 107, 101, 121, 95, 105, 100, 34, 58, 34, 65, 89, 112, 104, 66, 65, 78, 74, 55, 53, 115, 57, 120, 114, 105, 105, 111, 115, 74, 47, 86, 103, 61, 61, 34, 44, 34, 102, 95, 99, 110, 116, 34, 58, 53, 56, 50, 44, 34, 114, 120, 95, 109, 101, 116, 97, 100, 97, 116, 97, 34, 58, 91, 123, 34, 103, 97, 116, 101, 119, 97, 121, 95, 105, 100, 115, 34, 58, 123, 34, 103, 97, 116, 101, 119, 97, 121, 95, 105, 100, 34, 58, 34, 101, 117, 105, 45, 97, 99, 49, 102, 48, 57, 102, 102, 102, 101, 48, 99, 98, 48, 51, 49, 45, 110, 113, 104, 34, 44, 34, 101, 117, 105, 34, 58, 34, 65, 67, 49, 70, 48, 57, 70, 70, 70, 69, 48, 67, 66, 48, 51, 49, 34, 125, 44, 34, 116, 105, 109, 101, 115, 116, 97, 109, 112, 34, 58, 51, 57, 56, 56, 48, 49, 52, 56, 57, 52, 44, 34, 114, 115, 115, 105, 34, 58, 45, 55, 44, 34, 99, 104, 97, 110, 110, 101, 108, 95, 114, 115, 115, 105, 34, 58, 45, 55, 44, 34, 115, 110, 114, 34, 58, 49, 52, 46, 51, 44, 34, 102, 114, 101, 113, 117, 101, 110, 99, 121, 95, 111, 102, 102, 115, 101, 116, 34, 58, 34, 45, 49, 51, 51, 54, 57, 34, 44, 34, 108, 111, 99, 97, 116, 105, 111, 110, 34, 58, 123, 34, 108, 97, 116, 105, 116, 117, 100, 101, 34, 58, 50, 49, 46, 48, 48, 53, 50, 52, 48, 53, 56, 56, 49, 52, 55, 56, 50, 56, 44, 34, 108, 111, 110, 103, 105, 116, 117, 100, 101, 34, 58, 49, 48, 53, 46, 56, 49, 49, 48, 51, 49, 51, 51, 55, 54, 56, 57, 51, 54, 44, 34, 115, 111, 117, 114, 99, 101, 34, 58, 34, 83, 79, 85, 82, 67, 69, 95, 82, 69, 71, 73, 83, 84, 82, 89, 34, 125, 44, 34, 117, 112, 108, 105, 110, 107, 95, 116, 111, 107, 101, 110, 34, 58, 34, 67, 105, 89, 75, 74, 65, 111, 89, 90, 88, 86, 112, 76, 87, 70, 106, 77, 87, 89, 119, 79, 87, 90, 109, 90, 109, 85, 119, 89, 50, 73, 119, 77, 122, 69, 116, 98, 110, 70, 111, 69, 103, 105, 115, 72, 119, 110, 47, 47, 103, 121, 119, 77, 82, 67, 117, 106, 116, 72, 116, 68, 104, 111, 77, 67, 80, 97, 83, 51, 75, 99, 71, 69, 73, 51, 87, 110, 118, 119, 67, 73, 76, 67, 88, 50, 77, 71, 73, 115, 104, 89, 61, 34, 44, 34, 99, 104, 97, 110, 110, 101, 108, 95, 105, 110, 100, 101, 120, 34, 58, 49, 44, 34, 114, 101, 99, 101, 105, 118, 101, 100, 95, 97, 116, 34, 58, 34, 50, 48, 50, 51, 45, 48, 57, 45, 48, 53, 84, 49, 48, 58, 53, 54, 58, 53, 52, 46, 55, 57, 55, 52, 50, 48, 51, 48, 49, 90, 34, 125, 93, 44, 34, 115, 101, 116, 116, 105, 110, 103, 115, 34, 58, 123, 34, 100, 97, 116, 97, 95, 114, 97, 116, 101, 34, 58, 123, 34, 108, 111, 114, 97, 34, 58, 123, 34, 98, 97, 110, 100, 119, 105, 100, 116, 104, 34, 58, 49, 50, 53, 48, 48, 48, 44, 32, 34, 115, 112, 114, 101, 97, 100, 105, 110, 103, 95, 102, 97, 99, 116, 111, 114, 34, 58, 49, 48, 44, 32, 34, 99, 111, 100, 105, 110, 103, 95, 114, 97, 116, 101, 34, 58, 34, 52, 47, 53, 34, 125, 125, 44, 32, 34, 102, 114, 101, 113, 117, 101, 110, 99, 121, 34, 58, 34, 57, 50, 51, 52, 48, 48, 48, 48, 48, 34, 44, 32, 34, 116, 105, 109, 101, 115, 116, 97, 109, 112, 34, 58, 51, 57, 56, 56, 48, 49, 52, 56, 57, 52, 125, 44, 34, 114, 101, 99, 101, 105, 118, 101, 100, 95, 97, 116, 34, 58, 34, 50, 48, 50, 51, 45, 48, 57, 45, 48, 53, 84, 49, 48, 58, 53, 54, 58, 53, 52, 46, 55, 57, 56, 55, 54, 51, 49, 53, 51, 90, 34, 44, 34, 99, 111, 110, 115, 117, 109, 101, 100, 95, 97, 105, 114, 116, 105, 109, 101, 34, 58, 34, 48, 46, 50, 56, 56, 55, 54, 56, 115, 34, 44, 34, 108, 111, 99, 97, 116, 105, 111, 110, 115, 34, 58, 123, 34, 117, 115, 101, 114, 34, 58, 123, 34, 108, 97, 116, 105, 116, 117, 100, 101, 34, 58, 50, 49, 46, 48, 48, 51, 54, 49, 49, 57, 52, 50, 52, 53, 56, 50, 48, 55, 44, 34, 108, 111, 110, 103, 105, 116, 117, 100, 101, 34, 58, 49, 48, 53, 46, 56, 48, 56, 55, 50, 48, 50, 53, 56, 53, 56, 52, 48, 55, 44, 34, 115, 111, 117, 114, 99, 101, 34, 58, 34, 83, 79, 85, 82, 67, 69, 95, 82, 69, 71, 73, 83, 84, 82, 89, 34, 125, 125, 44, 34, 110, 101, 116, 119, 111, 114, 107, 95, 105, 100, 115, 34, 58, 123, 34, 110, 101, 116, 95, 105, 100, 34, 58, 34, 48, 48, 48, 48, 49, 51, 34, 44, 34, 116, 101, 110, 97, 110, 116, 95, 105, 100, 34, 58, 34, 116, 116, 110, 34, 44, 34, 99, 108, 117, 115, 116, 101, 114, 95, 105, 100, 34, 58, 34, 97, 117, 49, 34, 44, 34, 99, 108, 117, 115, 116, 101, 114, 95, 97, 100, 100, 114, 101, 115, 115, 34, 58, 34, 97, 117, 49, 46, 99, 108, 111, 117, 100, 46, 116, 104, 101, 116, 104, 105, 110, 103, 115, 46, 110, 101, 116, 119, 111, 114, 107, 34, 125, 125, 125] 

我尝试按照以下方式解码,但不起作用:https://www.dropbox.com/sh/9fq1ydgs40d6hli/ACORN_0a1nS2fP8MtCa_wlsa?dl=0 你能告诉我如何解码它吗?或者我可以求一个可以在ios编程中使用的类似文档的链接吗?

ios swift mobile mqtt lorawan
1个回答
0
投票

您当前的有效负载是 JSON,您可以使用以下命令查看它:

print("Message stringified: \(message.string)")

由于它是 JSON,因此您可以使用 Coddle 结构和

JSONDecoder
JSONSerialization

let jsonData = Data(message.payload)
let jsonDict = try! JSONSerialization.jsonObject(with: jsonData)
print(jsonDict) 

输出:

{
    "correlation_ids" =     (
        "as:up:01H9JFSY7EEZNZRJ2BSC8S61MQ",
        "gs:conn:01H9F5KF1BA137JAKKKFVNVK8A",
        "gs:up:host:01H9F5KF9MAZAKZECQ13ZARRZX",
        "gs:uplink:01H9JFSY0D89FS639AG7BEJHMW",
        "ns:uplink:01H9JFSY0E8MZDYDH55CSMN2YV",
        "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H9JFSY0E5D6ZZ6TB3XKTBSFS",
        "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H9JFSY7ENX93Y8KK6QQK7888"
    );
    "end_device_ids" =     {
        "application_ids" =         {
            "application_id" = "nqh-demo";
        };
        "dev_addr" = 260D197F;
        "dev_eui" = AC1F09FFFE0B78E8;
        "device_id" = "eui-ac1f09fffe0b78e8";
        "join_eui" = 0C858662FA45A452;
    };
    "received_at" = "2023-09-05T10:56:55.022543233Z";
    "uplink_message" =     {
        "consumed_airtime" = "0.288768s";
        "f_cnt" = 582;
        locations =         {
            user =             {
                latitude = "21.00361194245821";
                longitude = "105.8087202585841";
                source = "SOURCE_REGISTRY";
            };
        };
        "network_ids" =         {
            "cluster_address" = "au1.cloud.thethings.network";
            "cluster_id" = au1;
            "net_id" = 000013;
            "tenant_id" = ttn;
        };
        "received_at" = "2023-09-05T10:56:54.798763153Z";
        "rx_metadata" =         (
                        {
                "channel_index" = 1;
                "channel_rssi" = "-7";
                "frequency_offset" = "-13369";
                "gateway_ids" =                 {
                    eui = AC1F09FFFE0CB031;
                    "gateway_id" = "eui-ac1f09fffe0cb031-nqh";
                };
                location =                 {
                    latitude = "21.00524058814783";
                    longitude = "105.8110313376894";
                    source = "SOURCE_REGISTRY";
                };
                "received_at" = "2023-09-05T10:56:54.797420301Z";
                rssi = "-7";
                snr = "14.3";
                timestamp = 3988014894;
                "uplink_token" = "CiYKJAoYZXVpLWFjMWYwOWZmZmUwY2IwMzEtbnFoEgisHwn//gywMRCujtHtDhoMCPaS3KcGEI3WnvwCILCX2MGIshY=";
            }
        );
        "session_key_id" = "AYphBANJ75s9xriiosJ/Vg==";
        settings =         {
            "data_rate" =             {
                lora =                 {
                    bandwidth = 125000;
                    "coding_rate" = "4/5";
                    "spreading_factor" = 10;
                };
            };
            frequency = 923400000;
            timestamp = 3988014894;
        };
    };
}

现在由您来检索所需的值。

© www.soinside.com 2019 - 2024. All rights reserved.