從事物中擷取資料 AWS IoT - AWS IoT SiteWise

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

從事物中擷取資料 AWS IoT

透過本教學課程,了解如何使用裝置陰影 AWS IoT SiteWise 從一群 AWS IoT 物件中擷取資料。裝置陰影是JSON儲存裝置目前狀態資訊的物 AWS IoT 件。如需詳細資訊,請參閱AWS IoT 開發人員指南中的裝置陰影服務

完成此自學課程後,您可以 AWS IoT SiteWise 根據 AWS IoT 物件設定中的作業。通過使用 AWS IoT 事物,您可以將操作與 AWS IoT. 例如,您可以設定 AWS IoT 功能來執行下列工作:

  • 設定其他規則以將資料串流到AWS IoT EventsAmazon DynamoDB 等。 AWS 服務如需詳細資訊,請參閱AWS IoT 開發人員指南中的規則

  • 使用 AWS IoT 車隊索引服務為您的裝置資料建立索引、搜尋和彙總。如需詳細資訊,請參閱AWS IoT 開發人員指南中的叢集索引服務

  • 使用 AWS IoT Device Defender. 如需詳細資訊,請參閱《AWS IoT 開發人員指南》中的 AWS IoT Device Defender

在本教學課程中,您將學習如何從 AWS IoT 物件的裝置陰影擷取資料至中的資產。 AWS IoT SiteWise若要這麼做,您可以建立一或多個 AWS IoT 項目,並執行指令碼,以及使用記憶體使用量資料來更新每個物件的裝置陰影。CPU您可以在本自學課程中使用CPU和記憶體使用量資料來模擬擬真實感測器資料。然後,您可以建立一個包含 AWS IoT SiteWise 動作的規則,該動作會在 AWS IoT SiteWise 每次物件的裝置陰影更新時將此資料傳送至資產。如需詳細資訊,請參閱使用規則擷取資料 AWS IoT Core

必要條件

為了完成本教學,您需要以下項目:

  • 一個 AWS 帳戶. 如果您沒有帳戶,請參閱 設置一個 AWS 帳戶

  • 執行Windows、macOSLinux、或Unix存取 AWS Management Console. 如需詳細資訊,請參閱 AWS Management Console入門

  • 具有管理員權限的 AWS Identity and Access Management (IAM) 使用者。

  • Python3 安裝在您的開發計算機上或安裝在要註冊為 AWS IoT 東西的設備上。

步驟 1:建立 AWS IoT 策略

在此程序中,請建立一個 AWS IoT 原則,讓您的 AWS IoT 物件存取本教學課程中使用的資源。

若要建立 AWS IoT 策略
  1. 登入 AWS Management Console

  2. 複查支援 AWS IoT SiteWise 的AWS 區域。視需要切換到其中一個支援的區域。

  3. 導覽至 AWS IoT 主控台。如果出現「Connect 裝置」按鈕,請選擇該按鈕。

  4. 在左側導覽窗格中,選擇 [安全性],然後選擇 [原則]。

  5. 選擇 Create (建立)。

  6. 輸入 AWS IoT 策略的名稱 (例如,SiteWiseTutorialDevicePolicy)。

  7. 在 [原則文件] 下,選擇JSON以JSON表單輸入下列原則。Replace (取代) region 以及 account-id 使用您的地區和帳戶 ID,例如us-east-1123456789012

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:region:account-id:client/SiteWiseTutorialDevice*" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get" ] }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/accepted", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete/accepted", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get/accepted", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/rejected", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete/rejected" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/accepted", "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete/accepted", "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get/accepted", "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/rejected", "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete/rejected" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": "arn:aws:iot:region:account-id:thing/SiteWiseTutorialDevice*" } ] }

    此原則可讓您的 AWS IoT 裝置建立連線,並使用訊息與裝置陰影進行通MQTT訊。如需有關訊MQTT息的詳細資訊,請參閱什麼是MQTT? 。若要與裝置陰影互動,您的 AWS IoT 項目會針對開頭的主題發佈和接收MQTT訊息$aws/things/thing-name/shadow/。此原則包含稱為的物件原則變數${iot:Connection.Thing.ThingName}。此變數會在每個主題中取代連線物件的名稱。iot:Connect陳述式會設定裝置可建立連線的限制,確保物件原則變數只能取代以開頭的名稱SiteWiseTutorialDevice

    如需詳細資訊,請參閱AWS IoT 開發人員指南中的物件原則變數

    注意

    此政策適用於名稱開頭為 SiteWiseTutorialDevice 的實物。若要使用不同的實物名稱,您必須據此更新政策。

  8. 選擇 Create (建立)。

