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

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

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

您可以使用裝置陰影,將資料擷取到一系列 AWS IoT 物件 AWS IoT SiteWise 中。裝置陰影是儲存裝置目前狀態資訊的 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若要這麼做,您可以建立一或多個項目,然後執行指令碼,以 CPU 和記憶體使用量資料更新每個 AWS IoT 物件的裝置陰影。您會使用本教學課程中的 CPU 和記憶體用量資料來模擬實際感應器資料。然後,您可以建立一個包含 AWS IoT SiteWise 動作的規則,該動作會在 AWS IoT SiteWise 每次物件的裝置陰影更新時將此資料傳送至資產。如需詳細資訊,請參閱 使用規則擷取資料 AWS IoT Core

必要條件

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

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

  • 執行視窗、macOS、Linux 或 Unix 的開發電腦來存取 AWS Management Console. 如需詳細資訊,請參閱 AWS Management Console 入門

  • 擁有管理員許可的 IAM 使用者。

  • Python 3 安裝在您的開發計算機上或安裝在要註冊為 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. 選擇建立

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

  7. 在 [原則文件] 下,選擇 [JSON] 以 JSON 格式輸入下列原則。將 regionaccount-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. 選擇建立

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

在此程序中,您會建立並配置物 AWS IoT 件。您可以將您的開發電腦註冊為 AWS IoT 完成本教學課程的項目。當您將本教學課程的概念套用至真實世界的應用程式時,您可以在任何可執行 AWS IoT SDK 的裝置上建立和設 AWS IoT 定項目,包括 AWS IoT Greengrass 和 FreeRTOS。如需詳細資訊,請參閱AWS IoT 開發人員指南中的 AWS IoT SDK

若要建立與配置物 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. Name (名稱) 中,輸入 CPU Usage

    2. Unit (單位) 中輸入 %

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

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

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

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

    1. Name (名稱) 中,輸入 Memory Usage

    2. Unit (單位) 中輸入 %

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

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

    1. Name (名稱) 中,輸入 Average CPU Usage

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

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

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

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

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

    1. Name (名稱) 中,輸入 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. Name (名稱) 中,輸入 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. Name (名稱) 中,輸入 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. 選擇儲存

如果您之前建立了多個 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. 選擇儲存

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

步驟 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. 選擇 Create rule (建立規則)

  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 開發人員指南中的 AWS IoT SQL 參考

  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))}

      項目 ID 會唯一識別每個值項目的嘗試動作。如果項目傳回錯誤,您可以在錯誤輸出內容中尋找項目 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. (選用) 設定可用來針對規則進行故障診斷的錯誤動作。如需詳細資訊,請參閱 規則疑難排解

  8. 選擇下一步

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

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

由於您未使用實際裝置來回報資料,因此您需要執行指令碼來更新具有 CPU 和記憶體用量的 AWS IoT 實物裝置陰影,以模擬真實的感應器資料。若要執行指令碼,您必須先安裝必要的 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 屬性的值。

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

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

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

完成本教學課程之後,請清除資源,以避免產生額外的費用。

若要刪除階層式資產 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. 選擇儲存

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

  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. 在確認對話方塊中,輸入規則的名稱,然後選擇 [刪除]。

規則疑難排解

如果 CPU 和記憶體使用量資料未如預期般顯示,請遵循此程序中 AWS IoT SiteWise 的步驟對規則進行疑難排解。在此程序中,您會設定重新發佈規則動作做為錯誤動作,以檢視 MQTT 測試用戶端中的錯誤訊息。您也可以將記錄設定為記 CloudWatch 錄以進行疑難排解。如需詳細資訊,請參閱 疑難排解 AWS IoT SiteWise 規則動作

將重新發佈錯誤動作新增到規則
  1. 導覽至 AWS IoT 主控台

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

  3. 選擇您先前建立的規則,然後選擇 [編輯]。

  4. 在 [錯誤動作-選用] 下,選擇 [新增錯誤動作]。

  5. 選擇「將訊息重新發佈至 AWS IoT 主題」。

  6. 主題中,輸入sitewise/rule/tutorial/error。 AWS IoT Core 會將錯誤訊息重新發佈到此主題。

  7. 選擇您之前創建的角色(例如,SiteWiseTutorialDeviceRuleRole)。

  8. 選擇更新

在您設定重新發佈錯誤動作後,您可以在 AWS IoT Core 中檢視 MQTT 測試用戶端內的錯誤訊息。

在以下程序中,您會在 MQTT 測試用戶端中訂閱錯誤主題。

訂閱錯誤動作主題
  1. 導覽至 AWS IoT 主控台

  2. 在左側導覽頁面中,選擇 MQTT 測試用戶端以開啟 MQTT 測試用戶端。

  3. 在 [主題篩選] 欄位中,輸入sitewise/rule/tutorial/error並選擇 [訂閱]。

出現錯誤訊息時,請檢視任何錯誤訊息中的 failures 陣列以診斷問題。如需可能問題和解決方式的詳細資訊,請參閱疑難排解 AWS IoT SiteWise 規則動作

如果沒有出現錯誤,請檢查您的規則已啟用,以及您訂閱的主題和您在重新發佈錯誤動作中設定的主題相同。如果錯誤在您這麼做之後仍未出現,請檢查裝置指令碼是否正在執行,並成功更新裝置的陰影。

注意

您也可以訂閱裝置的陰影更新主題,以檢視 AWS IoT SiteWise 動作剖析的承載。若要這麼做,請訂閱下列主題。

$aws/things/+/shadow/update/accepted