更新时间:2024-10-23 GMT+08:00

下发设备消息

功能介绍

物联网平台可向设备下发消息,应用服务器可调用此接口向指定设备下发消息,以实现对设备的控制。应用将消息下发给平台后,平台返回应用响应结果,平台再将消息发送给设备。平台返回应用响应结果不一定是设备接收结果,建议用户应用通过订阅设备消息状态变更通知,订阅后平台会将设备接收结果推送给订阅的应用。

注意:

  • 此接口适用于MQTT设备消息下发,暂不支持其他协议接入的设备消息下发。

  • 此接口仅支持单个设备消息下发,如需多个设备消息下发,请参见 创建批量任务

调试

您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。

URI

POST /v5/iot/{project_id}/devices/{device_id}/messages

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数说明:项目ID。获取方法请参见 获取项目ID

device_id

String

参数说明:下发消息的设备ID,用于唯一标识一个设备,在注册设备时由物联网平台分配获得。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

参数说明:用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证

Instance-Id

String

参数说明:实例ID。物理多租下各实例的唯一标识,建议携带该参数,在使用专业版时必须携带该参数。您可以在IoTDA管理控制台界面,选择左侧导航栏“总览”页签查看当前实例的ID,具体获取方式请参考 查看实例详情

表3 请求Body参数

参数

是否必选

参数类型

描述

message_id

String

参数说明:消息id,由用户生成(推荐使用UUID),同一个设备下唯一, 如果用户填写的id在设备下不唯一, 则接口返回错误。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

name

String

参数说明:消息名称。

取值范围:长度不超过128,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合。

message

Object

参数说明:消息内容,支持string和json格式。

properties

PropertiesDTO object

参数说明:消息下行到设备的属性参数。

encoding

String

参数说明:消息内容编码格式。默认值none。

取值范围

  • none

  • base64

payload_format

String

参数说明:有效负载格式,在消息内容编码格式为none时有效。默认值standard(平台封装的标准格式)。

取值范围

  • standard

  • raw:直接将消息内容作为有效负载下发。

topic

String

参数说明:消息下行到设备的自定义topic后缀, 可选, 仅适用于MQTT协议接入的设备。 用户只能填写在租户产品界面配置的topic, 否则会校验不通过。 平台给消息topic添加的前缀为$oc/devices/{device_id}/user/, 用户可以在前缀的基础上增加自定义部分, 如增加messageDown,则平台拼接前缀后完整的topic为 $oc/devices/{device_id}/user/messageDown,其中device_id以实际设备的网关id替代。 如果用户指定该topic,消息会通过该topic下行到设备,如果用户不指定, 则消息通过系统默认的topic下行到设备,系统默认的topic格式为: $oc/devices/{device_id}/sys/messages/down。此字段与topic_full_name字段只可填写一个。

topic_full_name

String

参数说明:消息下行到设备的完整topic名称, 可选。用户需要下发用户自定义的topic给设备时,可以使用该参数指定完整的topic名称,物联网平台不校验该topic是否在平台定义,直接透传给设备。设备需要提前订阅该topic。此字段与topic字段只可填写一个。

ttl

Integer

参数说明:下发消息在平台缓存的老化时间,时间单位是分钟,默认值1440;ttl参数数值必须是5的倍数,即以5分钟为粒度;指定为0时表示不缓存消息,默认最大缓存时间为1440分钟。

表4 PropertiesDTO

参数

是否必选

参数类型

描述

correlation_data

String

参数说明:MQTT 5.0版本请求和响应模式中的相关数据,可选。用户可以通过该参数配置MQTT协议请求和响应模式中的相关数据。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

response_topic

String

参数说明:MQTT 5.0版本请求和响应模式中的响应主题,可选。用户可以通过该参数配置MQTT协议请求和响应模式中的响应主题。

取值范围:长度不超过128, 只允许字母、数字、以及_-?=$#+/等字符的组合。

user_properties

Array of UserPropDTO objects

参数说明:用户自定义属性,可选。用户可以通过该参数配置用户自定义属性。可以配置的最大自定义属性数量为20。

表5 UserPropDTO

参数

是否必选

参数类型

描述

prop_key

String

参数说明:用户自定义属性键。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

prop_value

String

参数说明:用户自定义属性值。

取值范围:长度不超过128,只允许中文、字母、数字、以及_? '#().,&%@!-等字符的组合。

响应参数

状态码: 201

表6 响应Body参数

参数

参数类型

描述

message_id

String

消息id,由用户生成(推荐使用UUID),同一个设备下唯一, 如果用户不填写,则由物联网平台生成。

result

MessageResult object

消息下发结果。Json格式。

表7 MessageResult

参数

参数类型

描述

status

String

消息状态, PENDING,DELIVERED,FAILED和TIMEOUT。如果设备不在线,则平台缓存消息,并且返回PENDING,等设备数据上报之后再下发;如果设备在线,则消息直接进行下发,下发成功后接口返回DELIVERED,失败返回FAILED;如果消息在平台默认时间内(1天)还没有下发给设备,则平台会将消息设置为超时,状态为TIMEOUT。另外应用可以订阅消息的执行结果,平台会将消息结果推送给订阅的应用。

created_time

String

消息的创建时间,"yyyyMMdd'T'HHmmss'Z'"格式的UTC字符串。

finished_time

String

消息结束时间, "yyyyMMdd'T'HHmmss'Z'"格式的UTC字符串,包含消息转换到DELIVERED,FAILED和TIMEOUT状态的时间。

请求示例

  • 创建消息,通过平台默认topic下发。

    POST https://{endpoint}/v5/iot/{project_id}/devices/{device_id}/messages
    
    {
      "message_id" : "99b32da9-cd17-4cdf-a286-f6e849cbc364",
      "name" : "messageName",
      "message" : "HelloWorld"
    }
  • 创建消息,通过平台自定义topic下发。

    POST https://{endpoint}/v5/iot/{project_id}/devices/{device_id}/messages
    
    {
      "message_id" : "99b32da9-cd17-4cdf-a286-f6e849cbc364",
      "name" : "messageName",
      "message" : "HelloWorld",
      "topic" : "testTopic"
    }
  • 创建消息,通过自定义topic下发。

    POST https://{endpoint}/v5/iot/{project_id}/devices/{device_id}/messages
    
    {
      "message_id" : "99b32da9-cd17-4cdf-a286-f6e849cbc364",
      "name" : "messageName",
      "message" : "HelloWorld",
      "topic_full_name" : "/test/customTopic/testTopic"
    }

响应示例

状态码: 201

Created

{
  "message_id" : "b1224afb-e9f0-4916-8220-b6bab568e888",
  "result" : {
    "status" : "PENDING",
    "created_time" : "20151212T121212Z",
    "finished_time" : "20151212T121213Z"
  }
}

状态码

状态码

描述

201

Created

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

500

Internal Server Error

错误码

请参见错误码