排程及廣播作業 (Azure CLI)
使用 Azure IoT 中樞排程和追蹤會更新數百萬部裝置的作業。 使用作業以:
- 更新所需屬性
- 更新標籤
- 叫用直接方法
就概念而言,作業會包裝上述其中一個動作,然後針對一組裝置追蹤執行進度。 作業互動的一組裝置是由裝置對應項查詢所定義。 例如,後端應用程式可以在 10,000 個裝置上使用作業叫用重新啟動方法,此方法由裝置對應項查詢指定並排定在未來執行。 接著,該應用程式可以追蹤每個這些裝置接收和執行重新啟動方法的進度。
從下列文章深入了解這當中的每一項功能:
裝置對應項和屬性:開始使用裝置對應項和了解並使用 IoT 中樞中的裝置對應項屬性
直接方法:IoT 中樞開發人員指南 - 直接方法 (部分機器翻譯)
注意
本文中所述的功能僅適用於 IoT 中樞的標準層。 如需基本和標準/免費 IoT 中樞層的詳細資訊,請參閱選擇適合您解決方案的 IoT 中樞層 (部分機器翻譯)。
本文說明如何建立兩個 Azure CLI 工作階段:
建立模擬裝置的工作階段。 模擬裝置已設定為當叫用任何直接方法時傳回狀態碼和 JSON 承載。
建立兩個排程作業的工作階段。 第一個作業會叫用直接方法,而第二個作業會更新在其他工作階段中建立之模擬裝置上所需的裝置對應項屬性。
必要條件
Azure CLI。 您也可使用 Azure Cloud Shell (部分機器翻譯) (可在瀏覽器或 Windows 終端等應用程式中執行的互動式 CLI 殼層) 執行本文中的命令。 如果您使用 Cloud Shell,就不需要安裝任何項目。 如果您偏好在本機使用 CLI,本文需要 Azure CLI 2.36 版或更新版本。 執行
az --version
以尋找版本。 若要在本機安裝或升級 Azure CLI,請參閱安裝 Azure CLI (部分機器翻譯)。Azure 訂用帳戶中的 IoT 中樞。 如果您還沒有中樞,可遵循建立 IoT 中樞中的步驟。
請確定您的防火牆已開啟連接埠 8883。 本文中的裝置範例會使用 MQTT 通訊協定,其會透過連接埠 8883 進行通訊。 某些公司和教育網路環境可能會封鎖此連接埠。 如需此問題的詳細資訊和解決方法,請參閱連線至 IoT 中樞 (MQTT)。
準備 Cloud Shell
如果您想要使用 Azure Cloud Shell,您必須先啟動並設定它。 如果您在本機使用 CLI,請跳至準備兩個 CLI 工作階段一節。
從 Azure 入口網站中的頁面標頭選取 Cloud Shell 圖示。
注意
如果這是您第一次使用 Cloud Shell,它將會提示您建立使用 Cloud Shell 所需的儲存體。 選取用來建立儲存體帳戶和 Microsoft Azure 檔案共用的訂用帳戶。
使用 Cloud Shell 工具列中的環境選取器來選取您慣用的 CLI 環境。 本文使用 Bash 環境。 您也可以使用 PowerShell 環境。
注意
某些命令在 Bash 和 PowerShell 環境中需要不同的語法或格式設定。 如需詳細資訊,請參閱成功使用 Azure CLI 的提示 (部分機器翻譯)。
準備兩個 CLI 工作階段
接著,您必須準備兩個 Azure CLI 工作階段。 若使用 Cloud Shell,您必須在個別的 Cloud Shell 索引標籤中執行這些工作階段。 若使用本機 CLI 用戶端,您必須執行個別的 CLI 執行個體。 針對下列工作,請使用個別的 CLI 工作階段:
- 第一個工作階段會模擬與 IoT 中樞通訊的 IoT 裝置。
- 第二個工作階段會使用您的 IoT 中樞排程模擬裝置的作業。
注意
使用 Azure CLI 時,您必須登入 Azure 帳戶。 如果您使用 Cloud Shell,則會自動登入您的 Azure 帳戶。 如果您使用本機 CLI 用戶端,您必須登入每個 CLI 工作階段。 您的 Azure CLI Shell 工作階段與 IoT 中樞之間的所有通訊都會經過驗證和加密。 因此,本文不需要搭配實際裝置使用的額外驗證 (如連接字串)。 如需有關使用 Azure CLI 登入的詳細資訊,請參閱使用 Azure CLI 登入 (部分機器翻譯)。
在第一個 CLI 工作階段中,執行 az extension add 命令。 該命令會將適用於 Azure CLI 的 Microsoft Azure IoT 延伸模組新增至 CLI Shell。 延伸模組會將 IoT 中樞、IoT Edge 和 IoT 裝置佈建服務 (DPS) 特有的命令新增至 Azure CLI。 安裝延伸模組後,您不需要在任何 Cloud Shell 工作階段中再次加以安裝。
az extension add --name azure-iot
注意
本文使用最新版的 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
。開啟第二個 CLI 工作階段。 如果您在瀏覽器中使用 Cloud Shell,請選取第一個 CLI 工作階段工具列上的 [開啟新工作階段] 圖示。 若在本機使用 CLI,請開啟第二個執行個體。
建立和模擬裝置
在本節中,您會在第一個 CLI 工作階段中為您的 IoT 中樞建立裝置身分識別,然後使用該裝置身分識別來模擬裝置。 模擬裝置會回應您在第二個 CLI 工作階段中排程的作業。
若要建立並啟動模擬裝置:
在第一個 CLI 工作階段中,執行 az iot hub device-identity create 命令,以其對應的值取代下列預留位置。 此命令會建立模擬裝置的裝置身分識別。
{DeviceName}。 模擬裝置的名稱。
{HubName}。 IoT 中樞的名稱。
az iot hub device-identity create --device-id {DeviceName} --hub-name {HubName}
在第一個 CLI 工作階段中,執行 az iot device simulate 命令,以其對應的值取代下列預留位置。 此命令會模擬您在上一個步驟中建立的裝置。 模擬裝置已設定為當叫用直接方法時傳回狀態碼和承載。
{DeviceName}。 模擬裝置的名稱。
{HubName}。 IoT 中樞的名稱。
az iot device simulate --device-id {DeviceName} --hub-name {HubName} \ --method-response-code 201 \ --method-response-payload '{"result":"Direct method successful"}'
提示
根據預設,az iot device simulate 命令會在訊息之間傳送 100 個裝置到雲端的訊息,間隔為 3 秒。 模擬會在傳送所有訊息之後結束。 如果您想要讓模擬執行更長的時間,則可以使用
--msg-count
參數來指定更多訊息,或使用--msg-interval
參數來指定訊息之間的較長間隔。 您也可以再次執行命令,以重新啟動模擬裝置。
排程作業以叫用直接方法
在本節中,您在第二個 CLI 工作階段中排程作業,以在於第一個 CLI 工作階段中執行的模擬裝置上叫用直接方法。
確認第一個 CLI 工作階段中的模擬裝置正在執行中。 如果沒有,請再次從建立並模擬裝置執行 az iot device simulate 命令來重新啟動它。
在第二個 CLI 工作階段中,執行 az iot hub job create 命令,以其對應的值取代下列預留位置。 在此範例中,該裝置沒有預先存在的方法。 命令會排程在模擬裝置上呼叫範例方法名稱的作業,為方法的承載提供 Null 值。 該方法會在其回應中提供狀態碼和承載。
{HubName}。 IoT 中樞的名稱。
{JobName}。 排程作業的名稱。 作業名稱是唯一的,因此每次執行此命令時,請選擇不同的作業名稱。
{MethodName}。 直接方法的名稱。 模擬裝置沒有預先存在的方法,因此您可以針對此命令選擇任何您想要的名稱。
{DeviceName}。 模擬裝置的名稱。
az iot hub job create --hub-name {HubName} --job-id {JobName} \ --job-type scheduleDeviceMethod \ --method-name {MethodName} --method-payload 'null' \ --query-condition "deviceId = '{DeviceName}'"
提示
在排程作業 az iot hub job create 命令以叫用直接方法時,您必須同時指定
--method-name
和--method-payload
選擇性參數的值。 針對不接受承載的直接方法,請為--method-payload
參數指定null
。在第一個 CLI 工作階段中,確認輸出會顯示方法引動過程。 在下列螢幕擷取畫面中,我們在上一個步驟的
az iot hub job create
CLI 命令中分別針對{DeviceName}
和{MethodName}
預留位置使用SampleDevice
和SampleMethod
。
排程作業以更新裝置對應項的屬性
在本節中,您會在第二個 CLI 工作階段中排程作業,以在於第一個 CLI 工作階段中執行的模擬裝置上更新所需的裝置對應項屬性。
確認第一個 CLI 工作階段中的模擬裝置正在執行中。 如果沒有,請再次從建立並模擬裝置執行 az iot device simulate 命令來重新啟動它。
在第二個 CLI 工作階段中,執行 az iot hub job create 命令,以其對應的值取代下列預留位置。 在此範例中,我們會排程作業,針對模擬裝置將所需對應項屬性
BuildingNo
的值設定為 45。{HubName}。 IoT 中樞的名稱。
{JobName}。 排程作業的名稱。 作業名稱是唯一的,因此每次執行此命令時,請選擇不同的作業名稱。
{DeviceName}。 模擬裝置的名稱。
az iot hub job create --hub-name {HubName} --job-id {JobName} \ --job-type scheduleUpdateTwin \ --twin-patch '{"properties":{"desired": {"BuildingNo": 45}}}' \ --query-condition "deviceId = '{DeviceName}'"
在第一個 CLI 工作階段中,確認輸出顯示所回報裝置對應項屬性的成功更新,指出也已更新所需的裝置對應項屬性。
下一步
在本文中,您已使用 Azure CLI 來模擬裝置,並排程作業以執行直接方法,並更新該模擬裝置的裝置對應項屬性。
若要繼續探索 IoT 中樞和裝置管理模式,請更新使用 Raspberry Pi 3 B+ 參考映像的 Azure IoT 中樞裝置更新教學課程中的映像。