在公式運算式中使用時間函數 - AWS IoT SiteWise

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

在公式運算式中使用時間函數

使用時間函數根據資料點的時間戳記傳回值。

在指標中使用時間函數

僅在指標中,您可以使用下列函數,這些函數會根據資料點的時間戳記傳回值。

臨時函數引數必須是本地資產模型或嵌套表達式的屬性。這意味著您不能在臨時函數中使用子資產模型的屬性。

您可以在時間函數中使用嵌套表達式。當您使用巢狀運算式時,會套用下列規則:

  • 每個引數只能有一個變數。

    例如,latest( t*9/5 + 32 )支援。

  • 參數不能是聚合函數。

    例如,first( sum(x) )不支援。

函式 描述

first(x)

傳回目前時間間隔指定變數值中時間戳記最早的值。

last(x)

傳回目前時間間隔指定變數值中時間戳記最晚的值。

earliest(x)

返回當前時間間隔開始之前給定變量的最後一個值。

如果輸入屬性在其歷史記錄中至少有一個資料點,此函數會計算每個時間間隔的資料點。如需詳細資訊,請參閱 time-range-defintion

latest(x)

返回給定變量的最後一個值與當前時間間隔結束之前的最新時間戳。

如果輸入屬性在其歷史記錄中至少有一個資料點,此函數會計算每個時間間隔的資料點。如需詳細資訊,請參閱 time-range-defintion

statetime(x)

傳回目前時間間隔中指定變數為正 (positive) 的秒數。您可以使用比較函數來建立要使用之statetime函數的轉換屬性。

例如,如果您有一個為 01Idle 屬性,您可以使用此表達式來計算每個時間間隔的閒置時間:IdleTime = statetime(Idle)。如需詳細資訊,請參閱 example statetime scenario (狀態時間案例範例)。

此函數不支援使用指標屬性做為輸入變數。

如果輸入屬性在其歷史記錄中至少有一個資料點,此函數會計算每個時間間隔的資料點。

TimeWeightedAvg(x, [interpolation])

傳回以點之間的時間間隔加權的輸入資料的平均值。

有關計算和間隔詳細信息,請參閱時間加權函數參數

可選參數interpolaton必須是字符串常量:

  • locf— 此為預設值。計算使用「上次觀察到的遞進」計算演算法來表示資料點之間的間隔。在這種方法中,資料點被計算為最後一個觀測值,直到下一個輸入資料點時間戳記為止。

    良好資料點之後的值會被外推為其值,直到下一個資料點時間戳記為止。

  • linear— 計算使用線性內插計算演算法來表示資料點之間的間隔。

    兩個良好資料點之間的值會被外推為這些資料點值之間的線性內插法。

    好資料點與壞資料點之間的值或最後一個良好資料點之後的值將被外推為良好資料點。

TimeWeightedStDev(x, [algo])

返回與點之間的時間間隔加權的輸入數據的標準差。

有關計算和間隔詳細信息,請參閱時間加權函數參數

計算使用「上次觀察到的遞進」計算演算法來表示資料點之間的間隔。在這種方法中,資料點被計算為最後一個觀測值,直到下一個輸入資料點時間戳記為止。權重計算為資料點或視窗邊界之間的時間間隔 (以秒為單位)。

可選參數algo必須是字符串常量:

  • f— 此為預設值。它返回一個帶有頻率權重的無偏加權樣本方差,其中以秒 TimeWeight 為單位計算。該算法通常在標準差下假定,被稱為貝塞爾對加權樣本的標準偏差的校正。

  • p— 傳回偏向加權樣本方差,也稱為總體差異。

以下公式用於計算,其中:

  • S p = 總體標準差

  • S f = 頻率標準差

  • X i = 傳入資料

  • ω i = 等於以秒為單位的時間間隔的權重

  • μ* = 傳入資料的加權平均值

總體標準差的方程式:


                        總體標準差的方程式。

頻率標準差的方程式:


                        頻率標準差的方程。