步驟 2:建立和設定物 AWS IoT 件

在此程序中,您會建立並配置物 AWS IoT 件。您可以將開發電腦指定為 AWS IoT 物件。隨著您的進步,請記住,您在此學習的原則可以應用於實際的項目。您可以靈活地在任何能夠運行 AWS IoT SDK,包括和免費的設備上製作 AWS IoT Greengrass 和設置內容 AWS IoT RTOS。如需詳細資訊,請參閱AWS IoT SDKsAWS IoT 發人員指南中的。

若要建立與配置物 AWS IoT 件
  1. 開啟命令列並執行下列命令,為本教學課程建立目錄。

    mkdir iot-sitewise-rule-tutorial cd iot-sitewise-rule-tutorial
  2. 執行下列命令,為實物的憑證建立目錄。

    mkdir device1

    如果您正在建立其他實物,請據此在目錄名稱中使用遞增的編號,以追蹤哪些憑證屬於哪些實物。

  3. 導覽至 AWS IoT 主控台

  4. 在左側導覽窗格中,選擇「管理」區段中的「所有裝置」。然後選擇 Things (實物)

  5. 如果出現 You don't have any things yet (您尚未有任何實物) 對話方塊,請選擇 Create a thing (建立實物)。否則,請選擇 [建立物件]。

  6. 在 [建立物件] 頁面上,選擇 [建立單一物件],然後選擇 [下一步]。

  7. 在 [指定物件內容] 頁面上,輸入物 AWS IoT 件的名稱 (例如,SiteWiseTutorialDevice1),然後選擇 [下一步]。如果您正在建立其他實物,請據此在實物名稱中使用遞增的編號。

    重要

    物件名稱必須與您在步驟 1:建立原則中建立的原 AWS IoT 則中使用的名稱相符。否則,您的裝置將無法連線到 AWS IoT。

  8. 在 [設定裝置憑證-選用] 頁面上,選擇 [自動產生新憑證 (建議使用)],然後選擇 [步]。憑證 AWS IoT 可讓您安全地識別您的裝置。

  9. 在 [將原則附加至憑證-用] 頁面上,選取您在步驟 1:建立原則中建立的 AWS IoT 原則,然後選擇 [建立物件]。

  10. 在 [下載憑證和金鑰] 對話方塊中,執行下列動作:

    1. 選擇 Download (下載) 連結,以下載實物的憑證、公有金鑰和私有金鑰。將這三個檔案全部儲存到您為實物憑證建立的目錄 (例如 iot-sitewise-rule-tutorial/device1)。

      重要

      只有此時能夠下載實物的憑證和金鑰,裝置需要這些資訊才能成功連線到 AWS IoT。

    2. 選擇 [下] 連結以下載根 CA 憑證。將根憑證授權機構憑證儲存至 iot-sitewise-rule-tutorial。建議您下載 Amazon 根憑證授權機構 1。

  11. 選擇完成

現在,您已經在計算機上註冊了一個 AWS IoT 東西。執行下列其中一個步驟:

  • 繼續執行步驟 3:建立裝置資產模型,而不建立其他 AWS IoT 項目。您可以只使用一個實物完成本教學課程。

  • 在另一部電腦或裝置上重複本節的步驟,以建立更多 AWS IoT 實物。在本教學課程中,我們建議您遵循此選項,以便從多個裝置擷取唯一CPU和記憶體使用量資料。

  • 在同一部裝置 (您的電腦) 上重複本節的步驟,以建立更多 AWS IoT 實物。每個項目 AWS IoT 都會從您的電腦接收類似CPU的記憶體使用量資料,因此請使用此方法來示範從多個裝置擷取非唯一資料。

步驟 3:建立裝置資產模型

在此程序中,您可 AWS IoT SiteWise 以在中建立資產模型,以代表串流CPU和記憶體使用量資料的裝置。為了處理代表裝置群組的資產中的資料,資產模型會在多個相同類型的資產中強制執行一致的資訊。如需詳細資訊,請參閱模型工業資產

