この例では、Cepheus-CEP による基本的なイベント処理を示します。
以下の状況を考えてみましょう :
- 複数の部屋にまたがる NGSI 対応の温度センサのセット
- フロアのセットの上の複数の部屋
各フロアの平均温度(過去10分間)を取得したい(1分ごとに更新)。
アーキテクチャ¶
NGSI センサが、更新された温度を updateContext
リクエストを使用して CEP に直接送信する、非常に簡単な構成から始めます。NGSI センサリクエストは、単純なスクリプトによってシミュレートされます。
この例に関係するコンポーネントは次のとおりです :
灰色の部分はリファレンス・アーキテクチャの一部であり、この例では使用しません。
セットアップ¶
最初に、次のコンテキスト・エンティティとして値を出力するように、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 が表示されます。
次のステップ¶
複合イベント処理の詳細については、次の例を参照してください。