

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 示範使用 AWS IoT 裝置用戶端發佈訊息
<a name="iot-dc-testconn-publish"></a>

本節中的程序示範 AWS IoT 裝置用戶端如何傳送預設和自訂 MQTT 訊息。

在上一個步驟為這些練習建立的此政策中的政策陳述式，會授予 Raspberry Pi 執行這些動作的許可：
+ 

**`iot:Connect`**  
提供名為 的用戶端`PubSubTestThing`進行連線，也就是執行 AWS IoT 裝置用戶端的 Raspberry Pi。

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing"
        ]
      }
  ```
+ 

**`iot:Publish`**  
授予 Raspberry Pi 許可來發佈擁有 `test/dc/pubtopic` MQTT 主題的訊息。

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Publish"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic"
        ]
      }
  ```

  此 `iot:Publish` 動作會授予許可來發佈至資源陣列中列出的 MQTT 主題。這些訊息的*內容*不受政策陳述式的控制。

## 使用 AWS IoT 裝置用戶端發佈預設訊息
<a name="iot-dc-testconn-publish-default"></a>

此程序會執行 AWS IoT Device Client，以便發佈 MQTT **測試用戶端接收和顯示的單一預設 MQTT** 訊息。

**從 AWS IoT 裝置用戶端傳送預設 MQTT 訊息**

1. 請確保這兩個連接到 Raspberry Pi 的本機主機電腦終端機視窗和有 **MQTT test client** (MQTT 測試用戶端) 的視窗，會在您執行此程序時顯示出來。

1. 在終端機視窗中，輸入這些命令，以使用在 中建立的組態檔案執行 AWS IoT 裝置用戶端[建立組態檔](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1)。

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-config.json
   ```

   在終端機視窗中， AWS IoT 裝置用戶端會顯示資訊訊息，以及執行時發生的任何錯誤。

   如果終端機視窗中未顯示任何錯誤，請檢閱 **MQTT test client** (MQTT 測試用戶端)。

1. 在 **MQTT test client** (MQTT 測試用戶端) 的 **Subscriptions** (訂閱) 視窗中，請參閱傳送至 `test/dc/pubtopic` 訊息主題的 *Hello World\$1* 訊息。

1. 如果 AWS IoT Device Client 未顯示錯誤，而且您在 **MQTT 測試用戶端**看到 *Hello World！* 傳送至`test/dc/pubtopic`訊息，表示連線成功。

1. 在終端機視窗中，輸入 **^C**(Ctrl-C) 以停止 AWS IoT 裝置用戶端。

在您示範 AWS IoT Device Client 已發佈預設 MQTT 訊息之後，您可以繼續前往 [使用 AWS IoT 裝置用戶端發佈自訂訊息](#iot-dc-testconn-publish-custom)。

## 使用 AWS IoT 裝置用戶端發佈自訂訊息
<a name="iot-dc-testconn-publish-custom"></a>

本節中的程序會建立自訂 MQTT 訊息，然後執行 AWS IoT 裝置用戶端，以便它發佈一次自訂 MQTT 訊息，供 **MQTT test client** (MQTT 測試用戶端) 接收和顯示。

### 為 AWS IoT 裝置用戶端建立自訂 MQTT 訊息
<a name="iot-dc-testconn-publish-custom-create"></a>

在連接至 Raspberry Pi 本機主機電腦上的終端機視窗中執行這些步驟。

**為 AWS IoT 要發佈的裝置用戶端建立自訂訊息**

1. 在終端機視窗中，開啟文字編輯器，例如 `nano`。

1. 在文字編輯器中複製並貼入以下 JSON 文件。這將是 AWS IoT 裝置用戶端發佈的 MQTT 訊息承載。

   ```
   {
     "temperature": 28,
     "humidity": 80,
     "barometer": 1013,
     "wind": {
       "velocity": 22,
       "bearing": 255
     }
   }
   ```

1. 將文字編輯器的內容儲存為 **\$1/messages/sample-ws-message.json**。

1. 輸入下列命令，為剛建立的訊息檔案設定許可。

   ```
   chmod 600 ~/messages/*
   ```

**為 AWS IoT 裝置用戶端建立組態檔案，以用來傳送自訂訊息**

1. 在終端機視窗中，在 等文字編輯器中`nano`，開啟現有的 AWS IoT Device Client 組態檔案：**\$1/dc-configs/dc-pubsub-config.json**。

1. 按如下所示編輯 `samples` 物件。無需變更此檔案的其他部分。

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/subtopic",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

1. 將文字編輯器的內容儲存為 **\$1/dc-configs/dc-pubsub-custom-config.json**。

1. 執行此命令來設定新組態檔的許可。

   ```
   chmod 644 ~/dc-configs/dc-pubsub-custom-config.json
   ```

### 使用 AWS IoT 裝置用戶端發佈自訂 MQTT 訊息
<a name="iot-dc-testconn-publish-custom-publish"></a>

此項變更只會影響 MQTT 訊息承載的*內容*，因此目前的政策會繼續運作。不過，如果 *MQTT 主題* (如 `~/dc-configs/dc-pubsub-custom-config.json` 中定義的 `publish-topic` 值) 已變更，`iot::Publish` 政策陳述式也需要進行修改，以允許 Raspberry Pi 發佈至新的 MQTT 主題。

**從 AWS IoT 裝置用戶端傳送 MQTT 訊息**

1. 請確保這兩個終端機視窗和有 **MQTT test client** (MQTT 測試用戶端) 的視窗，會在您執行此程序時顯示出來。此外，請確保 **MQTT test client** (MQTT 測試用戶端) 仍然訂閱了 **\$1** 主題篩選條件。如果未訂閱，請訂閱 **\$1** 主題篩選條件。

1. 在終端機視窗中輸入這些命令，使用在 [建立組態檔](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1) 中建立的組態檔來執行 AWS IoT 裝置用戶端。

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   在終端機視窗中， AWS IoT 裝置用戶端會顯示資訊訊息，以及執行時發生的任何錯誤。

   如果終端機視窗中未顯示任何錯誤，請檢閱 MQTT test client (MQTT 測試用戶端)。

1. 在 **MQTT test client** (MQTT 測試用戶端) 的 **Subscriptions** (訂閱) 視窗中，參閱傳送至 `test/dc/pubtopic` 訊息主題的自訂訊息承載。

1. 如果 AWS IoT Device Client 沒有顯示錯誤，而且您在 **MQTT 測試用戶端**中看到發佈至`test/dc/pubtopic`訊息的自訂訊息承載，表示您已成功發佈自訂訊息。

1. 在終端機視窗中，輸入 **^C**(Ctrl-C) 以停止 AWS IoT 裝置用戶端。

在您示範 AWS IoT Device Client 已發佈自訂訊息承載之後，您可以繼續 [示範使用 AWS IoT 裝置用戶端訂閱訊息](iot-dc-testconn-subscribe.md)。