JSON 設定

設定は、CEP エンジン( EPL 文のセット)の動作の完全な記述と、NGSI コンテキスト・エンティティと CEP イベントとの間のマッピングを含む単純な JSON オブジェクトです。

次に例を示します:

{
  "host":"http://localhost:8080",
  "in":[
    {
      "id":"Room.*",
      "type":"Room",
      "isPattern": true,
      "attributes":[
        {
          "name":"temperature", "type":"double",
          "metadata": [
            { "name":"unit", "type":"string" }
          ]
        },
        { "name":"floor", "type":"string" }
      ]
      "providers":[
        { 
          "url":"http://"http://localhost:8081",
          "serviceName": "tenant",
          "servicePath": "test/example",
        }
      ]
    }
  ],
  "out":[
    {
      "id":"FloorX",
      "type":"Floor",
      "attributes":[
        {
          "name":"temperature", "type":"double",
          "metadata": [
            { "name":"unit", "type":"string" }
          ]
        }
      ],
      "brokers":[
        {
          "url":"http://orion.fiware.org:3000",
          "serviceName": "tenant",
          "servicePath": "test/example",
          "authToken": "OAUTH_TOKEN"
        }
      ]
    }
  ],
  "statements":[
    "INSERT INTO Floor SELECT floor as id, avg(temperature) as temperature, temperature_unit FROM Room.win:time(10 min) GROUP BY floor OUTPUT LAST EVERY 10 sec"
  ]
}

メイン・セクション

ホスト url

host url は Cepheus-CEPをコンタクトさせることができる HTTP アドレス(スキーム、ホストおよびポート)で定義しました。これは、コンテキスト・プロバイダをサブスクライブするために使用されます。次のセクションを参照してください。

着信イベント

この in 配列は、CEP がコンテキスト・プロバイダから入力として期待する着信イベント(NGSI コンテキスト・エンティティの更新)のリストを定義します。

各コンテキスト・エンティティは、次のように定義する必要があります :

  • id : コンテキスト・エンティティのID。isPatterntrue ならパターンを指定できます。必須
  • type : コンテキスト・エンティティのタイプ。必須
  • isPattern : id がパターンの場合。オプション。デフォルト : false
  • attributes : 一致するコンテキスト属性のリスト。必須。空にすることはできません
  • providers : このコンテキスト・エンティティにサブスクライブするコンテキスト・プロバイダへのURLのリスト

各コンテキスト属性は、次のように定義されます :

  • name : 属性の名前。必須
  • type : 属性のタイプ。必須。今のところ。シンプルなタイプのみサポートしています : string, double, float, int, bool
  • metadata : コンテキスト・メタデータ属性のリスト。オプション
  • jsonpath : "複雑な"オブジェクト内の値にアクセスするための jsonpath・オプション

各コンテキスト・メタデータは、次のように定義されます :

  • name : メタデータの名前。必須
  • type : メタデータのタイプ。必須。今のところシンプルなタイプのみサポートしています : string, double, float, int, bool
  • jsonpath : "複雑な"オブジェクト内の値にアクセスするための jsonpath。オプション

各プロバイダは次のように定義されます :

  • url : プロバイダへのURL。必須
  • serviceName : Fiware-Service HTTP ヘッダの値。オプション
  • servicePath : Fiware-ServicePath HTTP ヘッダの値。オプション

発信イベント

out 配列は、コンテキスト・エンティティに変換された発信イベントのリストを定義します。

各コンテキスト・エンティティは、次のように定義する必要があります :

  • id : EPL ステートメントが定義していない場合は、コンテキスト・エンティティにデフォルトで使用されるID、必須
  • type : コンテキスト・エンティティのタイプ、必須
  • isPattern : idがパターンの場合、オプション、デフォルト : false
  • attributes : 一致するコンテキスト属性のリスト。必須。空にすることはできません
  • brokers : 通知するブローカのリスト

各コンテキスト属性は、次のように定義されます :

  • name : 属性の名前。必須
  • type : 属性のタイプ。必須。今のところシンプルなタイプのみサポートしています : string, double, float, int, bool
  • metadata : 属性Context Metadataのリスト。オプション

各コンテキスト・メタデータは、次のように定義されます :

  • name : メタデータの名前。必須。
  • type : メタデータのタイプ。必須。今のところシンプルなタイプのみサポートしています : string, double, float, int, bool

各ブローカは次のように定義されます :

  • url : ブローカへの URL、必須
  • serviceName : Fiware-Service HTTP ヘッダの値(Orion Broker で必要)。オプション
  • servicePath : Fiware-ServicePath HTTP ヘッダの値(Orion Broker で必要)。オプション
  • authToken : X-Auth-Token HTTP ヘッダの値(PEP Proxy で必要)。オプション

ステートメント

statements 配列は、 以前に定義されたイベントと対話する Esper EPL ステートメント のリストを定義します。

特別なフィールド

プロバイダ・フィールド

providers フィールドは、CEP が、着信イベントを受信する方法を制御します。

コンテキスト・プロバイダが CEP に通知する方法は2つあります :

  • コンテキスト・プロバイダにとって最も簡単な方法は、CEP に /updateContext リクエストを直接送信することです

update

  • 2番目の方法は、CEP を ブローカ のようなコンテキスト・プロバイダに登録させることです。イベントの providers フィールドで定義された各コンテキスト・プロバイダについて、CEP は、最初に /subscribeContext, を送信し、コンテキスト・プロバイダに /notifyContext リクエストで通知することを期待します。

update

ブローカ・フィールド

各発信イベントは複数のブローカを持つことができます。CEP は、すべての発信イベントについて各ブローカに ngsi10/updateContext リクエストを送信します。

update

jsonpath フィールド

コンテキスト属性またはコンテキスト・メタデータの jsonpath フィールドでは、JsonPath 式を使用して深くネストされた構造体から値を抽出することができます。

これは JSON 形式と XML 形式の両方で機能します。XML 形式にはいくつかの制限があります。

たとえば、/updateContext リクエストが次のペイロードを送信するとします :

    {
        "contextElements": [
            {
                "type": "Room",
                "isPattern": "false",
                "id": "Room1",
                "attributes": [
                    {
                        "name": "temperature",
                        "type": "double",
                        "value": { "raw": ["16.2", "°C", "Celcus"] }
                    },
                    {
                        "name": "floor",
                        "type": "string",
                        "value": "1"
                    }
                ]
            }
        ],
        "updateAction": "UPDATE"
    }

この 16.2 値は、JsonPath 式 $.raw[0] を使用してJSONオブジェクト { "raw": ["16.2", "°C", "Celcus"] } から抽出できます。

温度値を CEP に公開してこのペイロードを処理する設定例を次に示します :

    {
        "host":"http://localhost:8080",
        "in":[
            {
                "id":"Room1",
                "type":"Room",
                "attributes":[
                    { "name":"temperature", "type":"double", "jsonpath":"$.raw[0]" },
                    { "name":"floor", "type":"string" }
                ]
            }
        ],
        "out":[
            {
                "id":"Floor1",
                "type":"Floor",
                "attributes":[
                    { "name":"temperature", "type":"double" }
                ]
            }
        ],
        "statements":[
            "INSERT INTO Floor SELECT floor as id, avg(temperature) as temperature FROM Room.win:time(10 min) GROUP BY floor OUTPUT LAST EVERY 10 sec"
        ]
    }