本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
消息传输状态事件
消息传送状态事件发布有关您的 Sidewalk 设备和 Amazon IoT Wireless 之间交换的消息状态的事件通知。对于从 Wireless 发送到 Sidewalk 设备的下行链路消息,以及从您的设备发送到 Amazon IoT Wireless 的上行链路消息,都会发布事件通知。 Amazon IoT
消息传输状态事件的工作原理
将 Sidewalk 设备登录到 Amazon IoT Wireless 并连接设备后,即可在您的设备和 Wireless 之间交换消息。 Amazon IoT 这些事件会发布有关消息传送状态的通知,表明这些消息是成功传送到您的设备还是已成功传送到 Amazon IoT 无线网络。
例如,如果从设备收到带有确认(ACK)标志的上行链路消息,则会发布一条通知,指示消息已成功传输。当您从 Amazon IoT Wireless 向 Sidewalk 设备发送下行链路消息时,即使数据包已丢失或消息未传送,SendDataToWirelessDevice
API 也会返回下行链路消息。MessageId
在这种情况下,消息传输状态事件会返回一个错误,指示消息未能传输到设备。
为消息传输状态事件启用通知
在 Sidewalk 消息传送状态保留主题的订阅者可以接收消息之前,您必须使用 Amazon IoT Wireless API 或为他们启用事件通知。 Amazon CLI您可以为自己的所有 Sidewalk 资源 Amazon Web Services 账户 或特定资源启用这些事件。
注意
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} 可以是
success
或error
。 - {resourceType}
-
{resourceType} 可以是
sidewalk_accounts
或wireless_devices
。 - {resourceID}
-
{resourceID} 对于 {resourceType}
sidewalk_accounts
为amazon_id
,对于 {resourceType}wireless_devices
为wireless_device_id
。
您还可以使用 +
通配符同时订阅多个主题。+
通配符匹配级别中包含字符的任何字符串。例如,如果您希望收到所有可能的事件类型(success
和 error
)的通知以及注册到特定 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
-
发生的事件类型。可以是
success
或error
。在本例中,eventType
为error
。 - WirelessDeviceId
-
无线设备的标识符。
- timestamp
-
事件发生时的 Unix 时间戳。
- sidewalk
-
包含成功消息的状态代码、消息的序列号和消息类型的 Sidewalk 包装程序。
错误事件
下图显示了事件指示发生错误时的有效负载格式。
{ "eventId": "string", "eventType": "error" , "WirelessDeviceId": "string", "timestamp": "timestamp", "Sidewalk": { "Seq": "Integer", "Status": "DeviceNotReachable" | "RADIO_TX_ERROR" | "MEMORY_ERROR" } }
有效负载包含与 eventType
为 success
时类似的属性。以下是一些差别或附加属性:
- eventType
-
发生的事件类型。在本例中,
eventType
为error
。 - sidewalk
-
包含序列号和状态代码的 Sidewalk 包装程序,状态代码指示下行链路消息未成功发送的原因。