设备服务调用(异步调用)
设备服务调用(异步调用)
物联网平台支持同步调用和异步调用。单个添加物模型时,需设置此项。实现设备服务调用的原理,请参见协议中服务调用原理图。
●同步方式:通过InvokeThingService或InvokeThingsService接口调用服务,物联网平台直接使用RRPC同步方式下行推送请求。此时,服务选择为同步调用方式,物联网平台订阅RRPC对应Topic。设备RRPC的集成方式,请参见什么是RRPC。 ●异步方式:通过InvokeThingService或InvokeThingsService接口调用服务,物联网平台采用异步方式下行推送请求,设备也采用异步方式返回结果。此时,服务选择为异步调用方式,物联网平台订阅此处的异步响应Topic。
Topic和数据格式(下行):
数据格式(下行) | 请求和响应Topic |
透传/自定义 |
|
JSON |
|
请求数据格式:
{
"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(工作电流)。
|
method | String | 请求方法。
取值为 说明
|
参数 | 类型 | 说明 |
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"
}