教學課程:使用模擬裝置來測試與 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 10.x.x 版或更新版本。
您可以從 nodejs.org 下載適用於多種平台的 Node.js。
您可以使用下列命令,以確認開發電腦上目前的 Node.js 版本:
node --version
從適用於 Node.js 的 Azure IoT 範例 (英文) 複製或下載範例 Node.js 專案。
請確定您的防火牆已開啟連接埠 8883。 本教學課程中的裝置範例會使用 MQTT 通訊協定,其會透過連接埠 8883 進行通訊。 某些公司和教育網路環境可能會封鎖此連接埠。 如需此問題的詳細資訊和解決方法,請參閱連線至 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\ConnectivityTests 資料夾。
在終端機視窗中,執行下列命令以安裝模擬裝置應用程式所需的程式庫,並執行模擬裝置應用程式。 使用您在註冊裝置時所記下的裝置連接字串。
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 generate-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\ConnectivityTests 資料夾。
在終端機視窗中,執行下列命令以安裝模擬的裝置應用程式所需的程式庫並執行模擬的裝置應用程式:
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\ConnectivityTests 資料夾。
在終端機視窗中,執行下列命令以安裝模擬的裝置應用程式所需的程式庫並執行模擬的裝置應用程式:
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 中樞監視的操作說明文章。
監視 IoT 中樞 (部分機器翻譯)