建立代表裝置的資產模型
  1. 導覽至 AWS IoT SiteWise 主控台

  2. 在左側導覽窗格中選擇 Models (模型)

  3. 選擇建立模型

  4. 模型詳細資訊下,輸入模型的名稱。例如:SiteWise Tutorial Device Model

  5. Measurement definitions (衡量值定義) 底下,執行下列操作:

    1. 名稱中,輸入 CPU Usage

    2. Unit (單位) 中輸入 %

    3. Data type (資料類型) 保留為 Double (雙倍)

    衡量值屬性代表裝置的原始資料串流。如需詳細資訊,請參閱定義來自設備的資料流(測量)

  6. 選擇「新增度量」以新增第二個度量屬性。

  7. Measurement definitions (衡量值定義) 底下的第二列中,執行下列操作:

    1. 名稱中,輸入 Memory Usage

    2. Unit (單位) 中輸入 %

    3. Data type (資料類型) 保留為 Double (雙倍)

  8. Metric definitions (指標定義) 底下,執行下列操作:

    1. 名稱中,輸入 Average CPU Usage

    2. Formula (公式) 中輸入 avg(CPU Usage)。自動完成清單中出現 CPU Usage 時,請選擇此選項。

    3. Time interval (時間間隔) 中輸入 5 minutes

    指標屬性會定義彙總計算,處理某個間隔的所有輸入資料點,並在每個間隔輸出單一資料點。此度量屬性每 5 分鐘計算每個裝置的平均CPU使用量。如需詳細資訊,請參閱彙總屬性和其他資產 (量度) 的資料

  9. 選擇「新增測量結果」以新增第二個測量結果特性。

  10. Metric definitions (指標定義) 底下的第二列中,執行下列操作:

    1. 名稱中,輸入 Average Memory Usage

    2. Formula (公式) 中輸入 avg(Memory Usage)。自動完成清單中出現 Memory Usage 時,請選擇此選項。

    3. Time interval (時間間隔) 中輸入 5 minutes

    此指標屬性會每隔 5 分鐘計算一次每部裝置的平均記憶體用量。

  11. (選用) 新增您想對每部裝置計算的其他指標。有一些有趣的函數,包括 minmax。如需詳細資訊,請參閱使用公式運算式。在步驟 4:建立裝置叢集資產模型中,您可以建立父資產,該資產可使用整個裝置叢集中的資料來計算指標。

  12. 選擇建立模型

步驟 4:建立裝置叢集資產模型

在此程序中,您可 AWS IoT SiteWise 以在中製作資產模型,以象徵您的裝置集合。在此資產模型中,您可以建立一個結構,讓您將多個裝置資產連結至一個總體叢集資產。接著,您會在叢集資產模型中概述指標,以合併所有連線裝置資產的資料。這種方法為您提供了整個車隊集體績效的全面見解。

建立代表裝置機群的資產模型
  1. 導覽至 AWS IoT SiteWise 主控台

  2. 在左側導覽窗格中選擇 Models (模型)

  3. 選擇建立模型

  4. 模型詳細資訊下,輸入模型的名稱。例如:SiteWise Tutorial Device Fleet Model

  5. Hierarchy definitions (階層定義) 底下,執行下列操作:

    1. Hierarchy name (階層名稱) 中輸入 Device

    2. Hierarchy model (階層模型) 中,選擇裝置資產模型 (SiteWise Tutorial Device Model)。

    階層會定義父系 (機群) 資產模型與子系 (裝置) 資產模型之間的關係。父系資產可存取子系資產的屬性資料。當您稍後建立資產時,您必須根據父系資產模型中的階層定義,建立子系資產與父系資產的關聯。如需詳細資訊,請參閱定義資產模型階層

  6. Metric definitions (指標定義) 底下,執行下列操作:

    1. 名稱中,輸入 Average CPU Usage

    2. Formula (公式) 中輸入 avg(Device | Average CPU Usage)。自動完成清單出現時,請選擇 Device 以選擇階層,然後選擇 Average CPU Usage 以從您先前建立的裝置資產中選擇指標。

    3. Time interval (時間間隔) 中輸入 5 minutes

    此度量屬性會計算Device階層中與叢集資產相關聯之所有裝置資產的平均CPU使用量。

  7. 選擇「新增測量結果」以新增第二個測量結果特性。

  8. Metric definitions (指標定義) 底下的第二列中,執行下列操作:

    1. 名稱中,輸入 Average Memory Usage

    2. Formula (公式) 中輸入 avg(Device | Average Memory Usage)。自動完成清單出現時,請選擇 Device 以選擇階層,然後選擇 Average Memory Usage 以從您先前建立的裝置資產中選擇指標。

    3. Time interval (時間間隔) 中輸入 5 minutes

    此指標屬性會透過 Device 階層,計算與機群資產相關聯之所有裝置資產的平均記憶體用量。

  9. (選用) 新增您想在裝置機群中計算的其他指標。

  10. 選擇建立模型

