提供对指定产品脚本的增删改查功能。
功能描述:为物联网平台中的产品创建一个脚本,用于将设备自定义数据解析成平台标准数据。
POST  /api/v1/scripts
Query:
| Name | Description | Required | Type | 
|---|---|---|---|
| productId | 产品ID | Yes | string | 
| masterKey | 产品masterKey | No | string | 
Body:
| Name | Type | Description | Required | 
|---|---|---|---|
| content | string | 脚本内容 | Yes | 
| scriptType | string | 脚本类型("groovy") | Yes | 
注:创建脚本时输入的产品协议不一样时,content字段(脚本内容)格式可能不一样。
// content 脚本内容需要提供三个解析方法
// 1. 数据上传数据解析 
byte[] convertDeviceData(byte[] data) {
    return data
}
// 2. 命令下发数据解析 
byte[] serializeCommand(byte[] data) {
    return data
}
// 3. 命令回复数据解析 
byte[] serializeCommandRes(byte[] data) {
    return data
}
Body example:
{
    "scriptType":"groovy",
    "content":"byte[] convertDeviceData(byte[] data){\n    return data\n}\nbyte[] serializeCommand(byte[] data){\n    return data\n}\nbyte[] serializeCommandRes(byte[] data){\n    return data\n}\n"
}
cURL example:
curl --location --request POST '{{address}}/api/v1/scripts?accessKeyId={accessKeyId}&signatureNonce={signatureNonce}&signature={signature}&productId={productId}&masterKey={masterKey}' \
--header 'projectId: {projectId}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "scriptType":"groovy",
    "content":"byte[] convertDeviceData(byte[] data){\n    return data\n}\nbyte[] serializeCommand(byte[] data){\n    return data\n}\nbyte[] serializeCommandRes(byte[] data){\n    return data\n}\n"
}'
Response example:
{
    "code": 0,
    "message": "成功",
    "referInfo": null,
    "data": {
        "productId": 100557,
        "id": 13,
        "content": "byte[] convertDeviceData(byte[] data){\n    return data\n}\nbyte[] serializeCommand(byte[] data){\n    return data\n}\nbyte[] serializeCommandRes(byte[] data){\n    return data\n}\n",
        "requestData": null,
        "dataType": null,
        "response": null,
        "protocol": null
    }
}
// 脚本内容必须包含两个函数 
// 1. 设备数据上传解析 
import java.nio.ByteBuffer
import groovy.json.*
/**
 * @param data 设备上传数据
 * @return Map 必须包含:
 * length 已处理的长度,
 * model 数据类型: 1表示命令回复,2表示数据上传, 3表示设备发送的心跳包
 * response 返回数据: 命令回复是uuid和属性值,数据上传是属性名和属性值
 */
