透传的音频数据 php,数据透传解析

数据透传解析

更新时间:2018-10-25 09:16:45

透传脚本功能介绍

脚本只需要支持以下两个方法即可接入到平台:

Alink协议数据转二进制数据

二进制数据转Alink协议数据

954697f6286aab90f5d7c220a83bea77.png

透传脚本相关的操作请参考脚本操作。

脚本定义

语言定义

目前脚本仅支持符合ECMAScript 5.1的JavaScript语法。

方法定义

Alink协议数据转二进制数据

方法如下:

解析服务端发送的AlinkJson数据,并转换为二进制数据返回

function protocalToRawData(jsonObj){

return rawdata;

}

参数定义:

输入参数jsonObj :符合产品TSL定义的Alink协议格式数据, 如:

{"method":"thing.service.property.set","id":"12345","version":"1.0","params":{"prop_float":123.452, "prop_int16":333, "prop_bool":1}}

返回参数 :二进制byte数组, 如

0x0100003039014d0142f6e76d

二进制数据转Alink协议数据

方法如下:

解析设备端发送的二进制数据,并转换为AlinkJson数据返回

function rawDataToProtocal(rawData){

return jsonObj;

}

参数定义:

输入参数rawData :二进制byte数组, 如

0x00002233441232013fa00000

返回参数 :符合产品TSL定义的Alink协议格式数据, 如:

{"method":"thing.event.property.post","id":"2241348","params":{"prop_float":1.25,"prop_int16":4658,"prop_bool":1},"version":"1.0"}

自动生成脚本

通过该功能我们会直接读取TSL数据, 并使用云平台定制的协议直接生成对应的脚本文件。但需要注意的是, 使用该功能时请配套使用为了设备端开发的MCUSDK(使用同一版本定制协议), 详情参考MCUSDK文档

示例demo

相关产品操作

在自定义的产品中添加属性, 如下图, 如需了解操作详情, 请参考功能定义

fd348c4b00c501f8236e5a5dfacaf47c.png

dd4d926ae5f33afee3986a6ca43df67d.png

绑定脚本代码

把脚本代码复制到如下输入框中:

参考代码:

0cf9e0939e80edded800c4f91b933ac5.png

var COMMAND_REPORT = 0x00;

var COMMAND_SET = 0x01;

var ALINK_PROP_REPORT_METHOD = 'thing.event.property.post'; //标准ALink协议topic, 设备 上传属性数据到 云端

var ALINK_PROP_SET_METHOD = 'thing.service.property.set'; //标准ALink协议topic, 云端 下发属性控制指令 到设备端

/*

示例数据:

传入参数 ->

0x00002233441232013fa00000

输出结果 ->

{"method":"thing.event.property.post","id":"2241348",

"params":{"prop_float":1.25,"prop_int16":4658,"prop_bool":1},

"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]; // command

if (fHead == COMMAND_REPORT)

{

jsonMap['method'] = ALINK_PROP_REPORT_METHOD; //Alink协议 - 属性上报topic

jsonMap['version'] = '1.0'; //Alink协议 - 协议版本号固定字段

jsonMap['id'] = '' + dataView.getInt32(1); //Alink协议 - 标示该次请求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协议 - params标准字段

}

return jsonMap;

}

/*

示例数据:

传入参数 ->

{"method":"thing.service.property.set","id":"12345","version":"1.0","params":{"prop_float":123.452, "prop_int16":333, "prop_bool":1}}

输出结果 ->

0x0100003039014d0142f6e76d

*/

function protocolToRawData(json)

{

var method = json['method'];

var id = json['id'];

var version = json['version'];

var payloadArray = [];

if (method == ALINK_PROP_SET_METHOD) // 属性设置

{

var params = json['params'];

var prop_float = params['prop_float'];

var prop_int16 = params['prop_int16'];

var prop_bool = params['prop_bool'];

//按照自定义协议格式拼接 rawdata

payloadArray = payloadArray.concat(buffer_uint8(COMMAND_SET)); // command字段

payloadArray = payloadArray.concat(buffer_int32(parseInt(id))); // Alink协议 'id'

payloadArray = payloadArray.concat(buffer_int16(prop_int16)); // 属性'prop_int16'的值

payloadArray = payloadArray.concat(buffer_uint8(prop_bool)); // 属性'prop_bool'的值

payloadArray = payloadArray.concat(buffer_float32(prop_float)); // 属性'prop_float'的值

}

return payloadArray;

}

//以下是部分辅助函数

function buffer_uint8(value)

{

var uint8Array = new Uint8Array(1);

var dv = new DataView(uint8Array.buffer, 0);

dv.setUint8(0, value);

return [].slice.call(uint8Array);

}

function buffer_int16(value)

{

var uint8Array = new Uint8Array(2);

var dv = new DataView(uint8Array.buffer, 0);

dv.setInt16(0, value);

return [].slice.call(uint8Array);

}

function buffer_int32(value)

{

var uint8Array = new Uint8Array(4);

var dv = new DataView(uint8Array.buffer, 0);

dv.setInt32(0, value);

return [].slice.call(uint8Array);

}

function buffer_float32(value)

{

var uint8Array = new Uint8Array(4);

var dv = new DataView(uint8Array.buffer, 0);

dv.setFloat32(0, value);

return [].slice.call(uint8Array);

}protocolToRawData 的返回值需要是个数组,例如 ["123"]。

数据测试

设备上报数据测试数据

0x00002233441232013fa00000

上报数据输出结果

{"method":"thing.event.property.post","id":"2241348",

"params":{"prop_float":1.25,"prop_int16":4658,"prop_bool":1},

"version":"1.0"}

设备接收数据测试数据

{"method":"thing.service.property.set","id":"12345","version":"1.0","params":{"prop_float":123.452, "prop_int16":333, "prop_bool":1}}

接收数据输出结果

0x0100003039014d0142f6e76d

Demo也支持在本地环境中进行调用

// Test Demo

function Test()

{

//0x001232013fa00000

var rawdata_report_prop = new Buffer([

0x00, //固定command头, 0代表是上报属性

0x00, 0x22, 0x33, 0x44, //对应id字段, 标记请求的序号

0x12, 0x32, //两字节 int16, 对应属性 prop_int16

0x01, //一字节 bool, 对应属性 prop_bool

0x3f, 0xa0, 0x00, 0x00 //四字节 float, 对应属性 prop_float

]);

rawDataToProtocol(rawdata_report_prop);

var setString = new String('{"method":"thing.service.property.set","id":"12345","version":"1.0","params":{"prop_float":123.452, "prop_int16":333, "prop_bool":1}}');

protocolToRawData(JSON.parse(setString));

}

Test();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值