この例では、Cepheus-CEP による基本的なイベント処理を示します。

以下の状況を考えてみましょう :

  • 複数の部屋にまたがる NGSI 対応の温度センサのセット
  • フロアのセットの上の複数の部屋

各フロアの平均温度(過去10分間)を取得したい(1分ごとに更新)。

アーキテクチャ

NGSI センサが、更新された温度を updateContext リクエストを使用して CEP に直接送信する、非常に簡単な構成から始めます。NGSI センサリクエストは、単純なスクリプトによってシミュレートされます。

example1

この例に関係するコンポーネントは次のとおりです :

example1

灰色の部分はリファレンス・アーキテクチャの一部であり、この例では使用しません。

セットアップ

最初に、次のコンテキスト・エンティティとして値を出力するように、NGSI 互換センサを設定する必要があります :

 {
     "id": "Room31", // Room 1 on floor 3 (could be anything else)
     "type":"Room",  // all sensors must use the same "Room" type
     "attributes": [
        { "name":"temperature", "type":"double", "value":"21" }, // this is the value of the sensors
        { "name":"floor", "type":"string", "value":"3" } // the room is on the third foor
     ]
 }

これらの NGSI アップデートを受け入れ、フロアに基づいたコンテキスト・エンティティの更新をトリガするように CEP を設定することができます :

{
    "id": "Floor1", // uniquely identifies a floor (coud be anything else)
    "type":"Floor", // all floor must use the same "Floor" type
    "attributes": [
        { "name":"temperature", "type":"double", "value":"23.3" }, // this will be the average temperature of the floor
    ]
}

以前のモデルに基づいて温度を平均化する EPL ルールは次のとおりです :

INSERT INTO Floor
SELECT floor as id, avg(temperature) as temperature
FROM Room.win:time(10 minutes)
GROUP BY floor
OUTPUT LAST EVERY 1 min

このルールの構文の詳細については、Esper EPL のマニュアルを参照してください。フロアの "id" としてルームの "floor" 属性を使用しています。平均値は、室温での avg() メソッドによって計算され、フロアの温度属性として返されます。結果をフロアごとにグループ化し、最初の分を待ってから毎分出力をトリガーします。

CEPの設定

Cepheus-CEP の設定フォーマットに変換されているので、入力として室温を受け入れるための以下の "in" セクションがあります :

"in": [
    {
        "id":"Room*",      # Pattern is used to subscribe to provider to all Room1, Room2, ..., RoomN
        "type":"Room",     # The type to subscribe
        "isPattern":true,  # Pattern match the id
        "providers":[ "http://localhost:8081" ],  # The URL of the source of the input
        "attributes":[
            { "name":"temperature", "type":"double" },
            { "name":"floor", "type":"string" }
        ]
    }
]

"out" セクションは、フロアの NGSI コンテキスト・エンティティにも似ています :

"out":[
    {
        "id":"Floor1",
        "type":"Floor",
        "attributes":[
            { "name":"temperature", "type":"double" }
        ]
    }
]

config.json は、完全なセットのセットアップを持っています。

この設定では、平均時間がログにすぐに表示されるように、出力時間を10秒に短縮しました。

セットアップのテスト

run.sh ファイルを端末で実行し、Cepheus CEP のログをチェックすることで、CEPに送信された部屋の温度と CEP がイベントに反応することを確認できます。

最初の端末で、Cepheus-CEP を起動します :

cd cepheus-cep
mvn spring-boot:run

デフォルト設定では、マシン上の port :8080 で起動する必要があります。

今度は別のターミナルで、run.sh スクリプトを起動します :

cd doc/examples/1_RoomsAndFloors
sh run.sh

スクリプトは最初に config.json ファイルを Cepheus-CEP に送信し、温度の更新を送信します。

CEP を開始した端末に戻ります。"EventIn" が記録されていると温度が表示されます。

数秒後、"EventOut" ログに各フロアの平均温度をトリガする CEP が表示されます。

次のステップ

複合イベント処理の詳細については、次の例を参照してください。