本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS IoT Events 監控您的 IoT 裝置
您可以使用 AWS IoT Events 來監控裝置或程序,並根據重大事件採取行動。若要這麼做,請依照下列基本步驟進行:
- 建立輸入
-
您必須有一種方法,您的裝置和程序才能將遙測資料取得 AWS IoT Events。您可以透過將訊息作為輸入傳送到 來執行此操作 AWS IoT Events。您可以透過多種方式將訊息作為輸入來傳送:
-
使用 BatchPutMessage操作。
-
定義
iotEvents
規則引擎 的規則動作。 AWS IoT Core規則動作會將您輸入的訊息資料轉送至 AWS IoT Events。 -
在 中 AWS IoT Analytics,使用 CreateDataset操作建立具有 的資料集
contentDeliveryRules
。這些規則會指定自動傳送資料集內容的 AWS IoT Events 輸入。 -
在 AWS IoT Events 偵測器模型的
onInput
、onExit
或transitionEvents
事件中定義iotEvents動作。偵測器模型執行個體和啟動動作的事件的相關資訊會以您指定名稱的輸入傳回系統。
在您的裝置以這種方式開始傳送資料之前,您必須定義一或多個輸入。若要這樣做,請為每個輸入命名,並指定輸入監視器傳入訊息資料中的哪些欄位。 會從許多來源 AWS IoT Events 接收其JSON有效負載形式的輸入。每個輸入都可以自行操作,也可以與其他輸入結合,以偵測更複雜的事件。
-
- 建立偵測器模型
-
使用狀態 定義偵測器模型 (設備或程序的模型)。針對每個狀態,您可以定義評估傳入輸入的條件 (布林值) 邏輯,以偵測重大事件。偵測到事件時,它可以變更狀態,或使用其他服務啟動自訂建置或預先定義的動作 AWS 。您可以定義其他事件,這些事件會在進入或結束狀態時啟動動作,也可以在符合條件時選擇性地啟動動作。
在本教學課程中,您會傳送 Amazon SNS 訊息作為模型進入或退出特定狀態時的動作。
- 監控裝置或程序
-
如果您正在監控多個裝置或程序,您可以在每個輸入中指定欄位,以識別輸入來源的特定裝置或程序。(請參閱 中的
key
欄位CreateDetectorModel
。) 識別新裝置時 (在 識別的輸入欄位中看到新值key
),會建立偵測器。(每個偵測器都是偵測器模型的執行個體。) 然後,新的偵測器會繼續回應來自該裝置的輸入,直到其偵測器模型更新或刪除為止。如果您正在監控單一程序 (即使多個裝置或子程序正在傳送輸入),也不會指定唯一的識別
key
欄位。在此情況下,會在第一個輸入到達時建立單一偵測器 (執行個體)。 - 將訊息作為輸入傳送到偵測器模型
-
有幾種方法可以從裝置或程序傳送訊息,作為 AWS IoT Events 偵測器的輸入,不需要您對訊息執行其他格式。在本教學課程中,您可以使用 AWS IoT 主控台為將訊息資料轉送至 的 AWS IoT Core 規則引擎撰寫AWS IoT Events 動作規則 AWS IoT Events。若要這麼做,您可以依名稱識別輸入。然後,您繼續使用 AWS IoT 主控台來產生一些訊息,這些訊息會作為輸入轉送至 AWS IoT Events。
如何知道偵測器模型中需要哪些狀態?
若要判斷偵測器模型應具備的狀態,請先決定您可以採取的動作。例如,如果您的汽車在汽油上執行,您會在開始旅程時查看燃料量規,以查看是否需要加油。在這裡,您有一個動作:告訴驅動程式「加油」。您的偵測器模型需要兩種狀態:「汽車不需要燃料」和「汽車需要燃料」。一般而言,您想要為每個可能的動作定義一個狀態,以及在不需要動作時再定義一個狀態。即使動作本身更複雜,這仍然有效。例如,您可能想要查詢並包含尋找最接近加油站或最便宜價格的資訊,但當您傳送訊息至「取得加油」時,請執行此操作。
若要決定下一步要輸入的狀態,您可以查看輸入。輸入包含決定您應該處於何種狀態所需的資訊。若要建立輸入,請在裝置或程序傳送的訊息中選取一或多個欄位,以協助您決定。在此範例中,您需要一個輸入,告訴您目前的燃料量 ("% full")。也許您的汽車正在向您傳送數個不同的訊息,每個訊息都有數個不同的欄位。若要建立此輸入,您必須選取訊息和報告目前氣量表層級的欄位。您即將進行的旅程長度 ("距離目的地") 可以硬式編碼,以保持簡單;您可以使用平均旅程長度。您將根據輸入進行一些計算 (該百分比已完全轉換多少加侖? 是大於您可以行駛之英里的平均旅程長度,這取決於您的加侖數和平均每加侖英里數)。您可以在事件 中執行這些計算並傳送訊息。
到目前為止,您有兩個狀態和一個輸入。您需要一個處於第一個狀態的事件,該事件會根據輸入執行計算,並決定是否進入第二個狀態。這是一個轉換事件。 (transitionEvents
位於 狀態onInput
的事件清單中。 收到處於此第一個狀態的輸入時,如果condition
符合事件的 ,事件會執行轉換為第二個狀態。) 當您達到第二個狀態時,您會在進入 狀態時立即傳送訊息。(您使用onEnter
事件。 進入第二個狀態時,此事件會傳送訊息。 不需要等待其他輸入到達。) 還有其他類型的事件,但這只是簡單範例所需的一切。
其他類型的事件是 onExit
和 onInput
。一旦收到輸入並滿足條件,onInput
事件就會執行指定的動作。當操作結束其目前狀態且符合條件時,onExit
事件會執行指定的動作。
您有任何遺漏嗎? 是,如何回到第一個「汽車不需要燃料」狀態? 填充氣罐後,輸入會顯示已滿的氣罐。在第二個狀態中,您需要將轉換事件傳回接收輸入時 (在第二個狀態onInput:
的事件中) 發生的第一個狀態。如果其計算結果顯示您現在有足夠氣體可帶您前往想要去的地方,則應該會轉回第一個狀態。
這就是基本概念。某些偵測器模型會新增反映重要輸入的狀態,而不只是可能的動作,而變得更複雜。例如,您可能在偵測器模型中有三種狀態,可追蹤溫度:「正常」狀態、「過熱」狀態和「潛在問題」狀態。當溫度上升到特定層級以上,但尚未變得過熱時,您會轉換到潛在的問題狀態。除非警示維持在此溫度超過 15 分鐘,否則您不想傳送警示。如果在此之前溫度恢復正常,偵測器會轉換回正常狀態。如果計時器過期,偵測器會轉換為過熱狀態並傳送警示,只是要小心。您可以使用變數和一組更複雜的事件條件來執行相同的動作。但通常使用另一個狀態更容易,實際上,儲存計算結果。
如何知道自己是否需要一個或數個偵測器執行個體?
若要決定您需要多少執行個體,請自問「您有興趣知道什麼?」 假設您想知道今天天氣如何。是否下雨 (狀態)? 您需要使用傘 (動作) 嗎? 您可以擁有一個報告溫度的感應器、另一個報告濕度的感應器,以及其他報告氣壓、風速和方向以及降水量的感應器。但是,您必須一起監控所有這些感應器,以確定天氣狀態 (下雨、下雪、高播、晴天) 以及要採取的適當動作 (拿傘或塗抹防曬霜)。儘管感應器數量有限,您希望一個偵測器執行個體監控天氣狀態,並告知您要採取的動作。
但是,如果您是 區域的天氣預報器,則可能會有多個此類感應器陣列的執行個體,位於該區域的不同位置。每個位置的人員都需要知道該位置的天氣情況。在這種情況下,您需要偵測器的多個執行個體。每個位置中每個感應器報告的資料必須包含您指定為 欄位key
的欄位。此欄位可讓 AWS IoT Events 建立區域的偵測器執行個體,然後在偵測器執行個體持續到達時,繼續將此資訊路由至該偵測器執行個體。不再有受損的頭髮或曬傷的鼻子!
基本上,如果您有一個需要監控的情況 (一個程序或一個位置),則需要一個偵測器執行個體。如果您有許多需要監控的情況 (位置、程序),則需要多個偵測器執行個體。