本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
測試用戶端裝置通訊
用戶端裝置可以使用AWS IoT Device SDK來探索、連線和與核心裝置進行通訊。您可以使用中的 Greengrass 探索用戶端AWS IoT Device SDK來使用 Greengrass 探索 API,該 API 會傳回用戶端裝置可連線之核心裝置的相關資訊。API 回應包括用於連線的 MQTT 代理程式端點,以及用來驗證每個核心裝置身分識別的憑證。然後,用戶端裝置可以嘗試每個端點,直到它成功連線到核心裝置為止。
用戶端裝置只能探索與它們建立關聯的核心裝置。在測試用戶端裝置與核心裝置之間的通訊之前,您必須將用戶端裝置與核心裝置建立關聯。如需詳細資訊,請參閱 關聯用戶端裝置。
Greengrass 探索 API 會傳回您指定的核心裝置 MQTT 代理程式端點。您可以使用 IP 偵測器元件為您管理這些端點,也可以為每個核心裝置手動管理這些端點。如需詳細資訊,請參閱 管理核心裝置端點。
注意
若要使用 Greengrass 探索 API,用戶端裝置必須具有權限。greengrass:Discover
如需詳細資訊,請參閱 用戶端裝置的最低AWS IoT原則。
提供多種程式設計語言版本AWS IoT Device SDK。如需詳細資訊,請參閱AWS IoT Core開發人員指南中的AWS IoT裝置 SDK。
測試通訊
在本節中,您可以使用適用於 Python 的 AWS IoT Device SDK v2
重要
若要將 AWS IoT Device SDK V2 用於 Python,裝置必須執行 Python 3.6 或更新版本。
要測試通信(對於 Python 的 AWS IoT Device SDK v2)
-
下載並安裝適用於 Python 的 AWS IoT Device SDK v2
到作為客戶端設備連接的AWS IoT東西。 在用戶端裝置上,執行下列動作:
-
克隆 AWS IoT Device SDK v2 的 Python 存儲庫下載它。
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
-
安裝適用於 Python 的 AWS IoT Device SDK V2。
python3 -m pip install --user ./aws-iot-device-sdk-python-v2
-
-
切換到示例文件夾在 AWS IoT Device SDK v2 中的 Python。
cd aws-iot-device-sdk-python-v2/samples
-
執行範例 Greengrass 探索應用程式。此應用程式需要引數,這些引數會指定用戶端裝置物件名稱、要使用的 MQTT 主題和訊息,以及驗證和保護連線的憑證。下列範例會將 Hello World 訊息傳送至
clients/
主題。MyClientDevice1
/hello/world-
將
MyClientDevice1
取代為用戶端裝置的物件名稱。 -
將
~/證書/ AmazonRoot CA1.pem
取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。 -
將
〜/證書/設備 .pem.crt
替換為客戶端設備上的設備證書的路徑。 -
將
〜/證書/私有 .pem.key 替換為客戶端設備上私鑰文
件的路徑。 -
將
us-east-1
取代為用戶端裝置和核心裝置運作的AWS區域。
python3 basic_discovery.py \\ --thing_name
MyClientDevice1
\\ --topic 'clients/MyClientDevice1
/hello/world' \\ --message 'Hello World!' \\ --ca_file~/certs/AmazonRootCA1.pem
\\ --cert~/certs/device.pem.crt
\\ --key~/certs/private.pem.key
\\ --regionus-east-1
\\ --verbosity Warn探索範例應用程式會傳送訊息 10 次並中斷連線。它也會訂閱發佈訊息的相同主題。如果輸出指出應用程式收到有關該主題的 MQTT 訊息,則用戶端裝置可以成功與核心裝置通訊。
Performing greengrass discovery... awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-MyGreengrassCore', cores=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='203.0.113.0', host_address='203.0.113.0', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\
MIICiT...EXAMPLE=
\ -----END CERTIFICATE-----\ '])]) Trying core arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore at host 203.0.113.0 port 8883 Connected! Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 0} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 0}' Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 1} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 1}'...
Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 9} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 9}'如果應用程式輸出錯誤,請參閱 Greengrass 探索問題疑難排解。
您也可以在核心裝置上檢視 Greengrass 記錄檔,以驗證用戶端裝置是否成功連線並傳送訊息。如需詳細資訊,請參閱 監控AWS IoT Greengrass日誌。
-
測試通訊
在本節中,您可以在 AWS IoT Device SDKv2 中針對 C++
要為 C ++ 構建 AWS IoT Device SDK v2,設備必須具有以下工具:
-
C ++ 11 或更高版本
-
製造 3.1 或更高版本
-
下列其中一個編譯器:
-
海灣合作委員會 4.8 或
-
鐺 3.9 或更高版本
-
無線電視廣告 2015 或以後
-
若要測試通訊 (C++ 為 AWS IoT Device SDK v2)
-
下載並構建 C ++ 的 AWS IoT Device SDK v2
以作為客戶端設備連接的AWS IoT東西。 在用戶端裝置上,執行下列動作:
-
為 C ++ 工作區 AWS IoT Device SDK v2 創建一個文件夾,並對其進行更改。
cd mkdir iot-device-sdk-cpp cd iot-device-sdk-cpp
-
克隆 AWS IoT Device SDK v2 用於 C ++ 存儲庫以下載它。該
--recursive
標誌指定下載子模塊。git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
-
為 C ++ 構建輸出的 AWS IoT Device SDK v2 創建一個文件夾,然後更改為它。
mkdir aws-iot-device-sdk-cpp-v2-build cd aws-iot-device-sdk-cpp-v2-build
-
為 C ++ 構建 AWS IoT Device SDK V2。
cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2 cmake --build . --target install
-
-
在適用於 C++ 的 AWS IoT Device SDK v2 中建置 Greengrass 探索範例應用程式。請執行下列操作:
-
變更為適用於 C++ 的 AWS IoT Device SDK v2 中的 Greengrass 探索範例資料夾。
cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
-
為 Greengrass 探索範例建置輸出建立資料夾,並加以變更。
mkdir build cd build
-
建置 Greengrass 探索範例應用程式。
cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" .. cmake --build . --config "Release"
-
-
執行範例 Greengrass 探索應用程式。此應用程式需要指定用戶端裝置物件名稱、要使用的 MQTT 主題,以及驗證和保護連線的憑證的引數。下列範例會訂閱
clients/
主題,並將您在指令行輸入的訊息發佈至相同主題。MyClientDevice1
/hello/world-
將
MyClientDevice1
取代為用戶端裝置的物件名稱。 -
將
~/證書/ AmazonRoot CA1.pem
取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。 -
將
〜/證書/設備 .pem.crt
替換為客戶端設備上的設備證書的路徑。 -
將
〜/證書/私有 .pem.key 替換為客戶端設備上私鑰文
件的路徑。 -
將
us-east-1
取代為用戶端裝置和核心裝置運作的AWS區域。
./basic-discovery \ --thing_name
MyClientDevice1
\ --topic 'clients/MyClientDevice1
/hello/world' \ --ca_file~/certs/AmazonRootCA1.pem
\ --cert~/certs/device.pem.crt
\ --key~/certs/private.pem.key
\ --regionus-east-1
探索範例應用程式會訂閱主題,並提示您輸入要發佈的訊息。
Connecting to group greengrassV2-coreDevice-MyGreengrassCore with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883 Connected to group greengrassV2-coreDevice-MyGreengrassCore, using connection to 203.0.113.0:8883 Successfully subscribed to clients/MyClientDevice1/hello/world Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.
如果應用程式輸出錯誤,請參閱 Greengrass 探索問題疑難排解。
-
-
輸入訊息,例如
Hello World!
。Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program. Hello World!
如果輸出指出應用程式收到有關該主題的 MQTT 訊息,則用戶端裝置可以成功與核心裝置通訊。
Operation on packetId 2 Succeeded Publish received on topic clients/MyClientDevice1/hello/world Message: Hello World!
您也可以在核心裝置上檢視 Greengrass 記錄檔,以驗證用戶端裝置是否成功連線並傳送訊息。如需詳細資訊,請參閱 監控AWS IoT Greengrass日誌。
測試通訊 (JavaScript)
在本節中,您可以使用 AWS IoT Device SDKv2 中的 Greengrass 探索範例 JavaScript來測試用
重要
若要將 AWS IoT Device SDK v2 用於 JavaScript,裝置必須執行節點 v10.0 或更新版本。
若要測試通訊 (AWS IoT Device SDKv2 用於 JavaScript)
-
下載並安裝 AWS IoT Device SDKv2 JavaScript
以作為客戶端設備連接的AWS IoT物件。 在用戶端裝置上,執行下列動作:
-
克隆 AWS IoT Device SDK v2 以供 JavaScript 存儲庫下載它。
git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
-
安裝適用於的 AWS IoT Device SDK v2 JavaScript。
cd aws-iot-device-sdk-js-v2 npm install
-
-
變更到 v2 中的 Greengrass 探索範例資料夾。AWS IoT Device SDK JavaScript
cd samples/node/basic_discovery
-
安裝 Greengrass 探索範例應用程式。
npm install
-
執行範例 Greengrass 探索應用程式。此應用程式需要引數,這些引數會指定用戶端裝置物件名稱、要使用的 MQTT 主題和訊息,以及驗證和保護連線的憑證。下列範例會將 Hello World 訊息傳送至
clients/
主題。MyClientDevice1
/hello/world-
將
MyClientDevice1
取代為用戶端裝置的物件名稱。 -
將
~/證書/ AmazonRoot CA1.pem
取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。 -
將
〜/證書/設備 .pem.crt
替換為客戶端設備上的設備證書的路徑。 -
將
〜/證書/私有 .pem.key 替換為客戶端設備上私鑰文
件的路徑。 -
將
us-east-1
取代為用戶端裝置和核心裝置運作的AWS區域。
node dist/index.js \ --thing_name
MyClientDevice1
\ --topic 'clients/MyClientDevice1
/hello/world' \ --message 'Hello World!' \ --ca_file~/certs/AmazonRootCA1.pem
\ --cert~/certs/device.pem.crt
\ --key~/certs/private.pem.key
\ --regionus-east-1
\ --verbose warn探索範例應用程式會傳送訊息 10 次並中斷連線。它也會訂閱發佈訊息的相同主題。如果輸出指出應用程式收到有關該主題的 MQTT 訊息,則用戶端裝置可以成功與核心裝置通訊。
Discovery Response: {"gg_groups":[{"gg_group_id":"greengrassV2-coreDevice-MyGreengrassCore","cores":[{"thing_arn":"arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore","connectivity":[{"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}]}],"certificate_authorities":["-----BEGIN CERTIFICATE-----\n
MIICiT...EXAMPLE=
\n-----END CERTIFICATE-----\n"]}]} Trying endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""} [WARN] [2021-06-12T00:46:45Z] [00007f90c0e8d700] [socket] - id=0x7f90b8018710 fd=26: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer. Connected to endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":1} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":2} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":3} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":4} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":5} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":6} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":7} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":8} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":9} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":10} Complete!如果應用程式輸出錯誤,請參閱 Greengrass 探索問題疑難排解。
您也可以在核心裝置上檢視 Greengrass 記錄檔,以驗證用戶端裝置是否成功連線並傳送訊息。如需詳細資訊,請參閱 監控AWS IoT Greengrass日誌。
-
測試通訊
在本節中,您可以使用適用於 Java 的 AWS IoT Device SDK v2
重要
要為 Java 構建 AWS IoT Device SDK v2,設備必須具有以下工具:
-
Java 8 或更高版本,並
JAVA_HOME
指向 Java 文件夾。 -
Apache Maven
若要測試通訊 (Java 為 AWS IoT Device SDK v2)
-
下載並構建適用於 Java 的 AWS IoT Device SDK v2
以作為客戶端設備連接的AWS IoT東西。 在用戶端裝置上,執行下列動作:
-
克隆 AWS IoT Device SDK V2 的 Java 存儲庫下載它。
git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
-
更改為 AWS IoT Device SDK V2 的 Java 文件夾。
-
建置適用於 Java 的 AWS IoT Device SDK V2。
cd aws-iot-device-sdk-java-v2 mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*" mvn clean install
-
-
執行範例 Greengrass 探索應用程式。此應用程式需要指定用戶端裝置物件名稱、要使用的 MQTT 主題,以及驗證和保護連線的憑證的引數。下列範例會訂閱
clients/
主題,並將您在指令行輸入的訊息發佈至相同主題。MyClientDevice1
/hello/world-
將
MyClientDevice1
的兩個執行個體取代為用戶端裝置的物件名稱。 -
以用戶端裝置上 Amazon 根 CA
憑證的路徑取代 $ 首頁/憑證/AmazonRootCA1.PEM
。 -
將
$家庭/證書/裝置 .pem.crt
取代為用戶端裝置上裝置憑證的路徑。 -
將
$首頁/證書/私用.pem.key 取代為用戶端裝置上私密金鑰
檔案的路徑。 -
將
us-east-1
替換為客戶端設備和核心設備的運行AWS 區域位置。
DISCOVERY_SAMPLE_ARGS="--thing_name
MyClientDevice1
\ --topic 'clients/MyClientDevice1
/hello/world' \ --ca_file$HOME/certs/AmazonRootCA1.pem
\ --cert$HOME/certs/device.pem.crt
\ --key$HOME/certs/private.pem.key
\ --regionus-east-1
" mvn exec:java -pl samples/Greengrass \ -Dexec.mainClass=greengrass.BasicDiscovery \ -Dexec.args="$DISCOVERY_SAMPLE_ARGS"探索範例應用程式會訂閱主題,並提示您輸入要發佈的訊息。
Connecting to group ID greengrassV2-coreDevice-MyGreengrassCore, with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883 Started a clean session Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:
如果應用程式輸出錯誤,請參閱 Greengrass 探索問題疑難排解。
-
-
輸入訊息,例如
Hello World!
。Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program: Hello World!
如果輸出指出應用程式收到有關該主題的 MQTT 訊息,則用戶端裝置可以成功與核心裝置通訊。
Message received on topic clients/MyClientDevice1/hello/world: Hello World!
您也可以在核心裝置上檢視 Greengrass 記錄檔,以驗證用戶端裝置是否成功連線並傳送訊息。如需更多詳細資訊,請參閱 監控AWS IoT Greengrass日誌。