def parsePubData(byte[] data) {
    def result = [:]
    result.length = 0
    if (data.length < 2) {
        return result
    }
    String symbol = new String(data[0..0] as byte[])
    //测试注解
    if (symbol == "#") //"#" 表示该数据为命令回复
    {
        int length = ByteBuffer.wrap(data[1..1] as byte[]).get()
        if (length < 36) //uuid长度为36位
        {
            return result
        } else {
            if (length + 2 > data.length) {
                return result
            }
            byte[] uuidBytes = data[2..37] as byte[]
            byte[] valueBytes = data[38..38 + length - 36 - 1] as byte[]
            def uuid = new String(uuidBytes)
            def response = [:]
            response.uuid = uuid
            response.identifierValue = new String(valueBytes)
            result.length = length + 2
            result.model = 1
            result.response = response
            return result
        }
    } else if (symbol == "^")// "^" 表示该条数据为设备心跳数据
    {
        if (data.length < 4) {
            return result
        }
        result.length = 4
        result.model = 3
        return result
    }
    else {
        int length = ByteBuffer.wrap(data[0..0] as byte[]).get() * 256 + ByteBuffer.wrap(data[1..1] as byte[]).get()
        if (length + 2 > data.length) {
            return result
        }
        String json = new String(data[2..2 + length - 1] as byte[])
        def jsonSlurper = new JsonSlurper()
        Map response = jsonSlurper.parseText(json)
        result.length = length + 2
        result.model = 2
        result.response = response
        return result
    }
}
/**   解析命令下发到设备
 @param uuid 唯一id
@param key 属性名
@param value 属性值
@param functionType 方法类型,get或者set
@return 下发到设备的数据(json格式)
**/
def parseCommandData(String uuid, String key, Object value, String functionType) {
    def data = [:]
    data.uuid = uuid
    data.identifier = key
    data.functionType = functionType
    if (functionType == "propertySet") {
        data[(key)] = value
    }
    return new JsonBuilder(data).toPrettyString()
}
Body example:
{
    "scriptType":“groovy”,
    "content": "content":"import java.nio.ByteBuffer\n                                            import groovy.json.*\n\n                                            /**\n                                             * @param data 设备上传数据\n                                             * @return Map 必须包含:\n                                             * length 已处理的长度,\n                                             * model 数据类型: 1表示命令回复,2表示数据上传, 3表示设备发送的心跳包\n                                             * response 返回数据: 命令回复是uuid和属性值,数据上传是属性名和属性值\n                                             */\n                                            def parsePubData(byte[] data) {\n                                                def result = [:]\n                                                result.length = 0\n                                                if (data.length < 2) {\n                                                    return result\n                                                }\n\n                                                String symbol = new String(data[0..0] as byte[])\n                                                //测试注解\n                                                if (symbol == \"#\") //\"#\" 表示该数据为命令回复\n                                                {\n                                                    int length = ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length < 36) //uuid长度为36位\n                                                    {\n                                                        return result\n                                                    } else {\n                                                        if (length + 2 > data.length) {\n                                                            return result\n                                                        }\n                                                        byte[] uuidBytes = data[2..37] as byte[]\n                                                        byte[] valueBytes = data[38..38 + length - 36 - 1] as byte[]\n                                                        def uuid = new String(uuidBytes)\n                                                        def response = [:]\n                                                        response.uuid = uuid\n                                                        response.identifierValue = new String(valueBytes)\n                                                        result.length = length + 2\n                                                        result.model = 1\n                                                        result.response = response\n                                                        return result\n                                                    }\n                                                } else if (symbol == \"^\")// \"^\" 表示该条数据为设备心跳数据\n                                                {\n                                                    if (data.length < 4) {\n                                                        return result\n                                                    }\n                                                    result.length = 4\n                                                    result.model = 3\n                                                    return result\n                                                }\n                                                else {\n                                                    int length = ByteBuffer.wrap(data[0..0] as byte[]).get() * 256 + ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length + 2 > data.length) {\n                                                        return result\n                                                    }\n                                                    String json = new String(data[2..2 + length - 1] as byte[])\n                                                    def jsonSlurper = new JsonSlurper()\n                                                    Map response = jsonSlurper.parseText(json)\n                                                    result.length = length + 2\n                                                    result.model = 2\n                                                    result.response = response\n                                                    return result\n                                                }\n                                            }\n\n                                            /**   解析命令下发到设备\n                                             @param uuid 唯一id\n                                            @param key 属性名\n                                            @param value 属性值\n                                            @param functionType 方法类型,get或者set\n                                            @return 下发到设备的数据(json格式)\n                                            **/\n                                            def parseCommandData(String uuid, String key, Object value, String functionType) {\n                                                def data = [:]\n                                                data.uuid = uuid\n                                                data.identifier = key\n                                                data.functionType = functionType\n                                                if (functionType == \"propertySet\") {\n                                                    data[(key)] = value\n                                                }\n                                                return new JsonBuilder(data).toPrettyString()\n                                            }\n                                            "
}
cURL example:
 curl --location --request POST '{{address}}/api/v1/scripts?accessKeyId={accessKeyId}&signatureNonce={signatureNonce}&signature={signature}&productId={productId}&masterKey={masterKey}' \
 --header 'projectId: {projectId}' \ 
 --header 'Content-Type: application/json' \
 --data-raw '{
     "scriptType":“groovy”,
     "content": "content":"import java.nio.ByteBuffer\n                                            import groovy.json.*\n\n                                            /**\n                                             * @param data 设备上传数据\n                                             * @return Map 必须包含:\n                                             * length 已处理的长度,\n                                             * model 数据类型: 1表示命令回复,2表示数据上传, 3表示设备发送的心跳包\n                                             * response 返回数据: 命令回复是uuid和属性值,数据上传是属性名和属性值\n                                             */\n                                            def parsePubData(byte[] data) {\n                                                def result = [:]\n                                                result.length = 0\n                                                if (data.length < 2) {\n                                                    return result\n                                                }\n\n                                                String symbol = new String(data[0..0] as byte[])\n                                                //测试注解\n                                                if (symbol == \"#\") //\"#\" 表示该数据为命令回复\n                                                {\n                                                    int length = ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length < 36) //uuid长度为36位\n                                                    {\n                                                        return result\n                                                    } else {\n                                                        if (length + 2 > data.length) {\n                                                            return result\n                                                        }\n                                                        byte[] uuidBytes = data[2..37] as byte[]\n                                                        byte[] valueBytes = data[38..38 + length - 36 - 1] as byte[]\n                                                        def uuid = new String(uuidBytes)\n                                                        def response = [:]\n                                                        response.uuid = uuid\n                                                        response.identifierValue = new String(valueBytes)\n                                                        result.length = length + 2\n                                                        result.model = 1\n                                                        result.response = response\n                                                        return result\n                                                    }\n                                                } else if (symbol == \"^\")// \"^\" 表示该条数据为设备心跳数据\n                                                {\n                                                    if (data.length < 4) {\n                                                        return result\n                                                    }\n                                                    result.length = 4\n                                                    result.model = 3\n                                                    return result\n                                                }\n                                                else {\n                                                    int length = ByteBuffer.wrap(data[0..0] as byte[]).get() * 256 + ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length + 2 > data.length) {\n                                                        return result\n                                                    }\n                                                    String json = new String(data[2..2 + length - 1] as byte[])\n                                                    def jsonSlurper = new JsonSlurper()\n                                                    Map response = jsonSlurper.parseText(json)\n                                                    result.length = length + 2\n                                                    result.model = 2\n                                                    result.response = response\n                                                    return result\n                                                }\n                                            }\n\n                                            /**   解析命令下发到设备\n                                             @param uuid 唯一id\n                                            @param key 属性名\n                                            @param value 属性值\n                                            @param functionType 方法类型,get或者set\n                                            @return 下发到设备的数据(json格式)\n                                            **/\n                                            def parseCommandData(String uuid, String key, Object value, String functionType) {\n                                                def data = [:]\n                                                data.uuid = uuid\n                                                data.identifier = key\n                                                data.functionType = functionType\n                                                if (functionType == \"propertySet\") {\n                                                    data[(key)] = value\n                                                }\n                                                return new JsonBuilder(data).toPrettyString()\n                                            }\n                                            "
 }'
