设备上报二进制数据在 IoT 平台解析实践

简介: 设备上报二进制数据在 IoT 平台解析实践

设备上报二进制数据在 IoT 平台解析实践


在IoT场景中,很多传感器采集到的是私有协议二进制数据流,设备端又不具备转换成结构化JSON的能力,这时设备可以通过自定义Topic上报二进制数据,在IoT物联网平台支持云端配置解析脚本,动态转换成结构化的JSON数据。

完整端到端开发过程如下:

  1. 明确二进制上报的Topic和数据格式规则
  2. 云端预先配置针对指定Topic的原始数据配置JS解析脚本
  3. 在脚本解析模拟数据输入,校验脚本业务逻辑正确后,提交到IoT云端
  4. 运行设备,指定Topic上报原始数据
  5. 云端日志服务查看数据解析过程

我们以手表为例,传感器上报hex进制数据,到IoT物联网平台,在云端解析,最终以结构化JSON流转到业务系统。

1.技术架构方案

私有协议数据转换链路:

消息转换前后变化:

2云端开发

产品定义和消息通信Topic选择
image.png

数据转换脚本
原始数据:
0x035e8192fd0000000d0000001b00000a8c

数据业务格式:
image.png
云端产品数据解析脚本配置
image.png

完整脚本内容

/**
 * 将设备自定义topic数据转换为json格式数据, 设备上报数据到物联网平台时调用
 * 入参:topic   字符串,设备上报消息的topic
 * 入参:rawData byte[]数组                  不能为空
 * 出参:jsonObj JSON对象                    不能为空
 */
function transformPayload(topic, rawData) {
    var jsonObj = {}
/*
原始hex数据 : 0x035e8192fd0000000d0000001b00000a8c
转换后JSON数据 : 
{
  "heartbeat": 15,
  "id": 1585549855,
  "steps": 2700,
  "speed": 56
}
*/
    if (topic.endsWith('/user/update')) {
            var uint8Array = new Uint8Array(rawData.length);
            for (var i = 0; i < rawData.length; i++) {
                uint8Array[i] = rawData[i] & 0xff;
            }
            var dataView = new DataView(uint8Array.buffer, 0);
            var fHead = uint8Array[0]; // command
            if (fHead == 0x03) {
                //
                jsonObj['id'] = dataView.getInt32(1);
                //心跳
                jsonObj['heartbeat'] = dataView.getInt32(5);
                //速度
                jsonObj['speed'] = dataView.getInt32(9);
                //总步数
                jsonObj['steps'] = dataView.getInt32(13);
            }
    }
    return jsonObj;
}

3设备端开发

设备上报hex原始数据的代码片段:

const mqtt = require('aliyun-iot-mqtt');

//设备身份
const options = {
    productKey: "a1kaK7XC8oB",
    deviceName: "BlXj1yasMJXmpKxymoUC",
    deviceSecret: "41798535d799c60c8f67f02efd28b01c",
    regionId: "cn-shanghai"
};

//建立连接
const client = mqtt.getAliyunIotMqttClient(options);

// 消息Topic携带?_sn=default标识
const topic = `/${options.productKey}/${options.deviceName}/user/update?_sn=default`;
// 原始数据
var payloadArray = [ 3, 94, 129, 169, 59, 0, 0, 0, 23, 0, 0, 0, 79, 0, 0, 30, 220 ];
var payload = new Buffer(payloadArray);

// 发布数据到topic
client.publish(topic, payload);

4运行日志

设备上报原始hex数据日志

image.png

往期推荐

[

1、39张传感器工作原理GIF图汇总
2、智能手持测温枪开发实践
3、JMeter压测MQTT服务性能实战
4、IoT物联网平台日志服务详解
5、自建MQTT集群迁移阿里云IoT实践
6、工业Modbus电力104规约接入IoT平台
7、设备免烧录三元组,即时注册解决方案
8、IoT+TSDB+Quick BI 搭建楼宇环境监控
9、JS全栈开发,构建智能家居小程序

相关文章
|
缓存 边缘计算 安全
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
711 7
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek 实践应用解析:合力亿捷智能客服迈向 “真智能” 时代
DeepSeek作为人工智能领域的创新翘楚,凭借领先的技术实力,在智能客服领域掀起变革。通过全渠道智能辅助、精准对话管理、多语言交互、智能工单处理、个性化推荐、情绪分析及反馈监控等功能,大幅提升客户服务效率和质量,助力企业实现卓越升级,推动智能化服务发展。
513 1
|
机器学习/深度学习 人工智能 监控
鸿蒙赋能智慧物流:AI类目标签技术深度解析与实践
在数字化浪潮下,物流行业面临变革,传统模式的局限性凸显。AI技术为物流转型升级注入动力。本文聚焦HarmonyOS NEXT API 12及以上版本,探讨如何利用AI类目标签技术提升智慧物流效率、准确性和成本控制。通过高效数据处理、实时监控和动态调整,AI技术显著优于传统方式。鸿蒙系统的分布式软总线技术和隐私保护机制为智慧物流提供了坚实基础。从仓储管理到运输监控再到配送优化,AI类目标签技术助力物流全流程智能化,提高客户满意度并降低成本。开发者可借助深度学习框架和鸿蒙系统特性,开发创新应用,推动物流行业智能化升级。
455 1
|
存储 自然语言处理 监控
深度解析淘宝商品评论API接口:技术实现与应用实践
淘宝商品评论API接口是电商数据驱动的核心工具,帮助开发者高效获取用户评价、画像及市场趋势。其核心功能包括多维度信息采集、筛选排序、动态更新、OAuth 2.0认证和兼容多种请求方式。通过该接口,开发者可进行商品优化、竞品分析、舆情监控等。本文详细解析其技术原理、实战应用及挑战应对策略,助力开启数据驱动的电商运营新篇章。
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
509 2
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1280 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
526 4
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。

推荐镜像

更多
  • DNS