

# 连接您的 Sidewalk 设备并查看上行链路元数据格式
<a name="iot-sidewalk-connect-uplink-metadata"></a>

在本教程中，您将使用 MQTT 测试客户端来测试连接，并查看在终端设备与 AWS 云之间交换的消息。要接收消息，请在 MQTT 测试客户端中，订阅在为目标创建 IoT 规则时指定的主题。也可以使用 `SendDataToWirelessDevice` API 操作从适用于 Amazon Sidewalk 的 AWS IoT Core 向您的设备发送下行链路消息。您可以通过启用消息传送状态事件通知来验证消息是否已送达。

**注意**  
有关连接和设置硬件平台的信息，请参阅《Amazon Sidewalk 文档》**中的[预置和注册终端设备](https://docs.sidewalk.amazon/provisioning/)和[设置硬件开发工具包（HDK）](https://docs.sidewalk.amazon/getting-started/sidewalk-onboard-prereq-hdk.html)。

## 向终端设备发送下行链路消息
<a name="iot-sidewalk-downlink-message"></a>

使用 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_SendDataToWirelessDevice.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_SendDataToWirelessDevice.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/send-data-to-wireless-device.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/send-data-to-wireless-device.html) CLI 命令从适用于 Amazon Sidewalk 的 AWS IoT Core 将下行链路消息发送到您的 Sidewalk 终端设备。下面显示了如何运行此命令的示例。有效负载数据是要发送的二进制文件，以 base64 编码。

```
aws iotwireless send-data-to-wireless-device \
    --id "<Wireless_Device_ID>" \
    --payload-data "SGVsbG8gVG8gRGV2c2lt" \
    --wireless-metadata Sidewalk={Seq=1,AckModeRetryDurationSecs=10}
```

以下显示了运行此命令的示例输出，也即发送到设备的下行链路消息的 ID。

```
{
    MessageId: "6011dd36-0043d6eb-0072-0008"
}
```

**注意**  
`SendDataToWirelessDevice` API 可以返回消息 ID，但消息可能未能成功传送。要检查发送到设备的消息的状态，您可以为您 Sidewalk 账户和设备启用消息传送状态事件。有关如何启用此事件的信息，请参阅[Sidewalk 资源的事件通知](iot-sidewalk-events.md)。有关此事件类型的更多信息，请参阅[消息传送事件](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sidewalk-message-delivery-events.html)。

## 查看来自设备的上行链路消息的格式
<a name="iot-sidewalk-uplink-metadata"></a>

在连接设备之后，您可以订阅在创建目标规则时指定的主题（例如，*`project/sensor/observed`*），并观察来自设备的上行链路消息。

如果您在创建目标时指定了主题名称，则可以订阅该主题以监控来自终端设备的上行链路消息。转到 AWS IoT 控制台的**测试**页面上的 [MQTT 测试客户端](https://console.aws.amazon.com/iot/home#/test)，输入主题名称（例如，*`project/sensor/observed`*），然后选择**订阅**。

下面的示例显示了从 Sidewalk 设备发送到 AWS IoT 的上行链路消息格式。`WirelessMetadata` 包含有关消息请求的元数据。

```
{
   "PayloadData":"ZjRlNjY1ZWNlNw==",
   "WirelessDeviceId":"wireless_device_id",   
   "WirelessMetadata":{
      "Sidewalk":{
         "CmdExStatus":"Cmd",
         "SidewalkId":"device_id",
         "Seq":0,
         "MessageType":"messageType"
      }
    }
}
```

下表显示了上行链路元数据中不同参数的定义。`device-id` 是无线设备的 ID（例如 `ABCDEF1234`），而 `messageType` 是从设备接收的上行链路消息的类型。


**Sidewalk 上行链路元数据参数**  

| 参数 | 描述 | 类型 | 必需 | 
| --- | --- | --- | --- | 
| PayloadData |  从无线设备发送的消息有效负载。  | 字符串 | 是 | 
| WirelessDeviceID | 发送数据的无线设备的标识符 | 字符串 | 是 | 
| Sidewalk.CmdExStatus |  命令运行时状态。响应类型的消息应包含状态代码，`COMMAND_EXEC_STATUS_SUCCESS`。但是，通知可能不包含状态代码。  | 枚举 | 否 | 
| Sidewalk.NackExStatus |  响应 nack 状态，可以为 `RADIO_TX_ERROR` 或者 `MEMORY_ERROR`。  | 字符串数组 | 否 | 