设备数据千奇百怪?教你用 ThingsCloud 轻松处理上报数据

阅读时间:约 13 分钟

articles/2024/20251105194414_7dd1276167685f2d700c465c31305776.png

在物联网项目中,设备上报的数据格式五花八门,常常让我们头疼不已。有的设备上报的是嵌套 JSON,有的是 Base64 编码的二进制数据,还有的用自定义文本协议……

那么,如何高效、准确地将这些“原始数据”转化为结构清晰、可读性强、便于分析的 ThingsCloud 设备属性呢?别担心!ThingsCloud 提供了一套强大又灵活的数据格式处理机制,让你轻松应对各种复杂上报格式!

今天,我们就来手把手教你如何在 ThingsCloud 中对设备上报数据进行格式处理,从原始数据到可视化看板,一气呵成!✨


📦 为什么需要数据格式处理?

若设备上报属性时采用标准 JSON 格式,如 {"temperature": 25, "humidity": 60},平台会直接将 temperaturehumidity 解析为设备的属性。

然而,设备厂商出于兼容性、通信效率或历史原因,往往采用不同的数据格式。常见的包括:

  • JSON 嵌套结构:如 {"payload": {"temperature": 25}},平台无法直接提取 temperature 作为独立属性。
  • JSON 数组结构:如 {"sensorDatas": [{"flag": "temp", "value": "25"}]}
  • Base64 编码:LoRaWAN 等低功耗设备常将二进制数据编码为 Base64 字符串,如 A2fnAARoUgV9QAIGc/on
  • 自定义文本协议:如 $GPGGA,082403.000,3958.3000,N,...LBS=117.1390522_034.6651114

如果不处理,这些数据将无法被平台自动解析为标准属性,也就无法用于实时监控、告警、App面板、看板展示或历史分析


🔧 ThingsCloud 的两大处理利器

ThingsCloud 通过 消息规则(Message Rules) 提供两类核心处理能力:

1️⃣ 属性上报预处理规则

适用于设备上报标准的 JSON 格式,但结构复杂或需计算转换。
👉 典型场景:提取嵌套字段、数组展开、单位换算、生成衍生指标(如 THI 温热指数)。

2️⃣ 自定义数据上报规则

适用于设备通过 自定义数据流 上报的 HEX、Plaintext、JSON 等原始数据。
👉 典型场景:DTU 透传 Modbus 报文、LoRaWAN Base64 数据、GPS 模块原始 NMEA 语句。


🚀 实战案例:四种常见格式处理方法

✅ 案例 1:从属性上报的嵌套 JSON 中提取属性

原始上报

{
  "payload": {
    "temperature": 18.4,
    "humidity": 65.3
  }
}

属性上报预处理函数

module.exports = function (report_attributes) {
  if (report_attributes.payload) {
    Object.assign(report_attributes, report_attributes.payload);
  }
  return report_attributes;
}

结果:自动新增 temperaturehumidity 两个独立属性,可用于看板、App面板和告警。


✅ 案例 2:解析 LoRaWAN 设备属性上报的 Base64 数据

原始上报

{
  "data": "A2fnAARoUgV9QAIGc/on"
}

属性上报预处理函数

module.exports = function (report_attributes) {
  if (report_attributes.data !== undefined) {
    var buffer = Cloud.Utils.base64ToBuffer(report_attributes.data);
    report_attributes.data_hex = buffer.toString('hex'); // 仅用于调试
    
    let i = 0;
    if (buffer[0] == 0x01 && buffer[1] == 0x75) {
      report_attributes.battery = buffer.readInt8(2);
    }
    if (buffer[3] == 0x03 && buffer[4] == 0x67) {
      report_attributes.temperature = buffer.readInt16LE(4) / 10;
    }
    // ... 其他字段解析
  }
  return report_attributes;
}

结果:自动解码出电池、温度、湿度、CO2 等多个传感器数据。


✅ 案例 3:处理属性上报数组型传感器数据

原始上报

{
  "sensorDatas": [
    {"flag": "temperature", "value": "29.0813"},
    {"flag": "humidity", "value": "47.3777"}
  ]
}

属性上报预处理函数

module.exports = function (report_attributes) {
  if (report_attributes.sensorDatas) {
    report_attributes.sensorDatas.forEach(v => {
      report_attributes[v.flag] = parseFloat(v.value);
    });
  }
  return report_attributes;
}