下圖顯示了如何 AWS IoT SiteWise 計算時間函數first,,和 last earliestlatest,相對於當前時間間隔。


              AWS IoT SiteWise 臨時函數根據其時間戳返回數據點。
注意
  • 的時間範圍last(x)是 (目前視窗開始、目前視窗結束時間]。first(x)

  • 的時間範圍latest(x)為 (時間的開始、目前視窗結束)。

  • 的時間範圍earliest(x)是 (時間的開始,上一個視窗結束]。

時間加權函數參數

針對彙總視窗計算的時間加權函數會考慮下列事項:

  • 視窗內的資料點

  • 資料點之間的時間間隔

  • 視窗前的最後一個資料點

  • 視窗後的第一個資料點 (針對某些演算法)

條款:

  • 誤的資料點 — 任何品質不良或非數值的資料點。在窗口結果計算中不考慮這一點。

  • 錯誤的間隔 — 錯誤資料點之後的間隔。第一個已知資料點之前的間隔也被視為錯誤的間隔。

  • 良好的資料點 — 任何具有良好品質和數值的資料點。

注意
  • AWS IoT SiteWise 只有在計算轉換和指標時才會消耗GOOD品質資料。它忽略UNCERTAINBAD數據點。

  • 第一個已知資料點之前的間隔被視為錯誤的間隔。如需詳細資訊,請參閱公式運算式教學

最後一個已知資料點之後的間隔會無限期繼續,影響所有後續視窗。當新資料點到達時,函數會重新計算間隔。

遵循上述規則,系統會計算彙總視窗結果,並僅限於視窗邊界。默認情況下,只有當整個窗口是一個良好的間隔時,函數才會發送窗口結果。

如果視窗良好間隔小於視窗長度,則函數不會傳送視窗。

當影響視窗結果的資料點發生變更時,即使資料點位於視窗外,函數也會重新計算視窗。

如果 input 屬性在其歷史記錄中至少有一個資料點,且已啟動計算,則函數會計算每個時間間隔的時間加權彙總函數。

範例
狀態時間案例範例

假設您具有以下屬性的資產:

  • Idle— 為0或的度量1。值為 1 時,機器處於閒置狀態。

  • Idle Time— 使用公式計算機器閒置時間 (statetime(Idle)以秒為單位) 的度量 (每 1 分鐘間隔)。

Idle 屬性具有以下資料點。

Timestamp 2:00:00 PM 2:00:30 PM 2:01:15 PM 2:02:45 PM 2:04:00 PM
Idle 0 1 1 0 0

AWS IoT SiteWise 每分鐘從的值計算一次Idle Time性質Idle。此計算完成之後,Idle Time 屬性會具有下列資料點。

Timestamp 2:00:00 PM 2:01:00 PM 2:02:00 PM 2:03:00 PM 2:04:00 PM
Idle Time N/A 30 60 45 0

AWS IoT SiteWise 在每分鐘結束Idle Time時執行下列計算。

  • 下午 2:00 (下午 1:59 至下午 2:00)

    • 下午 2:00 之前 Idle 沒有資料,因此不會計算任何資料點。

  • 下午 2:01 (下午 2:00 至下午 2:01)

    • 下午 2:00:00,機器處於作用中狀態 (Idle0)。

    • 下午 2:00:30,機器處於閒置狀態 (Idle1)。

    • 在下午 2:01:00 的間隔結束之前 Idle 不會再次改變,所以 Idle Time 是 30 秒。

  • 下午 2:02 (下午 2:01 至下午 2:02)

    • 下午 2:01:00,機器處於閒置狀態 (即最後一個資料點位於下午 2:00:30)。

    • 下午 2:01:15,機器仍處於閒置狀態。

    • 在下午 2:02:00 的間隔結束之前 Idle 不會再次改變,所以 Idle Time 是 60 秒。

  • 下午 2:03 (下午 2:02至下午 2:03)

    • 下午 2:02:00,機器處於閒置狀態 (即最後一個資料點位於下午 2:01:15)。

    • 下午 2:02:45,機器處於作用中狀態。

    • 在下午 2:03:00 的間隔結束之前 Idle 不會再次改變,所以 Idle Time 是 45 秒。

  • 下午 2:04 (下午 2:03 至下午 2:04 )

    • 下午 2:03:00,機器處於作用中狀態 (即最後一個資料點位於下午 2:02:45)。

    • 在下午 2:04:00 的間隔結束之前 Idle 不會再次改變,所以 Idle Time 是 0 秒。

