解码发送到 Helium 控制台的设备负载

Posted

技术标签:

【中文标题】解码发送到 Helium 控制台的设备负载【英文标题】:Decoding a device payload sent to the Helium Console 【发布时间】:2021-09-11 21:33:45 【问题描述】:

所以我在 Helium 控制台中定义了一个集成(即 IoT LoRaWAN 网络服务)。当我测试从我的 IoT 设备向我的 Helium 控制台集成端点发送数据时,我可以看到有效负载。我可以手动将其解码回正确的 JSON 请求正文。但是我无法在 Helium 控制台中定义一个自定义函数,该函数将自动执行此集成。我的 IoT 设备正在序列化环境数据的 MsgPack 有效负载,然后将其发送到 Helium 控制台集成端点。 Helium 控制台自定义功能允许使用 javascript,虽然只是简单的框架,没有任何要求、导入等。

下面是可以手动解码payload的Python脚本。如果有人熟悉这个领域,我会对建议感兴趣。有可用于 Helium 的预定义解码器,但没有一个与我的硬件完全匹配。

如果有人为 Helium 控制台集成创建了自定义解码功能,我会很好奇如何将其淘汰。这里有一些关于这个的信息 --> https://docs.helium.com/use-the-network/console/functions/.

import ssl, sys, json, base64
import msgpack

payload = "haJiVspAozMzo3RfQxilZWNfbVMWonBoB6NvcnAC"

# decode the payload from base64 and unpack
b64 = base64.b64decode(payload)
mp_dict = msgpack.unpackb(b64)

print(mp_dict) # output is 'bV': 5.099999904632568, 't_C': 24, 'orp': 2, 'ph': 7, 'ec_mS': 22

【问题讨论】:

【参考方案1】:

我没有重新发明***,而是修改了在我的设备上运行的 Arduino 代码。拉入 CayenneLPP 库我手动编码我需要的内容,以便 Helium 控制台的罐装 CayenneLPP 解码功能可以正确解析数据。

下面的Arduino代码sn-p。

#include <CayenneLPP.h>
...

/*CayenneLPP variable*/
CayenneLPP lpp(51);

...

static void prepareTxFrame( uint8_t port )

    appDataSize = lpp.getSize();
    uint8_t lppBuffer[128];
    memcpy(lppBuffer, lpp.getBuffer(), 128); 
    memcpy(appData, lppBuffer, lpp.getSize());    


...

// The loop function is called in an endless loop
void loop()

    lpp.reset();
    lpp.addTemperature(1, 22.5);
    lpp.addBarometricPressure(2, 1073.21);
    lpp.addGPS(3, 52.37365, 4.88650, 2);

    ...

    LoRaWAN.displaySending();
    prepareTxFrame( appPort );
    LoRaWAN.send(loraWanClass);

    ...
 
   

【讨论】:

以上是关于解码发送到 Helium 控制台的设备负载的主要内容,如果未能解决你的问题,请参考以下文章

ios apns 没有一致地发送到设备

如何使用 FCM 向 iOS 发送通知?

将 kubernetes(GKE) 服务层指标发送到 GCP 负载均衡器

无需用户操作即可发送 ios 推送消息

APNS 是不是理解 UTF-8 编码的有效负载

Amazon SNS GCM/FCM 消息负载