本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
測試用戶端裝置通訊
用戶端裝置可以使用 AWS IoT Device SDK 來探索、連線核心裝置,以及與核心裝置通訊。您可以在 中使用 Greengrass 探索用戶端 AWS IoT Device SDK 來使用 Greengrass 探索 API,這會傳回用戶端裝置可連線之核心裝置的相關資訊。API 回應包含要連線的 MQTT 代理程式端點,以及用來驗證每個核心裝置的身分的憑證。然後,用戶端裝置可以嘗試每個端點,直到成功連接到核心裝置為止。
用戶端裝置只能探索與之建立關聯的核心裝置。在測試用戶端裝置與核心裝置之間的通訊之前,您必須將用戶端裝置與核心裝置建立關聯。如需詳細資訊,請參閱關聯用戶端裝置。
Greengrass 探索 API 會傳回您指定的核心裝置 MQTT 代理程式端點。您可以使用 IP 偵測器元件來為您管理這些端點,也可以為每個核心裝置手動管理它們。如需詳細資訊,請參閱管理核心裝置端點。
注意
若要使用 Greengrass 探索 API,用戶端裝置必須具有 greengrass:Discover許可。如需詳細資訊,請參閱用戶端裝置的最低 AWS IoT 政策。
AWS IoT Device SDK 提供多種程式設計語言。如需詳細資訊,請參閱《 AWS IoT Core 開發人員指南AWS IoT 》中的 裝置SDKs。
測試通訊 (Python)
在本節中,您會在適用於 AWS IoT Device SDK Python 的 v2
重要
若要使用 AWS IoT Device SDK v2 for Python,裝置必須執行 Python 3.6 或更新版本。
測試通訊 (AWS IoT Device SDK v2 for Python)
-
下載並安裝適用於 AWS IoT Device SDK Python 的 v2
至 AWS IoT 物件,以做為用戶端裝置進行連線。 在用戶端裝置上,執行下列動作:
-
複製 AWS IoT Device SDK v2 for Python 儲存庫以進行下載。
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git -
安裝 AWS IoT Device SDK v2 for Python。
python3 -m pip install --user ./aws-iot-device-sdk-python-v2
-
-
變更為 AWS IoT Device SDK v2 for Python 中的範例資料夾。
cd aws-iot-device-sdk-python-v2/samples/greengrass -
執行範例 Greengrass 探索應用程式。此應用程式需要指定用戶端裝置物件名稱的引數、要使用的 MQTT 主題和訊息,以及驗證和保護連線的憑證。下列範例會將 Hello World 訊息傳送至
clients/主題。MyClientDevice1/hello/world-
將
MyClientDevice1取代為用戶端裝置的物件名稱。 -
將
~/certs/AmazonRootCA1.pem取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。 -
將
~/certs/device.pem.crt取代為用戶端裝置上裝置憑證的路徑。 -
將
~/certs/private.pem.key取代為用戶端裝置上私有金鑰檔案的路徑。 -
將
us-east-1取代為用戶端裝置和核心裝置操作所在的 AWS 區域。
python3 basic_discovery.py \\ --thing_nameMyClientDevice1\\ --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 日誌。
-
測試通訊 (C++)
在本節中,您會在適用於 AWS IoT Device SDK C++ 的 v2
若要建置適用於 C++ 的 AWS IoT Device SDK v2,裝置必須具有下列工具:
-
C++ 11 或更新版本
-
CMake 3.1 或更新版本
-
下列其中一個編譯器:
-
GCC 4.8 或更新版本
-
Clang 3.9 或更新版本
-
MSVC 2015 或更新版本
-
測試通訊 (適用於 C++ 的AWS IoT Device SDK v2)
-
下載並建置適用於 AWS IoT Device SDK C++ 的 v2
至 AWS IoT 物件,以做為用戶端裝置進行連線。 在用戶端裝置上,執行下列動作:
-
建立適用於 C++ 工作區的 AWS IoT Device SDK v2 資料夾,然後變更為該資料夾。
cd mkdir iot-device-sdk-cpp cd iot-device-sdk-cpp -
複製適用於 C++ 儲存庫的 AWS IoT Device SDK v2 以進行下載。
--recursive旗標指定 下載子模組。git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git -
為 AWS IoT Device SDK v2 建立 C++ 組建輸出的資料夾,然後變更為該資料夾。
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取代為用戶端裝置的物件名稱。 -
將
~/certs/AmazonRootCA1.pem取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。 -
將
~/certs/device.pem.crt取代為用戶端裝置上裝置憑證的路徑。 -
將
~/certs/private.pem.key取代為用戶端裝置上私有金鑰檔案的路徑。 -
將
us-east-1取代為用戶端裝置和核心裝置操作所在的 AWS 區域。
./basic-discovery \ --thing_nameMyClientDevice1\ --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 SDK JavaScript 的 v2
重要
若要使用 AWS IoT Device SDK v2 for JavaScript,裝置必須執行 Node v10.0 或更新版本。
測試通訊 (適用於 JavaScript 的AWS IoT Device SDK v2)
-
下載並安裝適用於 AWS IoT Device SDK JavaScript 的 v2
至 AWS IoT 物件,以做為用戶端裝置進行連線。 在用戶端裝置上,執行下列動作:
-
複製 AWS IoT Device SDK v2 for JavaScript 儲存庫以進行下載。
git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git -
安裝適用於 JavaScript 的 AWS IoT Device SDK v2。
cd aws-iot-device-sdk-js-v2 npm install
-
-
變更為適用於 JavaScript 的 AWS IoT Device SDK v2 中的 Greengrass 探索範例資料夾。
cd samples/node/greengrass/basic_discovery -
安裝 Greengrass 探索範例應用程式。
npm install -
執行範例 Greengrass 探索應用程式。此應用程式需要指定用戶端裝置物件名稱的引數、要使用的 MQTT 主題和訊息,以及驗證和保護連線的憑證。下列範例會將 Hello World 訊息傳送至
clients/主題。MyClientDevice1/hello/world-
將
MyClientDevice1取代為用戶端裝置的物件名稱。 -
將
~/certs/AmazonRootCA1.pem取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。 -
將
~/certs/device.pem.crt取代為用戶端裝置上裝置憑證的路徑。 -
將
~/certs/private.pem.key取代為用戶端裝置上私有金鑰檔案的路徑。 -
將
us-east-1取代為您的用戶端裝置和核心裝置操作 AWS 的區域。
node dist/index.js \ --thing_nameMyClientDevice1\ --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-----\nMIICiT...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 Java 的 v2
重要
若要建置適用於 Java 的 AWS IoT Device SDK v2,裝置必須具有下列工具:
-
Java 8 或更新版本,並
JAVA_HOME指向 Java 資料夾。 -
Apache Maven
測試通訊 (AWS IoT Device SDK v2 for Java)
-
下載並建置適用於 AWS IoT Device SDK Java 的 v2
至 AWS IoT 物件,以做為用戶端裝置進行連線。 在用戶端裝置上,執行下列動作:
-
複製 AWS IoT Device SDK v2 for Java 儲存庫以進行下載。
git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git -
變更為 AWS IoT Device SDK v2 for 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的兩個執行個體。 -
將
$HOME/certs/AmazonRootCA1.pem取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。 -
將
$HOME/certs/device.pem.crt取代為用戶端裝置上裝置憑證的路徑。 -
將
$HOME/certs/private.pem.key取代為用戶端裝置上的私有金鑰檔案路徑。 -
將
us-east-1取代為您的用戶端裝置和核心裝置操作 AWS 區域 所在的 。
DISCOVERY_SAMPLE_ARGS="--thing_nameMyClientDevice1\ --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/Discovery \ -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 日誌。