範例 TimeWeightedAvg 和 TimeWeightedStDev 案例

下表提供這些一分鐘時段量度的範例輸入和輸出:Avg(x), TimeWeightedAvg(x), TimeWeightedAvg(x, "linear"), stDev(x), timeWeightedStDev(x), timeWeightedStDev(x, 'p')

一分鐘彙總視窗的範例輸入:

注意

這些數據點都具有GOOD質量。

03:00:00 4.0
03:01 2.0
03:01:10 8.0
03:01:50 20.0
03:02 14.0
03:02:05 10.0
03:02:10 3.0
03:02:30 20.0
03:03:30 0.0

匯總結果輸出:

注意

無 — 未針對此視窗產生結果。

時間 Avg(x) TimeWeightedAvg(x) TimeWeightedAvg(X, "linear") stDev(X) timeWeightedStDev(x) timeWeightedStDev(x, 'p')
3:00:00 4 0
3:01:00 2 4 3 0 0 0
3:02:00 14 9 13 6 5.430610041581775 5.385164807134504
3:03:00 11 13 12.875 8.54400374531753 7.724054437220943 7.659416862050705
3:04:00 0 10 2.5 0 10.084389681792215 10
3:5 0 0 0 0

在轉換中使用時間函數

僅在轉換中,您可以在啟動目前轉換計算的屬性更新之前,使用pretrigger()函數擷取變數的GOOD品質值。

假設製造商用 AWS IoT SiteWise 來監視機器狀態的範例。製造商使用以下測量和轉換來表示過程:

  • 測量值current_state,可以是 0 或 1。

    • 如果本機處於清潔狀態,則current_state等於 1。

    • 如果機器處於製造狀態,則current_state等於 0。

  • 轉換cleaning_state_duration,等於if(pretrigger(current_state) == 1, timestamp(current_state) - timestamp(pretrigger(current_state)), none)。此轉換以 Unix 時代格式返回機器處於清理狀態的時間(以秒為單位)。如需詳細資訊,請參閱在公式運算式中使用條件函數timestamp () 函數。

如果本機處於清潔狀態的時間超過預期,製造商可能會調查本機。

您也可以在多變數轉pretrigger()換中使用此函數。例如,您有兩個名x為 AND 的度量y,以及一個轉換z,即等於x + y + pretrigger(y)。下表顯示xy以及z從上午 9:00 到上午 9:15 的值。

注意
  • 此範例假設量測值會按時間順序到達。例如,上午 09:00 x 的值會在上午 09:05 的x值之前抵達。

  • 如果上午 9:05 的資料點在上午 9:00 的資料點之前到達,則z不會在上午 9:05 計算。

  • 如果上午 9:05 x 的值22 = 20 + 1 + 1在 09:00 AM 的x值之前到達,並且按時間順序到y達的值,則z等於上午 9:05。

上午 9 時 上午九時零五分 上午九時十分 上午九時十五分

x

10

20

30

y

1

2

3

z = x + y + pretrigger(y)

y早上 09:00 之前沒有收到任何數據點。因此,z不會在上午 09:00 計算。

23 = 20 + 2 + 1

pretrigger(y)等於 1。

25 = 20 + 3 + 2

x不會收到新的資料點。 pretrigger(y)等於 2。

y不會收到新的資料點。因此,在上午 9 點 15 分pretrigger(y)等於 3。