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

同步调用

3.1 通讯方式
| 传输方式 | MQTT | 
|---|---|
| 序列化方式 | JSON | 
| 编码格式 | UTF-8 | 
3.2 Topic定义
| Topic名称 | 描述 | 
|---|---|
| /${productId}/${deviceId}/thing/action/request | 物模型行为请求消息,物模型服务订阅该消息触发行为调用 | 
| /${productId}/${deviceId}/thing/action/request/reply | 物模型行为请求消息回复,应用订阅该消息获取行为请求结果 | 
| /${productId}/${deviceId}/thing/action/invoke | 物模型行为调用消息,设备订阅该消息接收行为调用触发 | 
| /${productId}/${deviceId}/thing/action/invoke/reply | 物模型行为调用消息回复,物模型服务订阅该消息获取行为调用结果 | 
3.3 method 枚举
| method名称 | 描述 | 
|---|---|
| invoke | 行为调用触发 | 
四、场景示例
示例以扫地机为例,行为为扫地机的清洁行为,定义事件名为clean,输入属性名为 type , 值有 sweeping、mopping, 输出属性名为finishTime,值为时间戳类型。
4.1 异步调用流程

1.发送行为调用
应用程序可以通过调用 触发调用设备行为 接口进行单个设备的指定行为触发。
或者通过MQTT消息进行请求触发,发送消息到topic: /${productId}/${deviceId}/thing/action/request ,发送的JSON格式如下:
{
  "method":"invoke",
  "messageId":"157889065985",
  "actionIdentifier":"clean",
  "module":"default",
  "retained":false,
  "input":{
      "type":"sweeping"
  }
}字段说明:
| 字段名 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| method | String | 是 | 表示物模型请求设备的操作类型 , invoke表示调用行为 | 
| messageId | String | 是 | 消息ID,最长为64位字符,标识该消息的唯一ID | 
| actionIdentifier | String | 是 | 表示行为标识符 | 
| retained | String | 否 | 是否留存消息,当留存时设备上线时将进行一次推送,默认不留存 | 
| module | String | 是 | 表示所属模块 | 
| input | Object | 是 | 表示行为输入参数 | 
| input. ${key} | String | 否 | 表示输入的属性标识符 | 
| input. ${value} | Object | 否 | 表示输入的属性值 | 
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.返回行为调用结果
HTTP触发行为调用:若对应行为的调用方法定义为 异步 时,在下发调用指令后服务端将不等待设备返回行为调用结果,直接响应接口请求。
MQTT触发行为调用:无论行为调用方法定义是异步还是同步,都会回复一条触发调用的结果到 /${productId}/${deviceId}/thing/action/request/reply中,发送的JSON格式如下:
1)成功返回示例:
{
    "messageId":"157889065984",
    "method":"invoke",
    "code":0
}2)若调用失败,发送到该Topic的消息为:
{
    "messageId":"157889065984",
    "method":"invoke",
    "code": ${errorcode},
    "msg": "${errormessage}"
}字段说明:
| 字段名称 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| messageId | String | 是 | 应用程序或设备上报消息时的消息ID,最长为64位字符,物模型服务下发时将原值发送 | 
| method | String | 是 | 表示物模型服务响应method,与请求参数的method相同 | 
| payload | Object | 是 | 表示物模型服务响应的内容 | 
| payload.code | Int | 是 | 表示物模型处理该请求的状态,为0表示正常,不为0为异常,异常错误码请看错误码枚举 | 
| payload.msg | String | 是 | 表示物模型服务处理该请求的错误消息 | 
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}"
}无需在output中重复定义 errorCode 和 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 | 
|---|---|
| 0 | 代表成功 | 
| 910001 | 不正确的JSON格式。 | 
| 910002 | 缺少method信息 | 
| 910004 | method是无效的方法。 | 
| 910008 | 消息ID不存在 | 
| 910009 | 消息ID长度不符合 | 
| 910201 | 缺少actionIdentifier信息 | 
| 910202 | 行为不符合物模型 | 
| 910203 | 行为字段不存在 | 
| 500 | 服务端处理异常。 | 
最后编辑:admin 更新时间:2025-08-11 16:19
