问题描述
/*
示例数据:
设备上报属性数据:
传入参数:
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