Response example:
{
    "code": 0,
    "message": "成功",
    "referInfo": null,
    "data": {
        "productId": 100573,
        "id": 12,
        "content": "import java.nio.ByteBuffer\n                                            import groovy.json.*\n\n                                            /**\n                                             * @param data 设备上传数据\n                                             * @return Map 必须包含:\n                                             * length 已处理的长度,\n                                             * model 数据类型: 1表示命令回复,2表示数据上传, 3表示设备发送的心跳包\n                                             * response 返回数据: 命令回复是uuid和属性值,数据上传是属性名和属性值\n                                             */\n                                            def parsePubData(byte[] data) {\n                                                def result = [:]\n                                                result.length = 0\n                                                if (data.length < 2) {\n                                                    return result\n                                                }\n\n                                                String symbol = new String(data[0..0] as byte[])\n                                                //测试注解\n                                                if (symbol == \"#\") //\"#\" 表示该数据为命令回复\n                                                {\n                                                    int length = ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length < 36) //uuid长度为36位\n                                                    {\n                                                        return result\n                                                    } else {\n                                                        if (length + 2 > data.length) {\n                                                            return result\n                                                        }\n                                                        byte[] uuidBytes = data[2..37] as byte[]\n                                                        byte[] valueBytes = data[38..38 + length - 36 - 1] as byte[]\n                                                        def uuid = new String(uuidBytes)\n                                                        def response = [:]\n                                                        response.uuid = uuid\n                                                        response.identifierValue = new String(valueBytes)\n                                                        result.length = length + 2\n                                                        result.model = 1\n                                                        result.response = response\n                                                        return result\n                                                    }\n                                                } else if (symbol == \"^\")// \"^\" 表示该条数据为设备心跳数据\n                                                {\n                                                    if (data.length < 4) {\n                                                        return result\n                                                    }\n                                                    result.length = 4\n                                                    result.model = 3\n                                                    return result\n                                                }\n                                                else {\n                                                    int length = ByteBuffer.wrap(data[0..0] as byte[]).get() * 256 + ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length + 2 > data.length) {\n                                                        return result\n                                                    }\n                                                    String json = new String(data[2..2 + length - 1] as byte[])\n                                                    def jsonSlurper = new JsonSlurper()\n                                                    Map response = jsonSlurper.parseText(json)\n                                                    result.length = length + 2\n                                                    result.model = 2\n                                                    result.response = response\n                                                    return result\n                                                }\n                                            }\n\n                                            /**   解析命令下发到设备\n                                             @param uuid 唯一id\n                                            @param key 属性名\n                                            @param value 属性值\n                                            @param functionType 方法类型,get或者set\n                                            @return 下发到设备的数据(json格式)\n                                            **/\n                                            def parseCommandData(String uuid, String key, Object value, String functionType) {\n                                                def data = [:]\n                                                data.uuid = uuid\n                                                data.identifier = key\n                                                data.functionType = functionType\n                                                if (functionType == \"propertySet\") {\n                                                    data[(key)] = value\n                                                }\n                                                return new JsonBuilder(data).toPrettyString()\n                                            }\n                                            ",
        "requestData": null,
        "dataType": null,
        "response": null,
        "protocol": null
    }
}
功能描述:更新物联网平台中的指定产品的某个相关脚本。
PUT  /api/v1/scripts
Query:
| Name | Description | Required | Type | 
|---|---|---|---|
| productId | 产品ID | Yes | string | 
| masterKey | 产品masterKey | No | string | 
Body:
| Name | Type | Description | Required | 
|---|---|---|---|
| content | string | 脚本内容,与新增格式一致 | Yes | 
| id | int | 脚本id | Yes | 
Body example:
{
    "scriptType":"groovy",
    "content":"import java.nio.ByteBuffer\n                                            import groovy.json.*\n\n                                            /**\n                                             * @param data 设备上传数据\n                                             * @return Map 必须包含:\n                                             * length 已处理的长度,\n                                             * model 数据类型: 1表示命令回复,2表示数据上传, 3表示设备发送的心跳包\n                                             * response 返回数据: 命令回复是uuid和属性值,数据上传是属性名和属性值\n                                             */\n                                            def parsePubData(byte[] data) {\n                                                def result = [:]\n                                                result.length = 0\n                                                if (data.length < 2) {\n                                                    return result\n                                                }\n\n                                                String symbol = new String(data[0..0] as byte[])\n                                                //测试注解\n                                                if (symbol == \"#\") //\"#\" 表示该数据为命令回复\n                                                {\n                                                    int length = ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length < 36) //uuid长度为36位\n                                                    {\n                                                        return result\n                                                    } else {\n                                                        if (length + 2 > data.length) {\n                                                            return result\n                                                        }\n                                                        byte[] uuidBytes = data[2..37] as byte[]\n                                                        byte[] valueBytes = data[38..38 + length - 36 - 1] as byte[]\n                                                        def uuid = new String(uuidBytes)\n                                                        def response = [:]\n                                                        response.uuid = uuid\n                                                        response.identifierValue = new String(valueBytes)\n                                                        result.length = length + 2\n                                                        result.model = 1\n                                                        result.response = response\n                                                        return result\n                                                    }\n                                                } else if (symbol == \"^\")// \"^\" 表示该条数据为设备心跳数据\n                                                {\n                                                    if (data.length < 4) {\n                                                        return result\n                                                    }\n                                                    result.length = 4\n                                                    result.model = 3\n                                                    return result\n                                                }\n                                                else {\n                                                    int length = ByteBuffer.wrap(data[0..0] as byte[]).get() * 256 + ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length + 2 > data.length) {\n                                                        return result\n                                                    }\n                                                    String json = new String(data[2..2 + length - 1] as byte[])\n                                                    def jsonSlurper = new JsonSlurper()\n                                                    Map response = jsonSlurper.parseText(json)\n                                                    result.length = length + 2\n                                                    result.model = 2\n                                                    result.response = response\n                                                    return result\n                                                }\n                                            }\n\n                                            /**   解析命令下发到设备\n                                             @param uuid 唯一id\n                                            @param key 属性名\n                                            @param value 属性值\n                                            @param functionType 方法类型,get或者set\n                                            @return 下发到设备的数据(json格式)\n                                            **/\n                                            def parseCommandData(String uuid, String key, Object value, String functionType) {\n                                                def data = [:]\n                                                data.uuid = uuid\n                                                data.identifier = key\n                                                data.functionType = functionType\n                                                if (functionType == \"propertySet\") {\n                                                    data[(key)] = value\n                                                }\n                                                return new JsonBuilder(data).toPrettyString()\n                                            }\n                                            "
}
cURL example:
 curl --location --request POST '{{address}}/api/v1/scripts?accessKeyId={accessKeyId}&signatureNonce={signatureNonce}&signature={signature}&productId={productId}&masterKey={masterKey}' \
 --header 'projectId: {projectId}' \
 --header 'Content-Type: application/json' \
 --data-raw '{
     "scriptType":“groovy”,
     "content": "content":"import java.nio.ByteBuffer\n                                            import groovy.json.*\n\n                                            /**\n                                             * @param data 设备上传数据\n                                             * @return Map 必须包含:\n                                             * length 已处理的长度,\n                                             * model 数据类型: 1表示命令回复,2表示数据上传, 3表示设备发送的心跳包\n                                             * response 返回数据: 命令回复是uuid和属性值,数据上传是属性名和属性值\n                                             */\n                                            def parsePubData(byte[] data) {\n                                                def result = [:]\n                                                result.length = 0\n                                                if (data.length < 2) {\n                                                    return result\n                                                }\n\n                                                String symbol = new String(data[0..0] as byte[])\n                                                //测试注解\n                                                if (symbol == \"#\") //\"#\" 表示该数据为命令回复\n                                                {\n                                                    int length = ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length < 36) //uuid长度为36位\n                                                    {\n                                                        return result\n                                                    } else {\n                                                        if (length + 2 > data.length) {\n                                                            return result\n                                                        }\n                                                        byte[] uuidBytes = data[2..37] as byte[]\n                                                        byte[] valueBytes = data[38..38 + length - 36 - 1] as byte[]\n                                                        def uuid = new String(uuidBytes)\n                                                        def response = [:]\n                                                        response.uuid = uuid\n                                                        response.identifierValue = new String(valueBytes)\n                                                        result.length = length + 2\n                                                        result.model = 1\n                                                        result.response = response\n                                                        return result\n                                                    }\n                                                } else if (symbol == \"^\")// \"^\" 表示该条数据为设备心跳数据\n                                                {\n                                                    if (data.length < 4) {\n                                                        return result\n                                                    }\n                                                    result.length = 4\n                                                    result.model = 3\n                                                    return result\n                                                }\n                                                else {\n                                                    int length = ByteBuffer.wrap(data[0..0] as byte[]).get() * 256 + ByteBuffer.wrap(data[1..1] as byte[]).get()\n                                                    if (length + 2 > data.length) {\n                                                        return result\n                                                    }\n                                                    String json = new String(data[2..2 + length - 1] as byte[])\n                                                    def jsonSlurper = new JsonSlurper()\n                                                    Map response = jsonSlurper.parseText(json)\n                                                    result.length = length + 2\n                                                    result.model = 2\n                                                    result.response = response\n                                                    return result\n                                                }\n                                            }\n\n                                            /**   解析命令下发到设备\n                                             @param uuid 唯一id\n                                            @param key 属性名\n                                            @param value 属性值\n                                            @param functionType 方法类型,get或者set\n                                            @return 下发到设备的数据(json格式)\n                                            **/\n                                            def parseCommandData(String uuid, String key, Object value, String functionType) {\n                                                def data = [:]\n                                                data.uuid = uuid\n                                                data.identifier = key\n                                                data.functionType = functionType\n                                                if (functionType == \"propertySet\") {\n                                                    data[(key)] = value\n                                                }\n                                                return new JsonBuilder(data).toPrettyString()\n                                            }\n                                            "
 }'