步驟 5:建立和設定裝置資產

在此程序中,您會根據您的裝置資產模型產生裝置資產。接著,您會定義每個衡量值屬性的屬性別名。屬性別名是識別資產屬性的唯一字串。稍後,您可以使用別名來識別資料上傳屬性,而不是資產 ID 和屬性 ID。如需詳細資訊,請參閱將工業資料流對映至資產屬性

建立裝置資產和定義屬性別名
  1. 導覽至 AWS IoT SiteWise 主控台

  2. 在左側導覽窗格中,選擇 Assets (資產)

  3. 選擇 Create asset (建立資產)

  4. 在「型號資訊」下,選擇您的裝置資產模型SiteWise Tutorial Device Model

  5. 在「資產資訊」下,輸入資產的名稱。例如:SiteWise Tutorial Device 1

  6. 選擇 Create asset (建立資產)

  7. 針對新裝置資產,選擇 Edit (編輯)

  8. CPU Usage 底下,輸入 /tutorial/device/SiteWiseTutorialDevice1/cpu 做為屬性別名。您可以在內容別名中包含物 AWS IoT 件名稱,以便您可以使用單一 AWS IoT 規則從所有裝置中擷取資料。

  9. Memory Usage 底下,輸入 /tutorial/device/SiteWiseTutorialDevice1/memory 做為屬性別名。

  10. 選擇 Save (儲存)。

如果您之前建立了多個 AWS IoT 物件,請為每個設備重複步驟 3 到步驟 10,並相應地增加資產名稱和性質別名中的數字。例如,第二個裝置資產的名稱應為 SiteWise Tutorial Device 2,而其屬性別名應為 /tutorial/device/SiteWiseTutorialDevice2/cpu/tutorial/device/SiteWiseTutorialDevice2/memory

步驟 6:建立和設定裝置叢集資產

在此程序中,您會形成從裝置叢集資產模型衍生的裝置叢集資產。然後,您可以將個別裝置資產連結至叢集資產。此關聯可讓叢集資產的指標內容編譯和分析來自多個裝置的資料。此資料為您提供整個車隊集體績效的整合檢視。

建立裝置機群資產並與裝置資產建立關聯
  1. 導覽至 AWS IoT SiteWise 主控台

  2. 在左側導覽窗格中,選擇 Assets (資產)

  3. 選擇 Create asset (建立資產)

  4. 在「模型資訊」下,選擇您的裝置叢集資產模型SiteWise Tutorial Device Fleet Model

  5. 在「資產資訊」下,輸入資產的名稱。例如:SiteWise Tutorial Device Fleet 1

  6. 選擇 Create asset (建立資產)

  7. 針對新裝置機群資產,選擇 Edit (編輯)

  8. 在與此資產相關聯的資產下,選擇「新增相關資產」,然後執行下列動作:

    1. Hierarchy (階層) 底下,選擇 Device。此階層會識別裝置和裝置機群資產之間的階層關係。您先前已按照本教學課程在裝置機群資產模型中定義此階層。

    2. Asset (資產) 底下,選擇裝置資產 SiteWise Tutorial Device 1

  9. (選擇性) 如果您之前建立了多個裝置資產,請針對您建立的每個裝置資產重複步驟 8 到 10。

  10. 選擇 Save (儲存)。

    您現在應該會看到裝置資產整理為階層的形式。

步驟 7:在 AWS IoT Core 中建立規則,將資料傳送至裝置資產

在此程序中,您可以在中建立規則 AWS IoT Core。該規則旨在解釋來自設備陰影的通知消息,並在中將數據傳輸到設備資產 AWS IoT SiteWise。每次設備的陰影更新時都 AWS IoT 會發送MQTT消息。您可以建立規則,在裝置陰影根據MQTT訊息變更時採取處理行動。在這種情況下,目的是處理更新消息,提取屬性值,並將其傳輸到中的設備資產 AWS IoT SiteWise。

