Share via


(Azure CLI) 排程和廣播作業

使用 Azure IoT 中樞排程和追蹤會更新數百萬部裝置的作業。 使用作業以:

  • 更新所需屬性
  • 更新標籤
  • 叫用直接方法

在概念上,作業會包裝其中一個動作,並追蹤一組裝置的執行進度。 作業互動的一組裝置是由裝置對應項查詢所定義。 例如,後端應用程式可以在 10,000 個裝置上使用作業叫用重新啟動方法,此方法由裝置對應項查詢指定並排定在未來執行。 接著,該應用程式可以追蹤每個這些裝置接收和執行重新啟動方法的進度。

從下列文章深入了解這當中的每一項功能:

注意

本文中所述的功能僅適用於 IoT 中樞的標準層。 如需基本和標準/免費IoT 中樞層的詳細資訊,請參閱為您的解決方案選擇正確的IoT 中樞層

本文說明如何建立兩個 Azure CLI 會話:

  • 建立模擬裝置的會話。 模擬裝置設定為在叫用任何直接方法時傳回狀態碼和 JSON 承載。

  • 建立兩個排程工作的會話。 第一個作業會叫用直接方法,而第二個作業會在另一個會話中建立的模擬裝置上更新所需的裝置對應項屬性。

必要條件

  • Azure CLI。 您也可以使用Azure Cloud Shell、在瀏覽器中或應用程式中執行的互動式 CLI 殼層,例如Windows 終端機,執行本文中的命令。 如果您使用 Cloud Shell,就不需要安裝任何項目。 如果您想要在本機使用 CLI,本文需要 Azure CLI 2.36 版或更新版本。 執行 az --version 以尋找版本。 若要在本機安裝或升級 Azure CLI,請參閱 安裝 Azure CLI

  • Azure 訂用帳戶中的 IoT 中樞。 使用 CLIAzure 入口網站建立一個。

  • 請確定您的防火牆已開啟連接埠 8883。 本文中的裝置範例會使用 MQTT 通訊協定,其會透過連接埠 8883 進行通訊。 某些公司和教育網路環境可能會封鎖此連接埠。 如需此問題的詳細資訊和解決方法,請參閱連線至 IoT 中樞 (MQTT)

準備Cloud Shell

如果您想要使用 Azure Cloud Shell,您必須先啟動並設定它。 如果您在本機使用 CLI,請跳至 準備兩個 CLI 會話一 節。

  1. 從Azure 入口網站的頁首選取Cloud Shell圖示。

    Azure 入口網站頁首的全域控制項螢幕擷取畫面,其中醒目提示Cloud Shell圖示。

    注意

    如果這是您第一次使用 Cloud Shell,它將會提示您建立使用 Cloud Shell 所需的儲存體。 選取用來建立儲存體帳戶和 Microsoft Azure 檔案共用的訂用帳戶。

  2. 使用Cloud Shell工具列中的環境選取器來選取您慣用的 CLI 環境。 本文使用 Bash 環境。 您也可以使用 PowerShell 環境。

    注意

    某些命令在 BashPowerShell 環境中需要不同的語法或格式。 如需詳細資訊,請參閱 成功使用 Azure CLI 的秘訣

    Azure Cloud Shell視窗的螢幕擷取畫面,其中醒目提示工具列中的環境選取器。

準備兩個 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 登入

  1. 在第一個 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

  2. 開啟第二個 CLI 工作階段。 如果您在瀏覽器中使用 Cloud Shell,請選取第一個 CLI 會話工具列上的[開啟新會話] 圖示。 若在本機使用 CLI,請開啟第二個執行個體。

    Azure Cloud Shell視窗的螢幕擷取畫面,其中醒目提示工具列中的 [開啟新會話] 圖示。

建立和模擬裝置

在本節中,您會在第一個 CLI 會話中建立 IoT 中樞的裝置身分識別,然後使用該裝置身分識別模擬裝置。 模擬裝置會回應您在第二個 CLI 會話中排程的作業。

若要建立並啟動模擬裝置:

  1. 在第一個 CLI 會話中,執行 az iot hub device-identity create 命令,並將下列預留位置取代為其對應的值。 此命令會建立模擬裝置的裝置身分識別。

    {DeviceName}。 模擬裝置的名稱。

    {HubName}。 您 IoT 中樞的名稱。

    az iot hub device-identity create --device-id {DeviceName} --hub-name {HubName} 
    
  2. 在第一個 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 會話中執行的模擬裝置上叫用直接方法。

  1. 確認第一個 CLI 會話中的模擬裝置正在執行。 如果沒有,請再次從建立和模擬裝置執行az iot device simulate命令來重新開機它。

  2. 在第二個 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-payload 選擇性參數的值 --method-name 。 對於不接受承載的直接方法,請為 --method-payload 參數指定 null

  3. 在第一個 CLI 會話中,確認輸出顯示方法調用。 在下列螢幕擷取畫面中,我們在上一個步驟的 CLI 命令中分別針對 {DeviceName} 和 預留位置使用 SampleDeviceSampleMethod{MethodName}az iot hub job create

    顯示叫用方法後輸出的模擬裝置螢幕擷取畫面。

排程工作以更新裝置對應項的屬性

在本節中,您會在第二個 CLI 會話中排程作業,以在第一個 CLI 會話中執行的模擬裝置上更新所需的裝置對應項屬性。

  1. 確認第一個 CLI 會話中的模擬裝置正在執行。 如果沒有,請再次從建立和模擬裝置執行az iot device simulate命令來重新開機它。

  2. 在第二個 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}'"
    
  3. 在第一個 CLI 會話中,確認輸出會顯示回報裝置對應項屬性的成功更新,指出所需的裝置對應項屬性也已更新。

    模擬裝置的螢幕擷取畫面,其中顯示更新裝置對應項屬性之後的輸出。

下一步

在本文中,您已使用 Azure CLI 來模擬裝置,並排程作業來執行直接方法,並更新該模擬裝置的裝置對應項屬性。

若要繼續探索 IoT 中樞和裝置管理模式,請使用 Raspberry Pi 3 B+ 參考影像來更新裝置更新中適用于Azure IoT 中樞教學課程中的映射