结果:动态生成 temperaturehumidity 属性,适配多传感器灵活上报。


✅ 案例 4:从属性上报 GNSS 数据提取经纬度

原始上报

{
  "gps_gga": {
    "latitude": 32.74245,
    "longitude": 111.5542
  }
}

属性上报预处理函数

module.exports = function (report_attributes) {
  if (report_attributes.gps_gga?.latitude && report_attributes.gps_gga?.longitude) {
    report_attributes.location_gps = {
      lat: report_attributes.gps_gga.latitude,
      lng: report_attributes.gps_gga.longitude
    };
  }
  return report_attributes;
}

结果:生成标准 MapPoint 类型的 location_gps 属性,可直接用于看板或 App 的地图组件

✅ 案例 5:从自定义数据流上报的 plaintext 中提取经纬度

原始上报

GPS=E:117.1392,N:34.66583

自定义数据上报转属性上报函数

module.exports = function (identifier, data) {
/**
     * 参数:
     * identifier:  上报的自定义数据流标识符
     * data:        上报的自定义数据,二进制 Buffer格式
     * 返回值:
     * attributes:  生成设备属性
     */

    var attributes = {};
    const text = data.toString();
    
    if (text.substr(0, 4) == 'GPS=') {
        const tmp = text.split('=');
        if (tmp.length == 2) {
            const loc = tmp[1].split(',');
            if (loc.length == 2) {
                const lng = loc[0].substr(2) /1;
                const lat = loc[1].substr(2) /1;
                attributes.GPS_loc = {
                    lng: lng,
                    lat: lat,
                }
            }
        }
    }

    return attributes;
}

结果:生成标准 MapPoint 类型的 GPS_loc 属性,可直接用于看板或 App 的地图组件


📌 小贴士:所有规则云函数都支持 在线调试!你可以粘贴设备原始数据,实时查看处理结果,开发效率翻倍!


🎯 总结

无论你的设备使用何种协议、上报何种格式,ThingsCloud 都能帮你“化繁为简”

  • 标准 JSON?直接上报,秒级生效。
  • 嵌套/数组/Base64/自定义文本?用消息规则轻松解析。
  • 需要计算或联动?JavaScript 云函数任你发挥。

从此告别“数据孤岛”,让每一比特的设备数据都发挥最大价值!📊


🔥 立即体验:登录 ThingsCloud 控制台,创建你的第一条数据处理规则吧!
📘 更多示例:查看官方教程

想了解更多?立即访问 ThingsCloud官网 或阅读 设备接入指南,开启您的物联网设备管理之旅!

关于 ThingsCloud

ThingsCloud 是新一代物联网设备统一接入平台,帮助企业在极短的时间内搭建个性化的物联网平台和应用,并适应不断变化的发展需求。目前广泛应用于制造、电力、能源、环境、农业、楼宇、家居、教育、交通、物流、自动化等领域。

ThingsCloud 可接入各类网关,传感器、执行器、控制器、通信模组、智能硬件等,实现数据采集、远程控制,数据分析、告警通知、智能联动。还可以零代码生成项目应用 SaaS 和用户应用 App,并开放 API 和实时消息,便于业务系统集成和扩展开发。

通过使用 ThingsCloud,企业可以大大缩短搭建物联网系统的时间,节省软件开发费用,降低定制开发的风险,快速落地数字化和智能化项目。我们的客户遍布各行业,包括中国石化、中国铁塔、中国燃气、吉林大学、北控水务、ACE、中国民航大学、西安交通大学、精量电子、大秦铁路、宁波水利局等。

🚀 开箱即用的物联网平台

立即搭建您的 物联网平台

接入物联网设备搭建可视化看板生成专属 App
仅需不到 30 分钟,开启您的物联网之旅

开箱即用
无需部署
快速上手
10,000+ 企业信赖
6,000,000+ 设备接入
99.9% 服务可用性
信任与选择

5000+ 大型企业正在使用ThingsCloud

从初创公司到世界 500 强,企业选择 ThingsCloud 构建可靠的物联网解决方案

更多博客

应用场景

全球 80% 的数据将来自物联网,不论是传统行业还是新兴行业,都将利用更多有价值的数据来驱动业务,实现降本增效。