LoRaWAN 子设备上报数据解析示例
约 374 字大约 1 分钟
LoRaWAN 子设备上报数据解析示例
客户通过 LoRaWAN 网关,将温湿度传感器、人体感应传感器、电能表、水浸传感器等多种不同的 LoRaWAN 子设备接入 ThingsCloud。LoRaWAN 子设备发送给网关的数据采用 base64 编码,LoRaWAN 网关并没有在本地解码数据,而是将数据直接透传给 ThingsCloud。
我们通过 ThingsCloud 消息规则中的 属性上报预处理规则,使用云函数来解码 LoRaWAN 设备上报的数据。
创建规则时,选择属性上报预处理,如下图:
然后添加一个 预处理函数 的操作,如下图:
使用 JavaScript
编写一段云函数,如下图:
module.exports = function (report_attributes) {
/**
* report_attributes: 上报的属性对象,同时作为函数返回值。函数中可更新属性对象。
*/
if (report_attributes.data !== undefined) {
// 利用内置函数,将 LoRaWAN 设备上报的 base64 格式的 data 转为二进制数据。
var buffer = Cloud.Utils.base64ToBuffer(report_attributes.data);
// 根据设备厂商的协议,对每一位进行相应的判断和解析。
if (buffer[0] === 0x00 && buffer[1] === 0x01 && buffer[2] === 0x04) {
if (buffer[3] === 0x04) {
// voltage
var voltage = (buffer[4] + buffer[5]) / 1000;
// 将提取的数值,添加到属性对象中。
report_attributes.voltage = voltage;
}
if (buffer[6] === 0x7d && buffer[7] === 0x00) {
report_attributes.v_flag = 0;
} else {
report_attributes.v_flag = 1;
}
if (buffer[8] === 0x77 && buffer[9] === 0x00) {
report_attributes.rm_flag = 0;
} else {
report_attributes.rm_flag = 1;
}
if (buffer[10] === 0x17 && buffer[11] === 0x00) {
// alarm
report_attributes.alarm = 0;
} else {
report_attributes.alarm = 1;
}
}
}
return report_attributes;
};
详细了解 ThingsCloud 消息规则,请浏览 消息规则