数式で時間関数を使用する - AWS IoT SiteWise

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

数式で時間関数を使用する

時間関数を使用して、データポイントのタイムスタンプに基づいて値を返す。

メトリクスで時間関数を使用する

[metrics] (メトリクス) のみ、データポイントのタイムスタンプに基づいた値を返す次の関数を使用できます。

時間関数の引数は、ローカルのアセットモデルまたは入れ子式のプロパティである必要があります。これは、子アセットモデルのプロパティを一時関数で使用できないことを意味します。

一時関数で入れ子になった式を使用することができます。入れ子になった式を使用する場合、次のルールが適用されます。

  • 各引数は1つの変数しか持つことができません。

    例えば、latest( t*9/5 + 32 ) がサポートされています。

  • 引数には集計関数を指定できません。

    例えば、first( sum(x) ) はサポートされていません。

機能 説明

first(x)

現在の時間間隔における最も早いタイムスタンプを持つ、指定された変数値を返します。

last(x)

現在の時間間隔における最新のタイムスタンプを持つ、指定された変数値を返します。

earliest(x)

現在の時間間隔の開始前に指定された変数の最後の値を返します。

入力プロパティの履歴に少なくとも 1 つのデータポイントがある場合、この関数は、時間間隔ごとにデータポイントを計算します。詳細については、「time-range-defintion」を参照してください。

latest(x)

指定された変数の最後の値を、現在の時間間隔の終了前の最新のタイムスタンプとともに返します。

入力プロパティの履歴に少なくとも 1 つのデータポイントがある場合、この関数は、時間間隔ごとにデータポイントを計算します。詳細については、「time-range-defintion」を参照してください。

statetime(x)

指定された時間間隔において、指定された変数が正である時間 (秒単位) を返します。[comparison functions] (比較関数) を使用して、statetime 関数が消費する変換プロパティを作成することができます。

たとえば、Idle プロパティが 0 または 1 の場合、次の式 IdleTime = statetime(Idle) を使用して時間間隔ごとのアイドル時間を計算できます。詳細については、「statetime シナリオの例」を参照してください。

この関数は、入力変数としてメトリクスプロパティをサポートしていません。

入力プロパティの履歴に少なくとも 1 つのデータポイントがある場合、この関数は、時間間隔ごとにデータポイントを計算します。

TimeWeightedAvg(x, [interpolation])

ポイント間の時間間隔で重み付けされた入力データの平均を返します。

計算と間隔の詳細については、「時間加重関数のパラメータ」を参照してください。

オプションの引数 interpolaton は文字列定数である必要があります。

  • locf – デフォルト値です。この計算では、データポイント間の間隔に Last Observed Carry Forward (LOCF) 計算アルゴリズムが使用されます。このアプローチでは、データポイントは次の入力データポイントのタイムスタンプまで最後の観測値として使用されます。

    良好データポイントの後の値が、次のデータポイントのタイムスタンプまでの値として外挿されます。

  • linear – この計算では、データポイント間の間隔に線形補間計算アルゴリズムが使用されます。

    2 つの良好データポイント間の値が、それらデータポイントの値間の線形補間値として外挿されます。

    良好データポイントと不良データポイントの間の値、または最後の良好データポイントの後の値が、良好データポイントとして外挿されます。

TimeWeightedStDev(x, [algo])

ポイント間の時間間隔で重み付けされた入力データの標準偏差を返します。

計算と間隔の詳細については、「時間加重関数のパラメータ」を参照してください。

この計算では、データポイント間の間隔に Last Observed Carry Forward (LOCF) 計算アルゴリズムが使用されます。このアプローチでは、データポイントは次の入力データポイントのタイムスタンプまで最後の観測値として使用されます。重みは、データポイント間またはウィンドウ境界間の時間間隔 (秒単位) の形式で求められます。

オプションの引数 algo は文字列定数である必要があります。

  • f – デフォルト値です。頻度の重みを持つバイアスのない加重サンプル分散を返します。ここで、 TimeWeight は秒単位で計算されます。通常、このアルゴリズムは標準偏差未満であることを想定しており、加重サンプルに対する標準偏差のベッセル補正として知られています。

  • p – 偏りあり加重サンプル分散 (母分散とも呼ばれる) を返します。

計算には以下の式が使用されます。

  • Sp = 母集団の標準偏差

  • Sf = 頻度の標準偏差

  • Xi = 入力データ

  • ωi = 時間間隔に等しい重み (秒)

  • μ* = 入力データの加重平均

母集団の標準偏差の計算式:

母集団の標準偏差の計算式。

頻度の標準偏差の計算式:

頻度の標準偏差の計算式。

次の図はfirst、現在の時間間隔を基準にして、 が時間関数 lastlatest、、earliestおよび AWS IoT SiteWise を計算する方法を示しています。

AWS IoT SiteWise 時間関数は、タイムスタンプに基づいてデータポイントを返します。
注記
  • の時間範囲はfirst(x)、 (現在のウィンドウ開始、現在のウィンドウ終了] last(x)です。

  • の時間範囲は (時間の開始、現在のウィンドウの終了] latest(x)です。

  • の時間範囲は (時間の開始、前のウィンドウの終了] earliest(x)です。

時間加重関数のパラメータ

集計ウィンドウ用に計算される時間加重関数では、次のことが考慮されます。

  • ウィンドウ内のデータポイント数

  • データポイント間の時間間隔数

  • ウィンドウの前の最後のデータポイント

  • ウィンドウの後の最初のデータポイント (一部のアルゴリズムのみ)

