AWS IoT SiteWise の GetAssetPropertyAggregates API を理解する

2023.05.19

先日、下記ようなアップデートがありました。

AWS IoT SiteWise では、収集したデータに対して指定の時間間隔で平均値や最大値などを取得できる GetAssetPropertyAggregates というAPI が用意されています。
「指定できる時間間隔」はこれまでは「1分」「1時間」「1日」の3種類でしたが、今回のリリースで、新たに「15分」が追加されました。

…と、説明しましたが、実は私は GetAssetPropertyAggregates API を使ったことがなかったので試してみた内容を紹介したいと思います。

GetAssetPropertyAggregates API とは

すでに書いていますが、この API を使うと AWS IoT SiteWise に集めたデータに対して、「期間」「集計の種類」「時間間隔」を指定することで、指定の集計手法で計算した結果を取得することができます。

例えば、1つのデータ項目に対して、1秒間隔で収集したデータが「15:00〜18:00」の3時間分ある場合、「16:00〜17:00」の間の1分間隔平均値を取得できます。この場合だと元データは、60 * 60 * 310800 個ありますが、1分間隔の平均データとして 180 個のデータを取得できることになります。

AWS CLI で試す

具体的に AWS CLI で確認してみます。元データの前提は以下のとおりとします。

  • 対象データとなるプロパティのエイリアス:/test/device/1/temperature
  • 元データの時間間隔:5秒

API によるデータ取得条件は次のとおりとします。

  • 期間:2023 年 05 月 10 日 17:20:00 〜 17:40:00
  • 集計種類:平均値
  • 時間間隔:1分

データの送信は下記の記事で紹介しているスクリプトでランダムデータを生成して、手元の Mac から API 経由でデータ送信しています。

下記は AWS CLI による get-asset-property-aggregate コマンドを実行した結果です。タイムスタンプが1分間隔となっていて、それぞれの値が "average": xxx... と平均値になっていることが分かります。

$ aws iotsitewise get-asset-property-aggregates \
  --property-alias /test/device/1/temperature \
  --start-date 1683706800 \
  --end-date 1683708000 \
  --aggregate-types AVERAGE \
  --resolution 1m
{
    "aggregatedValues": [
        {
            "timestamp": "2023-05-10T17:21:00+09:00",
            "quality": "GOOD",
            "value": {
                "average": 59.242314914315166
            }
        },
        {
            "timestamp": "2023-05-10T17:22:00+09:00",
            "quality": "GOOD",
            "value": {
                "average": 72.50824343031682
            }
        },
        {
            "timestamp": "2023-05-10T17:23:00+09:00",
            "quality": "GOOD",
            "value": {
                "average": 25.797605697193145
            }
        },
        {
            "timestamp": "2023-05-10T17:24:00+09:00",
            "quality": "GOOD",
            "value": {
                "average": 18.057210359865792
            }
        },
        {
            "timestamp": "2023-05-10T17:25:00+09:00",
            "quality": "GOOD",

(以下略)

Grafana で確認する

コマンド結果と同じように、集計されたデータは Grafana でも確認することができます。
Grafana のパネル編集画面で Query typeGet property value aggregates に指定することで、プロパティエイリアス、集計種類、時間間隔を指定できるようになります。

これで先程の AWS CLI で取得したデータと同じものをグラフにプロットすることができます。

01-grafana-data

AWS CLI での結果と同じように、17:21 のデータが 59.2 となっていますね。またプロットされている間隔も 1 分間隔になっています。

02-1minute

Resolution の選択肢には「15分」が無いので、Grafana の SiteWise プラグインは今回のアップデートにはまだ追随していないようです。(新規にダッシュボードを作っても変わりませんでした)

03-grafana-resolution

明示的な記載は見つけられませんでしたが、機能的に同じものなので Grafana の SiteWise プラグインの中で GetAssetPropertyAggregates API が使われているものと思われます。

OSS の Grafana や Grafana Labs で利用できる AWS IoT SiteWise のプラグインのソースを確認すると Go の SDK を使って GetAssetPropertyAggregates() が呼ばれている箇所がありましたが、やはりコード中には「15分」の記載はありませんでした。(「1分」「1時間」「1日」の記載はありました。)

余談:OSS の Grafana の Sitewise プラグインは最新バージョンを使おう

今回の検証では Amazon Managed Grafana と OSS の Grafana の Sitewise プラグインを Docker 環境で試していました。Managed Grafana は問題なかったのですが、OSS の方は検証当時の最新バージョン「1.8.1」のプラグインを使うと下記のクエリ項目にある 「Property Alias」 を使ったクエリがエラーになり、データを取得することができませんでした。

04-fail-property-alias-2

その後、バージョン 1.9.0 のリリースにて Property Alias によるクエリがサポートされました。新しいバージョンではエラーが出ることなく正常にデータを取得できます。

05-ok-property-alias-2

もし、OSS の Grafaha を使っていて AWS IoT SiteWise の可視化を行っている方がいれば、ぜひプラグインのバージョンアップを試してもらえればと思います。

アセットプロパティのメトリクスとの違い

AWS IoT SiteWise では、収集したデータのプロパティ定義(アセットプロパティ)に「メトリクス」というものがあります。メトリクスは時間あたりのデータの平均など集計関数を使って収集データの統計情報を計算できます。

例えば、温度データから時間あたりの平均値をプロパティとして扱うことができます。メトリクスはあくまでもアセットプロパティの一つなので、ニアリアルタイムに集計されたデータをアセットデータとして取り扱うものになります。

Granana で可視化するという観点では、どちらも同様に利用することができますが、GetAssetPropertyAggregates API では期間を指定できるので、過去のデータも集計して取得することができます。

最後に

この API を初めて見た時、アセットプロパティの一つであるメトリクスとの違いがピンと来なかったのですが、今後使う時はうまく使い分けていければと思いました、

以上です。