开发者社区 > 物联网 > 正文

一个RTU同时接了多个485传感器,已通过485透传数据到云端,如何在云端解析出每个传感器的数值?

刚好手上有一个RTU设备,自带4路模拟量输入和一路485输入,485接口下接了两个温湿度传感器,自己在云端物模型配置如下:

云端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可视化就每办法进行呢。这个问题困扰我两个月了!

展开
收起
1936408524768880 2022-09-14 10:13:21 272 0
1 条回答
写回答
取消 提交回答
  • 专注物联网前沿技术,提供最热的物联网干货。

    建议先参考物联网平台的帮助文档,请参见:

    物模型数据解析使用示例: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数据。

    若无代码相关经验,建议可以直接拷贝用例,在此基础上修改即可。

    2022-09-14 17:00:50
    赞同 展开评论 打赏

物联网领域前沿技术分享与交流

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像