教學課程:使用模擬裝置來測試IoT中樞的連線能力
在本教學課程中,您會使用 Azure IoT 中樞 入口網站工具和 Azure CLI 命令來測試裝置連線能力。 本教學課程也會使用您在桌面電腦上執行的簡單裝置模擬器。
如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
在本教學課程中,您會了解如何:
- 檢查您的裝置驗證
- 檢查裝置到雲端連線能力
- 檢查雲端到裝置的連線能力
- 檢查裝置對應項同步處理
必要條件
本教學課程使用 Azure CLI 來建立雲端資源。 有兩種方式可執行 CLI 命令:
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 快速入門 - Bash。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
- 使用 az login 命令來登入 Azure CLI。
- 出現提示時,請在第一次使用時安裝 Azure CLI 擴充功能。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
- 執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
注意
本文使用最新版的 Azure IoT 擴充功能,稱為
azure-iot
。 舊版則稱為azure-cli-iot-ext
。您一次只能安裝一個版本。 您可以使用az extension list
命令來驗證目前安裝的延伸模組。使用
az extension remove --name azure-cli-iot-ext
移除舊版的擴充功能。使用
az extension add --name azure-iot
新增新版的擴充功能。若要查看您已安裝的擴充功能,請使用
az extension list
。您在本教學課程中執行的範例應用程式會使用 Node.js。 您需要在開發電腦上Node.js v10.x.x 或更新版本。
您可以從 nodejs.org 下載多個平臺 的Node.js。
您可以使用下列命令,在開發電腦上驗證目前版本的Node.js:
node --version
請確定您的防火牆中已開啟埠 8883。 本教學課程中的裝置範例會使用透過埠 8883 通訊的 MQTT 通訊協定。 某些公司和教育網路環境可能會封鎖此連接埠。 如需此問題的詳細資訊和解決方法,請參閱連線至 IoT 中樞 (MQTT)。
建立 IoT 中樞
在本節中,您會使用 Azure CLI 來建立 IoT 中樞和資源群組。 Azure 資源群組是在其中部署與管理 Azure 資源的邏輯容器。 IoT 中樞可作為IoT應用程式與裝置之間雙向通訊的中央訊息中樞。
如果您的 Azure 訂用帳戶中已經有 IoT 中樞,您可以略過本節。
若要建立IoT中樞和資源群組:
啟動 CLI 應用程式。 若要在本文的其餘部分執行 CLI 命令,請複製命令語法、將它貼到 CLI 應用程式、編輯變數值,然後按
Enter
。- 如果您使用 Cloud Shell,請選取 CLI 命令上的 [試用] 按鈕,以在分割瀏覽器視窗中啟動 Cloud Shell。 或者,您可以在個別的瀏覽器索引標籤中開啟 Cloud Shell 。
- 如果您在本機使用 Azure CLI,請啟動 CLI 控制台應用程式並登入 Azure CLI。
執行 az extension add 以安裝或升級 azure-iot 擴充功能至目前的版本。
az extension add --upgrade --name azure-iot
在您的 CLI 應用程式中,執行 az group create 命令來建立資源群組。 下列命令會在 eastus 位置建立名為 MyResourceGroup 的資源群組。
注意
您可以選擇性地設定不同的位置。 若要檢視可用的位置,請執行
az account list-locations
。 本快速入門使用 eastus ,如範例命令所示。az group create --name MyResourceGroup --location eastus
執行 az iot hub create 命令以建立IoT中樞。 建立IoT中樞可能需要幾分鐘的時間。
YourIotHubName。 使用您為IoT中樞選擇的名稱,取代下列命令中的這個佔位元元和周圍大括弧。 IoT 中樞名稱在 Azure 中必須全域是唯一的。 無論您在哪裡看到佔位元,在本快速入門的其餘部分使用IoT中樞名稱。
az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
檢查裝置驗證
裝置必須先向中樞進行驗證,才能與中樞交換任何數據。 您可以在入口網站的 [裝置管理] 區段中使用IoT裝置工具來管理您的裝置,並檢查其所使用的驗證密鑰。 在本教學課程的本節中,您會新增測試裝置、擷取其密鑰,並檢查測試裝置是否可以連線到中樞。 稍後您會重設驗證密鑰,以觀察裝置嘗試使用過期密鑰時會發生什麼情況。
註冊裝置
裝置必須向您的 IoT 中樞註冊,才能進行連線。 在本節中,您會使用 Azure CLI 來建立裝置身分識別。
如果您已在IoT中樞註冊裝置,您可以略過本節。
若要建立裝置身分識別:
在 CLI 殼層中執行 az iot hub device-identity create 命令。 此命令會建立裝置身分識別。
your_iot_hub_name。 將下方的佔位元取代為您 IoT 中樞選擇的名稱。
myDevice。 您可以針對本文中的裝置識別碼使用此名稱,或提供不同的裝置名稱。
az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
執行 az iot hub device-identity connection-string show 命令。
az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
連接字串 輸出的格式如下:
HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
將 連接字串 儲存在安全的位置。
注意
讓 CLI 應用程式保持開啟。 您將在後續步驟中使用。
模擬測試裝置
若要模擬將遙測傳送至IoT中樞的裝置,請執行您先前下載的模擬裝置應用程式Node.js。
在開發電腦上的終端機視窗中,流覽至您下載之範例Node.js專案的根資料夾。 然後流覽至 iot-hub\Tutorials\連線 ivityTests 資料夾。
在終端機視窗中,執行下列命令來安裝必要的連結庫,並執行模擬裝置應用程式。 當您註冊裝置時,請使用裝置 連接字串 記下。
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
終端機視窗一旦連線到中樞,就會顯示成功訊息:
您現在已使用IoT中樞所產生的裝置金鑰,從裝置成功驗證。
重設金鑰
在本節中,您會重設裝置密鑰,並在模擬裝置嘗試連線時觀察錯誤。
若要重設裝置的主要裝置密鑰,請執行 az iot hub device-identity update 命令:
# Generate a new Base64 encoded key using the current date read key < <(date +%s | sha256sum | base64 | head -c 32) # Reset the primary device key for test device az iot hub device-identity update --device-id {your_device_id} --set authentication.symmetricKey.primaryKey=$key --hub-name {your_iot_hub_name}
在開發電腦上的終端機視窗中,再次執行模擬裝置應用程式:
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
這次您在應用程式嘗試連線時看到驗證錯誤:
產生共用存取簽章 (SAS) 令牌
如果您的裝置使用其中一個 IoT 中樞 裝置 SDK,SDK 連結庫程式代碼會產生用來向中樞驗證的 SAS 令牌。 SAS 令牌會從中樞的名稱、裝置的名稱和裝置密鑰產生。
在某些情況下,例如在雲端通訊協定閘道或自訂驗證配置中,您可能需要自行產生 SAS 令牌。 若要針對 SAS 產生程式代碼的問題進行疑難解答,在測試期間產生已知良好的 SAS 令牌會很有用。
注意
SimulatedDevice-2.js範例包含使用 和 不使用 SDK 來產生 SAS 令牌的範例。
執行 az iot hub genereate-sas-token 命令,以使用 CLI 產生已知良好的 SAS 令牌:
az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
複製所產生 SAS 令牌的全文。 SAS 令牌看起來像下列範例:
SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111
在開發電腦上的終端機視窗中,流覽至您下載之範例Node.js專案的根資料夾。 然後流覽至 iot-hub\Tutorials\連線 ivityTests 資料夾。
在終端機視窗中,執行下列命令來安裝必要的連結庫,並執行模擬裝置應用程式:
npm install node SimulatedDevice-2.js "{Your SAS token}"
終端機視窗會在使用SAS令牌連線到您的中樞後,顯示成功訊息:
您現在已使用 CLI 命令所產生的測試 SAS 令牌,從裝置成功驗證。 SimulatedDevice-2.js檔案包含範例程式代碼,示範如何在程式代碼中產生SAS令牌。
通訊協定
裝置可以使用下列任一通訊協議來連線到IoT中樞:
通訊協定 | 輸出埠 |
---|---|
MQTT | 8883 |
透過 WebSocket 的 MQTT | 443 |
AMQP | 5671 |
透過 WebSocket 的 AMQP | 443 |
HTTPS | 443 |
如果防火牆封鎖輸出埠,裝置就無法連線:
檢查裝置到雲端連線能力
裝置連線之後,即可開始將遙測傳送至IoT中樞。 本節說明如何確認裝置所傳送的遙測是否到達中樞。
傳送裝置到雲端訊息
由於我們在上一節中重設裝置的 連接字串,請使用 az iot hub device-identity connection-string show 命令來擷取更新的 連接字串:
az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
若要執行傳送訊息的模擬裝置,請流覽至您所下載程序代碼中的iot-hub\Tutorials\連線 ivityTests 資料夾。
在終端機視窗中,執行下列命令來安裝必要的連結庫,並執行模擬裝置應用程式:
npm install node SimulatedDevice-3.js "{your_device_connection_string}"
終端機視窗會在將遙測傳送至中樞時顯示資訊:
監視傳入訊息
您可以使用 入口網站中的計量 來確認遙測訊息已連線到IoT中樞。
在 Azure 入口網站 中,選取 [資源] 下拉式清單中的IoT中樞。
從導覽功能表的 [監視] 區段選取 [計量]。
選取 [傳送 為計量的遙測訊息],並將時間範圍設定為 [ 過去一小時]。 此圖表顯示模擬裝置所傳送訊息的匯總計數:
啟動模擬裝置之後,計量需要幾分鐘的時間才能使用。
檢查雲端到裝置的連線能力
本節說明如何對裝置進行測試直接方法呼叫,以檢查雲端到裝置的連線能力。 您可以在開發電腦上執行模擬裝置,以接聽來自中樞的直接方法呼叫。
在終端機視窗中,使用下列命令來執行模擬裝置應用程式:
node SimulatedDevice-3.js "{your_device_connection_string}"
在不同的視窗中,使用 az iot hub invoke-device-method 命令在裝置上呼叫直接方法:
az iot hub invoke-device-method --device-id {your_device_id} --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {your_iot_hub_name}
模擬裝置會在收到直接方法呼叫時,將訊息列印至主控台:
當模擬裝置成功接收直接方法呼叫時,它會將通知傳回中樞:
檢查對應項同步處理
裝置使用對應項來同步處理裝置與中樞之間的狀態。 在本節中,您會使用 CLI 命令將所需的屬性傳送至裝置,並讀取裝置所傳送的報告屬性。
您在本節中使用的模擬裝置會在啟動時,將報告的屬性傳送至中樞,並在收到所需屬性時,將所需的屬性列印到控制台。
在終端機視窗中,使用下列命令來執行模擬裝置應用程式:
node SimulatedDevice-3.js "{your_device_connection_string}"
在另一個視窗中,執行 az iot hub device-twin show 命令,確認中樞已從裝置收到回報的屬性:
az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
在命令的輸出中,您可以在報告的屬性區段中看到 devicelaststarted 屬性。 此屬性會顯示您上次啟動模擬裝置的日期和時間。
若要確認中樞可以將所需的屬性值傳送至裝置,請使用 az iot hub device-twin update 命令:
az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id {your_device_id} --hub-name {your_iot_hub_name}
模擬裝置從中樞收到所需的屬性更新時,會列印訊息:
除了在進行所需的屬性變更之後,模擬裝置也會在啟動時自動檢查所需的屬性。
清除資源
如果您不再需要IoT中樞,請在入口網站中刪除它和資源群組。 若要這樣做,請選取包含IoT中樞的資源群組,然後選取 [ 刪除]。
下一步
在本教學課程中,您已瞭解如何檢查裝置密鑰、檢查裝置到雲端連線能力、檢查雲端到裝置連線能力,以及檢查裝置對應項同步處理。 若要深入瞭解如何監視IoT中樞,請流覽操作說明文章以 IoT 中樞監視。