var ALINK_ID = "12345"; var ALINK_VERSION = "1.1"; var ALINK_PROP_POST_METHOD = 'thing.event.property.post'; // var ALINK_EVENT_TEMPERR_METHOD = 'thing.event.Tem pError.post'; // var ALINK_EVENT_HUMIERR_METHOD = 'thing.event.Hum iError.post'; var ALINK_PROP_SET_METHOD = 'thing.service.property.set'; // var ALINK_SERVICE_THSET_METHOD = 'thing.service.SetTem pHum iThreshold'; /* * * * * * * 传入参数 -> * 0102 // 共2个字节 * 输出结果 -> * {"m ethod":"thing.event.TempError.post","id":"12345","params":{"Tem perature": 2},"version":"1.1"} * 传入参数 -> * 0202 // 共2个字节 * 输出结果 -> * {"m ethod":"thing.event.Hum iError.post","id":"12345","params":{"Hum idity":2}, "version":"1.1"} */ /*此函数用于实现设备上发数据到物模型的转换*/ function rawDataToProtocol(bytes) { /*将设备上报的RAW数据转换为数组其中bytes对象中存储着设备上报RAW数据*/ var uint8Array = new Uint8Array(bytes.length); for (var i = 0; i < bytes.length; i++) { uint8Array[i] = bytes[i] & 0xff; } var params = {}; // 定义属性存放对象 var jsonMap = {}; // 定义模拟Alink数据报对象 /*填写Alink数据报协议头部分*/ jsonMap['version'] = ALINK_VERSION; // Alink 协议版本号 jsonMap['id'] = ALINK_ID; // 模拟消息ID jsonMap['method'] = ALINK_PROP_POST_METHOD; // 模拟设备上行数据方法->设备属性上报 /*填写Alink数据报属性部分*/ params['speed'] = uint8Array[0]; // 将收到的第一个字节转换为转速值 params['current'] = uint8Array[1]; // 将收到的第二个字节转换为电流 jsonMap['params'] = params; // 将参数打包到数据帧中 return jsonMap; // 返回时会发送给IoT设备管理平台 } /*此函数实现由云端下发数据到设备能识别的16进制数的转换*/ function protocolToRawData(json) { var method = json['method']; var id = json['id']; var version = json['version']; var payloadArray = []; if (method == ALINK_PROP_SET_METHOD) // 接收来自IoT设备管理平台的“设置设备属性”的命令 { var send_params = json['params']; var prop_cur = send_params['setspeed']; // 将设置的具体值抽取出来 //按照自定义协议格式拼接 rawdata payloadArray = payloadArray.concat(buffer_uint8(0x55)); // 第一字节数据头,标识数据功能用户定义 payloadArray = payloadArray.concat(buffer_uint8(prop_cur)); // 第二字节,具体的设置值 } 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); }