公式運算式教學 - AWS IoT SiteWise

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

公式運算式教學

您可以遵循這些自學課程,在中使用公式運算式 AWS IoT SiteWise。

在公式中使用字串

您可以對公式運算式中的字串進行操作。您也可以從參照屬性和測量屬性的變數中輸入字串。

重要

公式運算式只能輸出雙精度值或字串值。巢狀運算式可以輸出其他資料類型 (例如字串),但整體公式必須評估為數字或字串。您可以使用 jp 函數將字串轉換為數字。布林值必須是 1 (真) 或 0 (假)。如需詳細資訊,請參閱未定義、無限和溢出值

AWS IoT SiteWise 提供下列可用來對字串進行操作的公式運算式功能:

篩選資料點

您可以使用 if 函數篩選出不符合條件的資料點。if函數會評估條件,並傳回truefalse結果的不同值。您可以使用 none 常數作為一個if函數案例的輸出,以捨棄該案例的資料點。

篩選出符合條件的資料點的步驟
  • 建立使用if函數定義條件的轉換,以檢查條件是否符合,並noneresult_if_trueresult_if_false值的方式傳回。

範例:過濾掉水未沸騰的資料點

考慮一個場景,你有一個測量temp_c, 提供溫度 (攝氏) 的水在一台機器. 您可以定義以下轉換,以過濾掉水未沸騰的資料點:

  • 轉換:boiling_temps = if(gte(temp_c, 100), temp_c, none)— 如果溫度大於或等於 100 攝氏度,則傳回溫度,否則不會傳回任何資料點。

計算符合條件的資料點

您可以使用比較函數和 sum () 來計算條件為真的資料點的數量。

計算符合條件的資料點
  1. 建立使用比較函數在另一個屬性上定義篩選條件的轉換。

  2. 建立可加總符合該條件之資料點的指標。

範例:計算水沸騰的資料點數量

考慮一個場景,你有一個測量temp_c, 提供溫度 (攝氏) 的水在一台機器. 您可以定義下列轉換和指標屬性,以計算水沸騰的資料點數量:

  • 轉換:is_boiling = gte(temp_c, 100)1 如果溫度大於或等於攝氏 100 度,則傳回,否則傳回0

  • 公制:boiling_count = sum(is_boiling)— 傳回水沸騰的資料點數目。

公式中的後期資料

AWS IoT SiteWise 支援最多 7 天的資料延遲擷取。當 AWS IoT SiteWise 接收到延遲資料時,它會重新計算在過去視窗中輸入延遲資料的任何量度的現有值。這些重新計算會產生資料處理費用。

注意

AWS IoT SiteWise 計算輸入晚期資料的屬性時,會使用每個屬性的目前公式運算式。

AWS IoT SiteWise 重新計算過去的度量時段之後,它會取代該視窗的先前值。如果您啟用了該測量結果的通知, AWS IoT SiteWise 也會發出屬性值通知。這表示您可以針對先前收到通知的相同屬性和時間戳記,接收新的屬性值更新通知。如果您的應用程式或資料湖使用屬性值通知,您必須使用新的值來更新之前的值,使其資料正確無誤。

公式中的資料品質

在中 AWS IoT SiteWise,每個資料點都有一個品質代碼,可以是下列其中一種:

  • GOOD— 數據不受任何問題的影響。

  • BAD— 數據受到傳感器故障等問題的影響。

  • UNCERTAIN— 數據受到傳感器不准確等問題的影響。

AWS IoT SiteWise 計算轉換和指標時,只會消耗GOOD品質資料。 AWS IoT SiteWise 僅輸出GOOD品質資料以成功計算。如果計算不成功,則 AWS IoT SiteWise 不會為該計算輸出數據點。如果計算導致未定義、無限或溢出值,則可能會發生這種情況。

如需如何查詢資料及依資料品質篩選的詳細資訊,請參閱 查詢資料來源 AWS IoT SiteWise

未定義、無限和溢出值

某些公式運算式 (例如x / 0sqrt(-1)、或log(0)) 會計算在實數系統中未定義、無限或超出支援範圍的值 AWS IoT SiteWise。當資產屬性的運算式計算未定義、無限或溢位值時, AWS IoT SiteWise 不會輸出該計算的資料點。

AWS IoT SiteWise 如果將非數值作為公式運算式的結果來計算資料點,也不會輸出資料點。這意味著,如果您定義一個計算字符串,數組或 none 常量的公式,那麼 AWS IoT SiteWise 不會輸出該計算的數據點。

範例

下列每個公式運算式都會產生無法 AWS IoT SiteWise 以數字表示的值。 AWS IoT SiteWise 計算這些公式運算式時,不會輸出資料點。

  • x / 0未定義。

  • log(0)未定義。

  • sqrt(-1)在實數系統中未定義。

  • "hello" + " world"是一個字符串。

  • jp('{"values":[3,6,7]}', '$.values')是一個數組。

  • if(gte(temp, 300), temp, none)nonetemp時小於300