使用 AWS IoT SiteWise 動作建立規則
  1. 導覽至 AWS IoT 主控台

  2. 在左側導覽窗格中,選擇 [郵件路由],然後選擇 [規則]。

  3. 選擇建立規則

  4. 輸入規則的名稱和說明,然後選擇「下一步」。

  5. 輸入下列SQL陳述式,然後選擇「下步」。

    SELECT * FROM '$aws/things/+/shadow/update/accepted' WHERE startsWith(topic(3), "SiteWiseTutorialDevice")

    此規則查詢陳述式能夠運作的原因在於,裝置陰影服務會將陰影更新發佈到 $aws/things/thingName/shadow/update/accepted。如需有關裝置陰影的詳細資訊,請參閱AWS IoT 開發人員指南中的裝置陰影服務

    WHERE 子句中,此規則查詢陳述式使用 topic(3) 函數,從本主題的第三個區段中取得實物名稱。接著,陳述式會篩選掉那些具有不符合教學課程裝置之名稱的裝置。如需詳細資訊 AWS IoT SQL,請AWS IoT SQL參閱AWS IoT 開發人員指南中的參考資料。

  6. 在「規則動作」 下,選擇「傳送訊息資料至資產屬性」, AWS IoT SiteWise然後執行下列動作:

    1. 選擇 By property alias (依據屬性別名)

    2. Property alias (屬性別名) 中輸入 /tutorial/device/${topic(3)}/cpu

      ${...}語法是一個替代模板。 AWS IoT 評估大括號內的內容。此替代範本會從主題中提取實物名稱,建立每個實物的唯一別名。如需詳細資訊,請參閱AWS IoT 開發人員指南中的替代範本

      注意

      因為替代範本中的運算式與 SELECT 陳述式是分開計算的,所以您不能使用替代範本來參考使用 AS 子句所建立的別名。除了支援的函數與運算子以外,您可以僅參照原始承載中出現的資訊。

    3. 項目 ID-選擇性中,輸入${concat(topic(3), "-cpu-", floor(state.reported.timestamp))}

      項目可IDs唯一識別每個值輸入嘗試。如果項目傳回錯誤,您可以在錯誤輸出內容中尋找項目 ID,以針對問題進行故障診斷。此項目 ID 中的替代範本會結合實物名稱與裝置回報的時間戳記。例如,產生的項目 ID 看起來可能與 SiteWiseTutorialDevice1-cpu-1579808494 類似。

    4. Time in seconds (以秒為單位的時間) 中輸入 ${floor(state.reported.timestamp)}

      此替代範本會從裝置回報的時間戳記中計算時間 (以秒為單位)。在本教學課程中,裝置會回報 Unix Epoch 時間格式的時間戳記 (以秒為單位),做為浮點數。

    5. 在以奈米為單位的偏移-可選中,輸入${floor((state.reported.timestamp % 1) * 1E9)}

      此替代範本會轉換裝置回報的時間戳記的小數部分,藉此從時間中計算奈米秒位移 (以秒為單位)。

      注意

      AWS IoT SiteWise 要求您的數據在 Unix 紀元時間內具有當前時間戳。如果您的設備無法準確報告時間,則可以使用 timestamp()從 AWS IoT 規則引擎獲取當前時間。此函數會回報以毫秒為單位的時間,因此您必須將規則動作的時間參數更新為以下的值:

      • Time in seconds (以秒為單位的時間) 中輸入 ${floor(timestamp() / 1E3)}

      • Offset in nanos (以奈米為單位的位移) 中輸入 ${(timestamp() % 1E3) * 1E6}

    6. Data type (資料類型) 中選擇 Double (雙倍)

      此資料類型必須符合您在資產模型中定義之資產屬性的資料類型。

    7. Value (值) 中輸入 ${state.reported.cpu}。在替代範本中,您可以使用.運算子從JSON結構內擷取值。

    8. 選擇 Add entry (新增項目) 以新增記憶體用量屬性的新項目,然後再次針對該屬性完成下列步驟:

      1. 選擇 By property alias (依據屬性別名)

      2. Property alias (屬性別名) 中輸入 /tutorial/device/${topic(3)}/memory

      3. 項目 ID-選擇性中,輸入${concat(topic(3), "-memory-", floor(state.reported.timestamp))}

      4. Time in seconds (以秒為單位的時間) 中輸入 ${floor(state.reported.timestamp)}

      5. 在以奈米為單位的偏移-可選中,輸入${floor((state.reported.timestamp % 1) * 1E9)}

      6. Data type (資料類型) 中選擇 Double (雙倍)

      7. Value (值) 中輸入 ${state.reported.memory}

    9. 在 [IAM角色] 下,選擇 [建立新角色] 以建立此規則動作的IAM角色。此角色可讓您將資料推送 AWS IoT 至裝置叢集資產及其資產階層中的屬性。

    10. 輸入角色名稱,然後選擇建立

  7. (選用) 設定可用來針對規則進行故障診斷的錯誤動作。如需詳細資訊,請參閱疑難排解規則 (AWS IoT SiteWise)

  8. 選擇 Next (下一步)

  9. 檢閱設定,然後選擇 [建立] 以建立規則。

