设备服务调用(异步调用)

更新时间:

设备服务调用(异步调用)

物联网平台支持同步调用和异步调用。单个添加物模型时,需设置此项。实现设备服务调用的原理,请参见协议中服务调用原理图。

●同步方式:通过InvokeThingServiceInvokeThingsService接口调用服务,物联网平台直接使用RRPC同步方式下行推送请求。此时,服务选择为同步调用方式,物联网平台订阅RRPC对应Topic。设备RRPC的集成方式,请参见什么是RRPC。 ●异步方式:通过InvokeThingServiceInvokeThingsService接口调用服务,物联网平台采用异步方式下行推送请求,设备也采用异步方式返回结果。此时,服务选择为异步调用方式,物联网平台订阅此处的异步响应Topic。

Topic和数据格式(下行):

数据格式(下行)

请求和响应Topic

透传/自定义

  • 请求Topic:/sys/${productKey}/${deviceName}/thing/model/down_raw

  • 响应Topic:/sys/${productKey}/${deviceName}/thing/model/down_raw_reply

JSON

  • 默认模块

  • 请求Topic:/sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier}

  • 响应Topic:/sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier}_reply

请求数据格式:

{
    "id": "123",
    "version": "1.0",
    "params": {
        "Power": "on",
        "WF": "2"
    },
    "method": "thing.service.${tsl.service.identifier}"
}

响应数据格式:

  • 成功返回示例:

{
    "code": 200,
    "data": {},
    "id": "123",
    "message": "success",
    "version": "1.0"
}
  • 失败返回示例:

{
    "code": 9201,
    "data": {},
    "id": "123",
    "message": "device offLine",
    "version": "1.0"
}

参数说明:

参数

类型

说明

id

String

消息ID号,String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。

version

String

协议版本号,目前协议版本号唯一取值为1.0。

params

Object

服务调用参数。包含服务标识符和服务的值。如以上示例中的两个参数Power(电源)和WF(工作电流)。

{
    "Power": "on",
    "WF": "2"
}

method

String

请求方法。

  • 默认模块

取值为thing.service.${tsl.service.identifier}

说明

${tsl.service.identifier}为物模型中定义的服务标识符

参数

类型

说明

id

String

消息ID号,String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。

code

Integer

结果状态码,具体参考设备端通用code

data

Object

返回的结果信息。

data参数的值和物模型定义相关。如果服务没有返回结果,则data的值为空。如果服务有返回结果,则返回的数据会严格遵循服务的定义。

message

String

返回结果信息。请求成功时,返回success。

version

String

协议版本号,与请求参数中version相同。

格式示例:例如产品中定义了服务SetWeight,它的TSL描述如下:

{
    "schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json",
    "profile": {
        "productKey": "testProduct01"
    },
    "services": [
        {
            "outputData": [
                {
                    "identifier": "OldWeight",
                    "dataType": {
                        "specs": {
                            "unit": "kg",
                            "min": "0",
                            "max": "200",
                            "step": "1"
                        },
                        "type": "double"
                    },
                    "name": "OldWeight"
                },
                {
                    "identifier": "CollectTime",
                    "dataType": {
                        "specs": {
                            "length": "2048"
                        },
                        "type": "text"
                    },
                    "name": "CollectTime"
                }
            ],
            "identifier": "SetWeight",
            "inputData": [
                {
                    "identifier": "NewWeight",
                    "dataType": {
                        "specs": {
                            "unit": "kg",
                            "min": "0",
                            "max": "200",
                            "step": "1"
                        },
                        "type": "double"
                    },
                    "name": "NewWeight"
                }
            ],
            "method": "thing.service.SetWeight",
            "name": "设置重量",
            "required": false,
            "callType": "async"
        }
    ]
}

当调用服务时,请求数据格式:

{
    "method": "thing.service.SetWeight",
    "id": "105917531",
    "params": {
        "NewWeight": 100.8
    },
    "version": "1.0"
}

响应数据格式:

{
    "id": "105917531",
    "code": 200,
    "data": {
        "CollectTime": "1536228947682",
        "OldWeight": 100.101
    }
    "message": "success",
    "version": "1.0"
}