在NodeRED msg输出中,我看到十六进制而不是数字。
我在nodeRED中有一个小的解码功能。它将Cayenne LPP有效负载读作缓冲对象。有效载荷源是LoRaWAN温度传感器。
有效载荷的十六进制看起来像这样(分解为易读性)
010001 020000 030000 0402015A 0567011F 0665000D 0771FFA0 FFFBFC34
我试图阅读第5节(或Cayenne对象05),并将其转换为温度。
我忽略05 - 那是对象编号 我忽略了67 - 这就是说“我是一个温度值' 我使用的是011F值 - 这就是我想要的温度。我必须除以10。
如果我将它转换为calc到dec,我得到287 - 其中等于28.7度 这是对的。
我的解码看起来像这样:
var raw = msg.payload;
buf = Buffer.from (raw, "hex");
msg.environment = new Object();
newtemp=buf.readInt16BE(15);
newtemp = newtemp / 10;
msg.environment.temp=newtemp;
return msg;
当我在调试窗口中查看结果时,我看到:(由我减少到只有临时值)
0x1c.b33333333333
如果我使用此代码
var raw = msg.payload;
buf = Buffer.from (raw, "hex");
newtemp=buf.readInt16BE(15);
newtemp = newtemp / 10;
var environment = {temp:newtemp};
return environment;
我在调试窗口中得到了这个:
temp:28.8
这与继承有关吗? 如何使顶级代码工作,以便msg具有所有数据,而不仅仅是具有温度的单个对象?