一、描述

物模型服务的行为调用是指应用程序或云平台通过物模型通讯协议向物联网设备发送指令或请求执行某些操作。例如清洁计划设置等。

二、数据交互图

异步调用

同步调用

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 服务端处理异常。
 创建时间:2023-06-20 11:55
最后编辑:admin  更新时间:2024-10-18 16:29