Comet

最小モード (STH-Comet のみ)

Comet を介して時系列コンテキスト・データを MongoDB に永続化します。

Comet の健全性チェック

Comet が起動したら、次のコマンドでステータスを確認できます:

リクエスト:

ngsi version --host comet.local

レスポンス:

{"version":"2.11.0"}

コンテキストの変更をサブスクライブ

サブスクリプションを作成して、Comet にコンテキストの変更を通知し、それを MongoDB に保存します:

リクエスト:

ngsi create \
  --host "orion.local" \
  --service openiot \
  --path / \
  subscription \
  --description "Notify Comet of all context changes" \
  --idPattern ".*" \
  --uri "http://comet:8666/notify" \
  --attrsFormat "legacy"

レスポンス:

618ba41e0e94f32bac78451d

コンテキスト・データの作成

次のスクリプトを実行して、コンテキスト・データを生成します:

#!/bin/bash
set -eu
for i in {0..9}
do
  echo $i
  ngsi upsert \
    --host orion.local \
    --service openiot \
    --path / \
    entity \
    --keyValues \
    --data "{\"id\":\"device001\", \"type\":\"device\", \"temperature\":${RANDOM}}"
  sleep 1
done

サブスクリプションの一覧表示

次のスクリプトを実行して、サブスクリプションを一覧表示します:

リクエスト:

ngsi list \
  --host "orion.local" \
  --service openiot \
  --path / \
  subscriptions \
  --pretty

レスポンス:

[
  {
    "id": "618ba41e0e94f32bac78451d",
    "subject": {
      "entities": [
        {
          "idPattern": ".*"
        }
      ],
      "condition": {}
    },
    "notification": {
      "timesSent": 10,
      "lastNotification": "2021-11-10T10:51:25.000Z",
      "lastSuccess": "2021-11-10T10:51:25.000Z",
      "lastSuccessCode": 200,
      "onlyChangedAttrs": false,
      "http": {
        "url": "http://comet:8666/notify"
      },
      "attrsFormat": "legacy"
    },
    "status": "active"
  }
]

Raw データの取得

最後のエントリ数でフィルタリングして、コンテキスト・エンティティ属性の短期履歴を取得します:

リクエスト:

ngsi hget \
  --host comet.local \
  --service openiot \
  --path / \
  attr \
  --lastN 3 \
  --type device \
  --id device001 \
  --attr temperature \
  --pretty

レスポンス:

{
  "type": "StructuredValue",
  "value": [
    {
      "recvTime": "2021-11-10T10:51:23.552Z",
      "attrType": "Number",
      "attrValue": 13021
    },
    {
      "recvTime": "2021-11-10T10:51:24.595Z",
      "attrType": "Number",
      "attrValue": 22143
    },
    {
      "recvTime": "2021-11-10T10:51:25.636Z",
      "attrType": "Number",
      "attrValue": 21341
    }
  ]
}

集計方法と解像度による集計データの取得

aggrMethod、aggrPeriod でフィルタリングして、コンテキスト・エンティティ属性の値の合計を一覧表示します:

リクエスト:

ngsi hget \
  --host comet.local \
  --service openiot \
  --path / \
  attr \
  --aggrMethod sum \
  --aggrPeriod day \
  --type device \
  --id device001 \
  --attr temperature \
  --pretty

レスポンス:

{
  "type": "StructuredValue",
  "value": [
    {
      "_id": {
        "attrName": "temperature",
        "origin": "2021-11-01T00:00:00.000Z",
        "resolution": "day"
      },
      "points": [
        {
          "offset": 10,
          "samples": 10,
          "sum": 170416
        }
      ]
    }
  ]
}

こちら の例を参照ください。

フォーマル・モード (Cygnus + STH-Comet)

Cygnus を介して時系列コンテキスト・データを MongoDB に永続化します。

Cygnus と comet の健全性チェック

Cygnus が起動したら、次のコマンドでステータスを確認できます:

リクエスト:

ngsi version --host cygnus.local --pretty

レスポンス:

{
  "success": "true",
  "version": "3.8.0.f62eff701c01df1f708e0c9484e48e7b9bd9b1ed"
}

Comet が起動したら、次のコマンドでステータスを確認できます:

リクエスト:

ngsi version --host comet.local

レスポンス:

{"version":"2.8.0-next"}

コンテキストの変更をサブスクライブ

Cygnus にコンテキストの変更を通知するサブスクリプションを作成し、それを MongoDB に保存します:

リクエスト:

ngsi create \
  --host orion.local \
  --service openiot \
  --path / \
  subscription \
  --description "Notify Cygnus of all context changes and store it into MongoDB" \
  --idPattern ".*" \
  --uri "http://cygnus:5051/notify"

レスポンス:

618bb2ba926e5a749721fc6b

コンテキスト・データの作成

次のスクリプトを実行して、コンテキスト・データを生成します:

#!/bin/bash
set -eu
for i in {0..9}
do
  echo $i
  ngsi upsert \
    --host orion.local \
    --service openiot \
    --path / \
    entity \
    --keyValues \
    --data "{\"id\":\"device001\", \"type\":\"device\", \"temperature\":${RANDOM}}"
  sleep 1
done

サブスクリプションの一覧表示

次のスクリプトを実行して、サブスクリプションを一覧表示します:

リクエスト:

ngsi list \
  --host "orion.local" \
  --service openiot \
  --path / \
  subscriptions \
  --pretty

レスポンス:

[
  {
    "id": "618bb2ba926e5a749721fc6b",
    "subject": {
      "entities": [
        {
          "idPattern": ".*"
        }
      ],
      "condition": {}
    },
    "notification": {
      "timesSent": 10,
      "lastNotification": "2021-11-10T11:55:42.000Z",
      "lastSuccess": "2021-11-10T11:55:42.000Z",
      "lastSuccessCode": 200,
      "onlyChangedAttrs": false,
      "http": {
        "url": "http://cygnus:5051/notify"
      },
      "attrsFormat": "normalized"
    },
    "status": "active"
  }
]

Raw データの取得

最後のエントリ数でフィルタリングして、コンテキスト・エンティティ属性の短期履歴を取得します:

リクエスト:

ngsi hget \
  --host comet.local \
  --service openiot \
  --path / \
  attr \
  --lastN 3 \
  --type device \
  --id device001 \
  --attr temperature \
  --pretty

レスポンス:

{
  "type": "StructuredValue",
  "value": [
    {
      "attrType": "Number",
      "attrValue": 3876,
      "recvTime": "2021-11-10T11:55:40.651Z"
    },
    {
      "attrType": "Number",
      "attrValue": 1629,
      "recvTime": "2021-11-10T11:55:41.690Z"
    },
    {
      "attrType": "Number",
      "attrValue": 28278,
      "recvTime": "2021-11-10T11:55:42.741Z"
    }
  ]
}

集計方法と解像度による集計データの取得

aggrMethod、aggrPeriod でフィルタリングして、コンテキスト・エンティティ属性の値の合計を一覧表示します:

リクエスト:

ngsi hget \
  --host comet.local \
  --service openiot \
  --path / \
  attr \
  --aggrMethod sum \
  --aggrPeriod day \
  --type device \
  --id device001 \
  --attr temperature \
  --pretty

レスポンス:

{
  "type": "StructuredValue",
  "value": [
    {
      "_id": {
        "attrName": "temperature",
        "origin": "2021-11-01T00:00:00.000Z",
        "resolution": "day"
      },
      "points": [
        {
          "offset": 10,
          "samples": 10,
          "sum": 192993
        }
      ]
    }
  ]
}

こちら の例を参照ください。

関連情報