条件:

  • 不良データポイント – 品質が良くないか、値が数値以外のデータポイント。不良データポイントは、ウィンドウの結果計算では考慮されません。

  • 不良間隔 – 不良データポイントの後の間隔。最初の既知のデータポイントの前の間隔も不良間隔とみなされます。

  • 良好データポイント – 品質が良好でかつ値が数値のデータポイント。

注記
  • AWS IoT SiteWise は、変換とメトリクスを計算するときにのみGOOD、品質データを消費します。UNCERTAIN および BAD データポイントは無視します。

  • 最初の既知のデータポイントの前の間隔も不良間隔とみなされます。詳細については、「数式表現チュートリアル」を参照してください。

最後の既知のデータポイントの後の間隔は無限に続き、以降のすべてのウィンドウに影響します。新しいデータポイントがくると、この関数は間隔を再計算します。

上記のルールに従って、集計ウィンドウの結果が計算され、ウィンドウの境界が制限されます。デフォルトでは、この関数はウィンドウ全体が良好間隔である場合にのみウィンドウの結果を送信します。

ウィンドウの良好間隔がウィンドウの長さよりも短い場合、この関数はウィンドウを送信しません。

ウィンドウの結果に影響するデータポイントに変更があると、データポイントがウィンドウの外側にあっても、ウィンドウは再計算されます。

入力プロパティの履歴に少なくとも 1 つのデータポイントがあり、計算が開始されていた場合は、時間間隔ごとに時間加重集計関数が計算されます。

statetime シナリオの例

次のプロパティを持つアセットがある例を考えてみましょう。

  • Idle - 0 または 1 である測定値をいう。値が 1 の場合、マシンはアイドル状態です。

  • Idle Time - 1分間隔で、機械がアイドル状態である時間を秒単位でコンピューティングする式 statetime(Idle) を使用した指標。

Idle プロパティには、以下のデータポイントがあります。

タイムスタンプ 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プロパティを 1 分ごとに計算しますIdle。この計算が完了すると、Idle Time プロパティには次のデータポイントが存在します。

タイムスタンプ 2:00:00 PM 2:01:00 PM 2:02:00 PM 2:03:00 PM 2:04:00 PM
Idle Time 該当なし 30 60 45 0

AWS IoT SiteWise は、毎分の終わりに Idle Time に対して次の計算を実行します。

  • 2:00 PM 時点 (1:59 PM から 2:00 PM の場合)

    • Idle には 2:00 PM より前のデータがないため、データポイントは計算されません。

  • 2:01 PM 時点 (2:00 PM から 2:01 PM の場合)

    • 2:00:00 PM の時点で、マシンはアクティブです (Idle0)。

    • 2:00:30 PM の時点で、マシンはアイドル状態です (Idle1)。

    • 2:01:00 PM にインターバルが終了する前に Idle は再度変更されないため、Idle Time は 30 秒になります。

  • 2:02 PM 時点 (2:01 PM から 2:02 PM の場合)

    • 2:01:00 PM の時点で、マシンはアイドル状態です (2:00:30 PM 時点の直前のデータポイントによる)。

    • 2:01:15 PM の時点で、マシンはまだアイドル状態です。

    • 2:02:00 PM にインターバルが終了する前に Idle は再度変更されないため、Idle Time は 60 秒になります。

  • 2:03 PM 時点 (2:02 PM から 2:03 PM の場合)

    • 2:02:00 PM の時点で、マシンはアイドル状態です (2:01:15 PM 時点の直前のデータポイントによる)。

    • 2:02:45 PM の時点で、マシンはアクティブです。

    • 2:03:00 PM にインターバルが終了する前に Idle は再度変更されないため、Idle Time は 45 秒になります。

  • 2:04 PM 時点 (2:03 PM から 2:04 PM の場合)

    • 2:03:00 PM の時点で、マシンはアクティブです (2:02:45 PM 時点の直前のデータポイントによる)。

    • 2:04:00 PM にインターバルが終了する前に Idle は再度変更されないため、Idle Time は 0 秒になります。

例 TimeWeightedAvg と TimeWeightedStDev シナリオ

次の表は、1 分間のウィンドウメトリクスの入力例と出力例を示しています: Avg(x), TimeWeightedAvg(x), TimeWeightedAvg(x, "linear"), stDev(x), timeWeightedStDev(x), timeWeightedStDev(x, 'p')

1 分間の集計ウィンドウの入力例:

注記

これらのデータポイントはすべてGOOD品質を備えています。

03:00:00 4.0
03:01:00 2.0
03:01:10 8.0
03:01:50 20.0
03:02:00 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:05:00 なし 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() 関数を使うこともできます。例えば、xy という 2 つの測定値があり、z と等しい変換値 x + y + pretrigger(y) があるとします。次の表は、午前 9 時から午前 9 時 15 分までの xyz の値である。

注記
  • この例では、測定値の値が時系列に到着することを想定しています。例えば、午前 09 時 00 分のx の値は、午前 09 時 05 分の x の値より先に到着する。

  • 午前 9 時 5 分のデータポイントが午前 9 時のデータポイントより先に到着した場合、午前 9 時 5 分には z はコンピューティングされません。

  • 午前 9 時 5 分 の x の値が午前 9 時の x の値より先に到着し、y の値が時系列に到着する場合、z は午前 9 時 5 分の 22 = 20 + 1 + 1 と等しくなる。

午前 9 時 0 分 午前 9 時 5 分 午前 9 時 10 分 午前 9 時 15 分

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 に等しい。

36 = 30 + 3 + 3

y は新しいデータポイントを受信しません。したがって、午前 09 時 15 分には pretrigger(y) は3に等しい。