步驟 8:執行裝置用戶端指令碼

在本教學課程中,您沒有使用實際的裝置來報告資料。相反,您可以運行腳本來更新 AWS IoT 事物的設備陰影CPU和內存使用情況以模仿真實的傳感器數據。若要執行指令碼,您必須先安裝必要的Python套件。在此程序中,您會安裝必要的Python套件,然後執行裝置用戶端指令碼。

設定和執行裝置用戶端指令碼
  1. 導覽至 AWS IoT 主控台

  2. 在左側導覽窗格的底部,選擇 Settings (設定)

  3. 儲存自訂端點,以與裝置用戶端指令碼搭配使用。您會使用此端點與實物的陰影進行互動。此端點在您目前區域的帳戶中是唯一的。

    您的自訂端點看起來應該會與以下範例類似。

    identifier.iot.region.amazonaws.com
  4. 開啟命令列並執行下列命令,以導覽到您先前建立的教學課程目錄。

    cd iot-sitewise-rule-tutorial
  5. 執行下列命令以安裝 適用於 Python 的 AWS IoT Device SDK。

    pip3 install AWSIoTPythonSDK

    如需詳細資訊,請參閱AWS IoT 開發人員指南適用於 Python 的 AWS IoT Device SDK中的

  6. 執行下列命令來安裝 psutil,這是跨平台程序和系統公用程式程式庫。

    pip3 install psutil

    如需詳細資訊,請參閱 Python Pack age 索引中的 psutil

  7. iot-sitewise-rule-tutorial 目錄中建立名為 thing_performance.py 的檔案,然後將下列 Python 程式碼複製到檔案中。

    import AWSIoTPythonSDK.MQTTLib as AWSIoTPyMQTT import json import psutil import argparse import logging import time # Configures the argument parser for this program. def configureParser(): parser = argparse.ArgumentParser() parser.add_argument( "-e", "--endpoint", action="store", required=True, dest="host", help="Your AWS IoT custom endpoint", ) parser.add_argument( "-r", "--rootCA", action="store", required=True, dest="rootCAPath", help="Root CA file path", ) parser.add_argument( "-c", "--cert", action="store", required=True, dest="certificatePath", help="Certificate file path", ) parser.add_argument( "-k", "--key", action="store", required=True, dest="privateKeyPath", help="Private key file path", ) parser.add_argument( "-p", "--port", action="store", dest="port", type=int, default=8883, help="Port number override", ) parser.add_argument( "-n", "--thingName", action="store", required=True, dest="thingName", help="Targeted thing name", ) parser.add_argument( "-d", "--requestDelay", action="store", dest="requestDelay", type=float, default=1, help="Time between requests (in seconds)", ) parser.add_argument( "-v", "--enableLogging", action="store_true", dest="enableLogging", help="Enable logging for the AWS IoT Device SDK for Python", ) return parser # An MQTT shadow client that uploads device performance data to AWS IoT at a regular interval. class PerformanceShadowClient: def __init__( self, thingName, host, port, rootCAPath, privateKeyPath, certificatePath, requestDelay, ): self.thingName = thingName self.host = host self.port = port self.rootCAPath = rootCAPath self.privateKeyPath = privateKeyPath self.certificatePath = certificatePath self.requestDelay = requestDelay # Updates this thing's shadow with system performance data at a regular interval. def run(self): print("Connecting MQTT client for {}...".format(self.thingName)) mqttClient = self.configureMQTTClient() mqttClient.connect() print("MQTT client for {} connected".format(self.thingName)) deviceShadowHandler = mqttClient.createShadowHandlerWithName( self.thingName, True ) print("Running performance shadow client for {}...\n".format(self.thingName)) while True: performance = self.readPerformance() print("[{}]".format(self.thingName)) print("CPU:\t{}%".format(performance["cpu"])) print("Memory:\t{}%\n".format(performance["memory"])) payload = {"state": {"reported": performance}} deviceShadowHandler.shadowUpdate( json.dumps(payload), self.shadowUpdateCallback, 5 ) time.sleep(args.requestDelay) # Configures the MQTT shadow client for this thing. def configureMQTTClient(self): mqttClient = AWSIoTPyMQTT.AWSIoTMQTTShadowClient(self.thingName) mqttClient.configureEndpoint(self.host, self.port) mqttClient.configureCredentials( self.rootCAPath, self.privateKeyPath, self.certificatePath ) mqttClient.configureAutoReconnectBackoffTime(1, 32, 20) mqttClient.configureConnectDisconnectTimeout(10) mqttClient.configureMQTTOperationTimeout(5) return mqttClient # Returns the local device's CPU usage, memory usage, and timestamp. def readPerformance(self): cpu = psutil.cpu_percent() memory = psutil.virtual_memory().percent timestamp = time.time() return {"cpu": cpu, "memory": memory, "timestamp": timestamp} # Prints the result of a shadow update call. def shadowUpdateCallback(self, payload, responseStatus, token): print("[{}]".format(self.thingName)) print("Update request {} {}\n".format(token, responseStatus)) # Configures debug logging for the AWS IoT Device SDK for Python. def configureLogging(): logger = logging.getLogger("AWSIoTPythonSDK.core") logger.setLevel(logging.DEBUG) streamHandler = logging.StreamHandler() formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) streamHandler.setFormatter(formatter) logger.addHandler(streamHandler) # Runs the performance shadow client with user arguments. if __name__ == "__main__": parser = configureParser() args = parser.parse_args() if args.enableLogging: configureLogging() thingClient = PerformanceShadowClient( args.thingName, args.host, args.port, args.rootCAPath, args.privateKeyPath, args.certificatePath, args.requestDelay, ) thingClient.run()
  8. 從命令列搭配下列參數執行 thing_performance.py

    • -n--thingName— 您的物品名稱,例如SiteWiseTutorialDevice1

    • -e--endpoint— 您先前在此程序中儲存的自訂 AWS IoT 端點。

    • -r--rootCA — AWS IoT 根 CA 憑證的路徑。

    • -c--cert— AWS IoT 物件憑證的路徑。

    • -k--key — AWS IoT 物件憑證私密金鑰的路徑。

    • -d, --requestDelay — (選用) 每個裝置陰影更新之間等待的時間 (以秒為單位)。預設為 1 秒。

    • -v, --enableLogging — (選擇性) 如果存在此參數,指令碼會列印 適用於 Python 的 AWS IoT Device SDK.

    命令看起來應該會與以下範例類似。

    python3 thing_performance.py \ --thingName SiteWiseTutorialDevice1 \ --endpoint identifier.iot.region.amazonaws.com \ --rootCA AmazonRootCA1.pem \ --cert device1/thing-id-certificate.pem.crt \ --key device1/thing-id-private.pem.key

    如果您正在執行指令碼以執行其他 AWS IoT 項目,請相應地更新物件名稱和憑證目錄。

  9. 嘗試打開和關閉設備上的程序,以查看CPU和內存使用情況如何更改。該腳本打印每個CPU和內存使用情況讀數。如果指令碼成功將資料上傳到裝置陰影服務,指令碼的輸出看起來應該會與以下範例類似。

    [SiteWiseTutorialDevice1] CPU: 24.6% Memory: 85.2% [SiteWiseTutorialDevice1] Update request e6686e44-fca0-44db-aa48-3ca81726f3e3 accepted
  10. 請按照下列步驟,確認指令碼是否正在更新裝置陰影:

    1. 導覽至 AWS IoT 主控台

    2. 在左側導覽窗格中,選擇 [所有裝置],然後選擇 [物件]。

    3. 選擇你的東西,SiteWiseTutorialDevice.

    4. 選擇「裝置陰影」索引標籤,選擇「經典陰影」,然後確認陰影狀態如下列範例所示。

      { "reported": { "cpu": 24.6, "memory": 85.2, "timestamp": 1579567542.2835066 } }

      如果您的物件的陰影狀態為空或看起來不像前面的範例,請檢查指令碼是否正在執行且已成功連線到 AWS IoT。如果指令碼在連線到時持續逾時 AWS IoT,請檢查您的物件原則是否已根據本教學課程設定。

  11. 遵循下列步驟,確認規則動作是否正在將資料傳送到 AWS IoT SiteWise:

    1. 導覽至 AWS IoT SiteWise 主控台

    2. 在左側導覽窗格中,選擇 Assets (資產)

    3. 選擇裝置機群資產 (SiteWise Tutorial Device Fleet 1 1) 旁的箭號以展開其資產階層,然後選擇裝置資產 (SiteWise Tutorial Device 1)。

    4. 選擇 Measurements (衡量值)

    5. 確認 Latest value (最新值) 儲存格有 CPU UsageMemory Usage 屬性的值。

      突出顯示「測量」的屏幕截圖。
    6. 如果 CPU UsageMemory Usage 屬性沒有最新的值,請重新整理頁面。如果值在幾分鐘後未出現,請參閱疑難排解規則 (AWS IoT SiteWise)