Response example:
{
  "success": true,
  "code": 0,
  "msg": "",
  "data":null
}
功能描述:查询物联网平台中的指定产品的某个相关脚本。
GET  /api/v1/scripts
Query:
| Name | Description | Required | Type | 
|---|---|---|---|
| productId | 产品ID | Yes | string | 
| masterKey | 产品masterKey | No | string | 
cURL example:
curl --location --request GET '{{address}}/api/v1/scripts?accessKeyId={accessKeyId}&signatureNonce={signatureNonce}&signature={signature}&productId={productId}&masterKey={masterKey}' \
--header 'projectId: {projectId}'
Response Body:
| Name | Type | Description | 
|---|---|---|
| id | int | 脚本id | 
| name | string | 脚本名称 | 
| content | string | 脚本内容,与新增格式一致 | 
| created | long | 脚本创建时间戳 | 
| modified | string | 脚本更新时间戳 | 
Response example:
{
  "success": true,
  "code": 0,
  "msg": "",
  "data": {
    "id": 19,
    "name": "",
    "content": "byte[] convertDeviceData(byte[] data){\n    return data\n}\nbyte[] serializeCommand(byte[] data){\n    return data\n}\nbyte[] serializeCommandRes(byte[] data){\n    return data\n}\n    ",
    "productId": 100197,
    "created": 0,
    "modified": 0
  }
}
功能描述:删除物联网平台中的指定产品的某个相关脚本。
DELETE  /api/v1/scripts/{id}
Path:
| Name | Description | Required | Type | 
|---|---|---|---|
| id | 脚本id | Yes | int | 
cURL example:
curl --location --request DELETE '{{address}}/api/v1/scripts/{id}?accessKeyId={accessKeyId}&signatureNonce={signatureNonce}&signature={signature}' \
--header 'projectId: {projectId}' \
Response example:
{
  "success": true,
  "code": 0,
  "msg": "",
  "data": 1
}