一、描述
物模型服务的行为调用是指应用程序或云平台通过物模型通讯协议向物联网设备发送指令或请求执行某些操作。例如清洁计划设置等。
二、数据交互图
异步调用
同步调用
3.1 通讯方式
传输方式 | MQTT |
---|---|
序列化方式 | JSON |
编码格式 | UTF-8 |
3.2 Topic定义
Topic名称 | 描述 |
---|---|
/${productId}/${deviceId}/thing/action/invoke | 物模型行为调用消息,设备订阅该消息接收行为调用触发 |
/${productId}/${deviceId}/thing/action/invoke/reply | 物模型行为调用消息回复,物模型服务订阅该消息回去行为调用结果 |
3.3 method 枚举
method名称 | 描述 |
---|---|
invoke | 行为调用触发 |
四、场景示例
示例以扫地机为例,行为为扫地机的清洁行为,定义事件名为clean,输入属性名为 type , 值有 sweeping、mopping, 输出属性名为finishTime,值为时间戳类型。
4.1 异步调用流程
1.发送行为调用
应用程序通过调用 触发调用设备行为 接口进行单个设备的指定行为触发。
2.校验TSL
物模型服务在接收到调用之后,进行对行为的输入参数进行TSL校验。
3.下发行为调用指令
物模型服务在接收到 行为调用 信息之后,下发消息到Topic:/${productId}/${deviceId}/thing/action/invoke
,发送的JSON格式如下:
{
"method":"invoke",
"messageId":"157889065985",
"actionIdentifier":"clean",
"module":"default",
"input":{
"type":"sweeping"
}
}
字段说明:
字段名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
method | String | 是 | 表示物模型请求设备的操作类型 ,invoke 表示调用行为 |
messageId | String | 是 | 消息ID,最长为64位字符,标识该消息的唯一ID,服务端进行生成 |
actionIdentifier | String | 是 | 表示行为标识符 |
module | String | 是 | 表示所属模块 |
input | Object | 是 | 表示行为输入参数 |
input.${key} |
String | 否 | 表示输入的属性标识符 |
input.${value} |
Object | 否 | 表示输入的属性值 |
4.返回行为调用结果
若对应行为的调用方法定义为 异步
时,在下发调用指令后服务端将不等待设备返回行为调用结果,直接响应接口请求。
5.校验行为调用并执行逻辑
设备在接收到行为调用消息之后,进行TSL校验,通过之后按照行为调用指令进行逻辑执行。
6.返回行为调用结果
设备在执行行为调用逻辑完成之后,发送结果到 /${productId}/${deviceId}/thing/action/invoke/reply
Topic中,发送的JSON格式如下:
1)成功返回示例:
{
"method":"invoke",
"messageId":"157889065985",
"code":0,
"output":{
"finishTime":1686313154595
}
}
2)失败返回示例:
{
"method":"invoke",
"messageId":"157889065985",
"code":${errorCode},
"msg":"${errorMessage}"
}
字段说明:
字段名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
method | String | 是 | 表示设备响应得操作类型 , 设备返回时将原值发送 |
messageId | String | 是 | 消息ID,最长为64位字符,设备返回时将原值发送 |
code | Int | 是 | 表示行为调用结果状态,0表示成功 |
msg | String | 否 | 表示行为调用结果消息 |
output | Object | 是 | 表示行为调用的结果 |
output.${key} |
String | 否 | 表示输出的属性标识符 |
output.${value} |
Object | 否 | 表示输出的属性值 |
7.保存行为调用记录
设备返回行为调用结果后,物模型服务保存当前行为的调用记录。
4.2 同步调用流程
1.发送行为调用
应用程序通过调用 触发调用设备行为 接口进行单个设备的指定行为触发。
2.校验TSL
物模型服务在接收到调用之后,进行对行为的输入参数进行TSL校验。
3.下发行为调用指令
物模型服务在接收到 行为调用 信息之后,下发消息到Topic:/${productId}/${deviceId}/thing/action/invoke
,发送的JSON格式如下:
{
"method":"invoke",
"messageId":"157889065985",
"actionIdentifier":"clean",
"module":"default",
"input":{
"type":"sweeping"
}
}
字段说明:
字段名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
method | String | 是 | 表示物模型请求设备的操作类型 ,invoke 表示调用行为 |
messageId | String | 是 | 消息ID,最长为64位字符,标识该消息的唯一ID,服务端进行生成 |
actionIdentifier | String | 是 | 表示行为标识符 |
module | String | 是 | 表示所属模块 |
input | Object | 是 | 表示行为输入参数 |
input.${key} |
String | 否 | 表示输入的属性标识符 |
input.${value} |
Object | 否 | 表示输入的属性值 |
4.校验行为调用并执行逻辑
设备在接收到行为调用消息之后,进行TSL校验,通过之后按照行为调用指令进行逻辑执行。
5.设备返回行为调用结果
设备在执行行为调用逻辑完成之后,发送结果到 /${productId}/${deviceId}/thing/action/invoke/reply
Topic中,发送的JSON格式如下:
1)成功返回示例:
{
"method":"invoke",
"messageId":"157889065985",
"code":0,
"output":{
"finishTime":1686313154595
}
}
2)失败返回示例:
{
"method":"invoke",
"messageId":"157889065985",
"code":${errorCode},
"msg":"${errorMessage}"
}
字段说明:
字段名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
method | String | 是 | 表示设备响应得操作类型 , 设备返回时将原值发送 |
messageId | String | 是 | 消息ID,最长为64位字符,设备返回时将原值发送 |
code | Int | 是 | 表示行为调用结果状态,0表示成功 |
msg | String | 否 | 表示行为调用结果消息 |
output | Object | 是 | 表示行为调用的结果 |
output.${key} |
String | 否 | 表示输出的属性标识符 |
output.${value} |
Object | 否 | 表示输出的属性值 |
6.保存行为调用记录
设备返回行为调用结果后,物模型服务保存当前行为的调用记录。
7. 物模型服务返回行为调用结果
若对应行为的调用方法定义为 同步
时,在下发调用指令后服务端将等待设备返回行为调用结果后,再响应HTTP接口请求。
重要: 如5秒钟未收到设备的行为调用结果,该行为调用结果为超时
五、错误码
errorCode | errorMessage |
---|---|
910001 | 不正确的JSON格式。 |
910002 | 缺少method信息 |
910004 | method是无效的方法。 |
910008 | 消息ID不存在 |
910009 | 消息ID长度不符合 |
910201 | 缺少actionIdentifier信息 |
910202 | 行为不符合物模型 |
910203 | 行为字段不存在 |
500 | 服务端处理异常。 |
最后编辑:admin 更新时间:2024-10-18 16:29