您已完成本教學課程。若要探索資料的即時視覺效果,您可以在 AWS IoT SiteWise Monitor中設定入口網站。如需詳細資訊,請參閱監控資料 AWS IoT SiteWise Monitor。否則,您可以在命令提示字元中按下 CTRL+C 來停止裝置用戶端指令碼。Python 程式不太可能傳送足夠的訊息因而衍生費用,但最佳實務是在完成時停止程式。

步驟 9:完成教學課程後清理資源

完成有關從 AWS IoT 事物中擷取資料的教學課程後,請清理資源以避免產生額外費用。

若要刪除階層式資產 AWS IoT SiteWise
  1. 導覽至主AWS IoT SiteWise 控台

  2. 在左側導覽窗格中,選擇 Assets (資產)

  3. 在中刪除資產時 AWS IoT SiteWise,必須先取消資產的關聯。

    完成下列步驟,以取消裝置資產與裝置機群資產的關聯:

    1. 選擇您的裝置叢集資產 (SiteWise Tutorial Device Fleet 1)。

    2. 選擇編輯

    3. Assets associated to this asset (與此資產相關聯的資產) 底下,針對與此裝置機群資產相關聯的每個裝置資產選擇 Disassociate (取消關聯)

    4. 選擇 Save (儲存)。

      您現在應該會看到裝置資產不再整理為階層的形式。

  4. 選擇裝置資產 (SiteWise Tutorial Device 1)。

  5. 選擇 刪除

  6. 在確認對話方塊中輸入 Delete,然後選擇 Delete (刪除)

  7. 針對每個裝置資產和裝置叢集資產 (SiteWise Tutorial Device Fleet 1) 重複步驟 4 到 6。

若要在中刪除階層式資產模型 AWS IoT SiteWise
  1. 導覽至 AWS IoT SiteWise 主控台

  2. 如果您尚未刪除裝置和裝置機群資產,請執行此操作。如需詳細資訊,請參閱上一個程序。如果您有已從該模型建立的資產,則無法刪除模型。

  3. 在左側導覽窗格中選擇 Models (模型)

  4. 選擇裝置機群資產模型 (SiteWise Tutorial Device Fleet Model 1)。

    刪除階層式資產模型時,請先刪除父資產模型。

  5. 選擇 刪除

  6. 在確認對話方塊中輸入 Delete,然後選擇 Delete (刪除)

  7. 針對裝置資產模型 (SiteWise Tutorial Device Model) 重複步驟 4 到 6。

若要停用或刪除中的規則 AWS IoT Core
  1. 導覽至 AWS IoT 主控台

  2. 在左側導覽窗格中,選擇 [郵件路由],然後選擇 [規則]。

  3. 選取規則,然後選擇 [刪除]。

  4. 在確認對話方塊中,輸入規則的名稱,然後選擇 [刪除]。