解码发送到 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 控制台的设备负载的主要内容,如果未能解决你的问题,请参考以下文章