云端RS485透传数据已经能接收到原始的Hex数据,但是这个数据不直观,于是我设置了四个物模型,分别用来展示传感器数值,但是试了很久都不能显示传感器数据。开始只用一个传感器,试着解析数据,但是始终每办法解析成功,数据解析的代码如下:
var PROPERTY_REPORT_METHOD = 'thing.event.property.post';
//上行数据,自定义格式转物模型JSON格式。 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();
//属性上报method。jsonMap['method'] = PROPERTY_REPORT_METHOD;//协议版本号,固定字段,取值1.0。jsonMap['version'] = '1.0';//表示该次请求的ID。jsonMap['id'] = new Date().getTime();var params = {}; //14、15对应产品属性中temperature。params['485wd'] = (dataView.getUint8(15)*256+dataView.getUint8(14))/10;//16、17对应产品属性中humidity。params['485sd'] = (dataView.getUint8(17)*256+dataView.getUint8(16)); jsonMap['params'] = params;
return jsonMap; } function transformPayload(topic, rawData) { var jsonObj = {} return jsonObj; } 我对代码一窍不通,们帮我想想办法,这个问题不解决,我的Web可视化就每办法进行呢。这个问题困扰我两个月了!
建议先参考物联网平台的帮助文档,请参见:
物模型数据解析使用示例:https://help.aliyun.com/document_detail/114621.html
JavaScript脚本示例:https://help.aliyun.com/document_detail/147612.html
假设你物模型中的“1号温度”的identify为:wendu1,其余的为wendu2,shidu1,shidu2。
整体上的思路应该是参考《物模型数据解析使用示例》模拟出上报属性需要返回的JSON格式数据,类似
{
"method": "thing.event.property.post",
"id": "2241348",
"params": {
"wendu1": 10,
"wendu2": 11,
"shidu1": 12,
"shidu2": 13,
},
"version": "1.0"
}
而你写的代码,需要向上述的JSON格式靠齐,目的是为了解析出这样格式的JSON数据以用于上报属性,具体可以参考《JavaScript脚本示例》:
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'] = PROPERTY_REPORT_METHOD; //ALink JSON格式,属性上报topic。
jsonMap['version'] = '1.0'; //ALink JSON格式,协议版本号固定字段。
jsonMap['id'] = '' + dataView.getInt32(1); //ALink JSON格式,标示该次请求id值。var params = {};
params['wendu1'] = uint8Array[0]; //对应产品属性中wendu1。
params['wendu2'] = uint8Array[1]; //对应产品属性中wendu2。
params['shidu1'] = uint8Array[2]; //对应产品属性中shidu1。
params['shidu2'] = uint8Array[3]; //对应产品属性中shidu2。
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;
}
可在数据解析页面传入原始的数据进行调试,查看是否输出目标JSON数据。
若无代码相关经验,建议可以直接拷贝用例,在此基础上修改即可。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。