消息传输状态事件 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

消息传输状态事件

消息传输状态事件发布有关在 Sidewalk 设备和 Amazon IoT Wireless 之间交换的消息状态的事件通知。将针对从 Amazon IoT Wireless 发送到 Sidewalk 设备的下行链路消息和从您的设备发送到 Amazon IoT Wireless 的上行链路消息发布事件通知。

消息传输状态事件的工作原理

在您将 Sidewalk 设备登入 Amazon IoT Wireless 并连接您的设备后,可以在您的设备和 Amazon IoT Wireless 之间交换消息。这些事件发布有关消息传输状态的通知,指示这些消息是否已成功传输到您的设备或 Amazon IoT Wireless。

例如,如果从设备收到带有确认(ACK)标志的上行链路消息,则会发布一条通知,指示消息已成功传输。当您将下行链路消息从 Amazon IoT Wireless 发送到 Sidewalk 设备时,即使数据包丢失或消息未传递,SendDataToWirelessDevice API 也会为下行链路返回 MessageId。在这种情况下,消息传输状态事件会返回一个错误,指示消息未能传输到设备。

为消息传输状态事件启用通知

在 Sidewalk 消息传输状态保留主题的订阅方可以接收消息之前,必须使用 Amazon IoT Wireless API 或 Amazon CLI 为订阅方启用事件通知。您可以为 Amazon Web Services 账户 中的所有 Sidewalk 资源或所选资源启用这些事件。

注意

Sidewalk 消息传输状态事件配置在控制台中不可用。

有关如何启用这些事件的更多信息,请参阅 使用 Amazon CLI 启用通知

用于消息传输状态事件的 MQTT 主题的格式

要接收有关消息传输状态事件的通知,您可以订阅以美元($)符号开头的 MQTT 保留主题。有关更多信息,请参阅MQTT 主题

Sidewalk 近似事件的保留 MQTT 主题使用以下格式:

  • 对于资源级主题:

    $aws/iotwireless/events/{eventName}/{eventType}/sidewalk/wireless_devices

  • 对于标识符主题:

    $aws/iotwireless/events/{eventName}/{eventType}/sidewalk/{resourceType}/{resourceID}/{id}

其中:

{eventName}

{eventName} 必须是 message_delivery_status

{eventType}

{eventType} 可以是 successerror

{resourceType}

{resourceType} 可以是 sidewalk_accountswireless_devices

{resourceID}

{resourceID} 对于 {resourceType} sidewalk_accountsamazon_id,对于 {resourceType} wireless_deviceswireless_device_id

您还可以使用 + 通配符同时订阅多个主题。+ 通配符匹配级别中包含字符的任何字符串。例如,如果您希望收到所有可能的事件类型(successerror)的通知以及注册到特定 Amazon ID 的所有设备通知,可以使用以下主题筛选条件:

$aws/iotwireless/events/message_delivery_status/+/sidewalk/sidewalk_accounts/amazon_id/+

注意

您不能使用通配符 # 订阅保留主题。有关主题筛选条件的更多信息,请参阅 主题筛选条件

消息传输状态事件的消息有效负载

为消息传输状态事件启用通知后,将通过 MQTT 随 JSON 有效负载一起发布事件消息。这些事件包含以下示例有效负载,具体取决于事件是否成功,表示设备已成功接收消息或出现错误。

成功事件

下图显示了事件为成功时的有效负载格式。

{ "eventId": "string", "eventType": "success", "WirelessDeviceId": "string", "timestamp": "timestamp", "Sidewalk": { "Seq": "Integer", "MsgType": "CUSTOM_COMMAND_ID_RESP", "CmdExStatus": "COMMAND_EXEC_STATUS_SUCCESS" } }

负载包含以下属性:

eventId

唯一的事件 ID,字符串。

eventType

发生的事件类型。可以是 successerror。在本例中,eventTypeerror

WirelessDeviceId

无线设备的标识符。

timestamp

事件发生时的 Unix 时间戳。

sidewalk

包含成功消息的状态代码、消息的序列号和消息类型的 Sidewalk 包装程序。

错误事件

下图显示了事件指示发生错误时的有效负载格式。

{ "eventId": "string", "eventType": "error" , "WirelessDeviceId": "string", "timestamp": "timestamp", "Sidewalk": { "Seq": "Integer", "Status": "DeviceNotReachable" | "RADIO_TX_ERROR" | "MEMORY_ERROR" } }

有效负载包含与 eventTypesuccess 时类似的属性。以下是一些差别或附加属性:

eventType

发生的事件类型。在本例中,eventTypeerror

sidewalk

包含序列号和状态代码的 Sidewalk 包装程序,状态代码指示下行链路消息未成功发送的原因。