/* 示例数据: 设备上报属性数据: 传入参数: 0x000000000100320100000000 输出结果: {"method":"thing.event.property.post","id":"1","params":{"prop_float":0,"prop_int16":50,"prop_bool":1},"version":"1.0"} 属性设置的返回结果: 传入参数: 0x0300223344c8 输出结果: {"code":"200","data":{},"id":"2241348","version":"1.0"} */ function rawDataToProtocol(bytes) { var uint8Array = new Uint8Array(bytes.length); for (var i = 0; i < bytes.length; i++) { uint8Array[i] = bytes[i] & 0xff; } var dataView = new DataView(uint8Array.buffer, 0); var jsonMap = new Object(); var fHead = uint8Array[0]; // commandif (fHead == COMMAND_REPORT) { jsonMap['method'] = ALINK_PROP_REPORT_METHOD; //ALink JSON格式,属性上报topic。 jsonMap['version'] = '1.0'; //ALink JSON格式,协议版本号固定字段。 jsonMap['id'] = '' + dataView.getInt32(1); //ALink JSON格式,标示该次请求id值。var params = {}; params['prop_int16'] = dataView.getInt16(5); //对应产品属性中prop_int16。 params['prop_bool'] = uint8Array[7]; //对应产品属性中prop_bool。 params['prop_float'] = dataView.getFloat32(8); //对应产品属性中prop_float。 jsonMap['params'] = params; //ALink JSON格式,params标准字段。 } else if(fHead == COMMAND_SET_REPLY) { jsonMap['version'] = '1.0'; //ALink JSON格式,协议版本号固定字段。 jsonMap['id'] = '' + dataView.getInt32(1); //ALink JSON格式,标示该次请求id值。 jsonMap['code'] = ''+ dataView.getUint8(5); jsonMap['data'] = {}; } return jsonMap; }
这个函数如果用c语言在设备解析上传云端该如何编写?占用资源多吗?
.
如果你不想采用透明传输,那么 上述二进制的 0x000000000100320100000000 字节数组,就需要通过阿里Alink JSON协议规定的格式,进行数据上传了,比如上述内容打包为JSON格式如下(这是我以前写的一个C#的例子,C语言类似):
string topic = "/sys/" + ProductKey + "/" + deviceName + "/thing/event/property/post";
string json =
"{" +
"\"id\":\"" + (MessageID++).ToString() + "\"," +
"\"params\":" +
"{" +
"\"prop_int16\":123,"+
"\"prop_bool\":true,"+
"\"prop_float\":12.3,"+
"}," +
"\"method\":\"thing.event.property.post\"" +
"}";
C语言阿里官方相关的参考可以看 这个连接的,上传属性部分:
https://help.aliyun.com/document_detail/258239.html?spm=a2c4g.11186623.0.0.53ce2b5cjfvclE
另外还可以参考 Alink属性上传相关内容的具体介绍,相关JSON包的格式讲解的很清楚
https://help.aliyun.com/document_detail/89301.html?spm=a2c4g.11186623.0.0.75373e06yTOotd
数据解析请参考:https://help.aliyun.com/document_detail/68702.html
设备端建议使用link sdk 来实现,参考文档:https://help.aliyun.com/product/93051.html
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。