アプリケーションの開発
EPLアプリは、モニタ(*.mon)ファイルです。EPLアプリは、次の2つの方法で開発できます。
- Things Cloudのアプリケーションメニューから利用可能なストリーミング分析アプリケーションを使用して、Things Cloud内でEPLアプリを開発できます。
- または、ローカルマシンにApamaをインストールしてから、Software AG Designerで、EPLアプリ(モニタファイルとして)を開発できます。この場合、別の環境での開発となります。
コンセプトガイドのイベント処理言語(EPL)の使用もご覧ください。
ストリーミング分析アプリケーションを使用したアプリケーションの開発
ストリーミング分析アプリケーションは、新規または既存のEPLアプリ(*.mon ファイル)をインタラクティブに編集したり、EPLアプリをインポートおよび有効化(デプロイ)したりするためのインターフェースを提供します。
EPLアプリのページを利用するテナントのユーザーは、CEPマネージャーである必要があります。ユーザーガイドの管理 > 権限の管理をご覧ください。
ステップ 1 - ストリーミング分析アプリケーションの呼び出し
アプリケーションメニューを開き、ストリーミング分析のアイコンをクリックします。そして、EPLアプリページに移動します。
EPLアプリページへ移動すると、EPLアプリマネージャが最初に表示され、既存のEPLアプリが一覧表示されます。各アプリケーションはカードとして表示されます。ここでは新しいEPLアプリを追加したり、既存のEPLアプリを管理できます。
アプリケーション用に表示される各カードの上部には、アプリケーションを編集、エクスポート、削除できるアクションメニューがあります。
このページでは次のことができます:
-
既存のEPLアプリの編集。アクションメニューから編集コマンドを使用するか、アプリケーションに表示されるカードをクリックします。
-
新しいEPLアプリの作成。下記参照。
-
EPLアプリのインポート。Things Cloudの外部でアプリケーションを開発する場合(Software AG Designerを使用する場合など)、上部のメニューバーでEPLのインポートをクリックして、Apamaモニタ(*.mon)ファイルをストリーミング分析アプリケーションにアプリとしてアップロードします。
-
EPLアプリをエクスポートします。アクションメニューから エクスポート コマンドを使用して、アプリを *.mon ファイルとしてダウンロードします。
-
既存のEPLアプリのデプロイ。アプリケーションが表示されるカードで、モードを無効から有効に変更します。詳細については、アプリケーションのデプロイをご覧ください。
アプリケーションを有効化すると、構文エラーがすぐに報告されます。エラー状態はカードに表示されるため、アプリケーションが正常に機能しているかどうかの確認ができます。エラーをクリックすると、問題の情報が表示されます。構文エラーがある場合、アプリケーションを有効化することはできません。エラーは、修正されたアプリケーションを再度有効化するまで、カードに表示されます。
-
すべてのEPLアプリのリロード。上部のメニューバーのリロードをクリックして表示を更新すると、その間に発生したエラーを含め、ページの読み込み後に他のユーザーが行った変更が表示されます。
ステップ 2 - EPLアプリの作成
上部のメニューバーで新規EPLアプリをクリックします。アプリケーションに固有の名前を付けます。新規アプリケーション用に作成されるカード上に表示する説明を入力することもできます。
EPLエディターが次に表示されます。新規アプリケーションのEPLコードには、Things Cloud での作業に必要な典型的な基本イベント定義とユーティリティが既に含まれています。これらは、アプリケーションの要件に応じて調整できます。詳細については、ドキュメントとサンプルを参照してください。
始めるにあたり、いくつかのサンプルが利用可能です。それらを表示するには、エディターの右側に表示されるサンプルをクリックします。サンプルをクリックすると、その内容のプレビューが表示されます。サンプルコードの一部を選択し、標準のキーの組み合わせ(Ctrl+C と Ctrl+V)を使用して、独自のコードにコピーできます。また、コマンドボタンを使用して、コード全体をクリップボードにコピーし、独自のコードの適切な位置に挿入したり、既存のすべてのコードをサンプルコードに置き換えたりすることもできます。
トップメニューバーのボタンを使用して、現在のセッションの最新の変更を 元に戻る/やり直し することができ、変更を保存できます。
EPLエディターでモードを無効から有効(またはその逆)に変更することもできます。繰り返しますが、EPLコードにエラーがある場合、アプリケーションを有効化することはできません。エラーはコード内で強調表示されます。
EPLアプリを作成(またはインポート)する際には、次の点に注意してください。EPLアプリがアクティブになると、そのアプリケーションを作成したユーザーには許可されていない一部のEPLオペレーションが実行される可能性があります。たとえば、EPLの注入と分析モデルの作成では、「CEP管理」の管理者権限しかない場合があります。ただし、アプリケーションがアクティブになると、注入されたEPLがアラームを作成またはクリアしたり、分析モデルがオペレーションを作成したりする可能性もあります。
上部のメニューバーの×をクリックしてEPLエディターを終了し、EPLアプリ一覧に戻ります。
ステップ 3 - EPLアプリの検証
アプリケーションを有効にすると、実行中の結果を確認できます。これには、メジャーメントの送信、データの受信、アラームの作成、Apama-ctrlマイクロサービスへのロギングが含まれます。Apama-ctrlマイクロサービスのログファイルを確認するには、ユーザーガイドの管理 > マイクロサービスの管理と監視をご覧ください。
アプリケーションのデプロイもご覧ください。
Software AG Designerを使用したアプリケーションの開発
注意: Software AG Designer は Software AG 社の製品であり、サポート対象外となります。予めご了承ください。
Software AG Designerは完全な開発環境を提供し、複雑なEPLアプリを作成する場合に最適なツールです。EPLアプリ(モニターファイル)の準備ができたら、Things Cloudにインポートする必要があります。
ステップ 1 - Apamaをインストール
Apamaのライセンスを取得している場合は、Software AG Installerを使用してインストールします。
制限された機能といくつかの制約内で実行されるApamaのフリーミアムバージョンを使用することもできます。これを使用する場合は、https://www.apamacommunity.com/downloads/ からApama Community Editionをダウンロードしてインストールします。
ライセンスバージョンとフリーミアムバージョンの両方に、Software AG Designerが含まれています。
ステップ 2 - プロジェクトの作成
インストールしたら、Software AG DesignerでApamaプロジェクトを作成し、Things Cloud接続性を有効にします。Apamaプロジェクトの作成方法については、Apamaドキュメント内の Creating Apama Projects をご覧ください。
ステップ 3 - プロジェクトにApamaバンドルを追加
次のApamaバンドルを、新しく作成されたApamaプロジェクトに追加します。これらは、Things Cloudがアプリケーションを有効化できるようにするために必要です。プロジェクトにバンドルを追加する方法については、Apamaドキュメントの Adding bundles to projects をご覧ください。
- Cumulocity IoT > Event Definitions for Cumulocity
Things Cloudとのデータの送受信に必要なイベントAPIを提供します。 - Cumulocity IoT > Utilities for Cumulocity
Things Cloudから受信したデータを操作するためのヘルパーユーティリティ機能を提供します。 - Any Extractor
any
型から値を抽出するためのサポートを提供します。 - Time Format
Time Formatプラグインのすべてのメソッドにアクセスするために必要です。時間のフォーマットとパースに役立ちます。 - HTTP Client Generic Events
HTTPクライアント接続性プラグインによって使用される定義済みの汎用イベントをEPLアプリに公開します。 - Automatic onApplicationInitialized
起動時にすべての接続性プラグインがすぐに起動します。 - HTTP Client > JSON with generic request/response event definitions
EPLアプリがHTTPの呼び出しを行うことを許可します。 - Cumulocity IoT > Cumulocity Client
Things CloudクライアントをEPLアプリに公開します。
EPLアプリで許可されるのは上記のバンドルのみです。他のバンドルを追加しないように注意してください。追加すると、Things Cloudで有効にしたときにアプリケーションが機能しない場合があります。
ステップ 4 - モニターファイルの作成
新規のApama モニターファイルを作成するにはApamaドキュメントの Creating new monitor files for EPL applications をご覧ください。
新しく作成したモニタファイルをEPLアプリとしてThings Cloudにインポートして有効化する前に、このモニタファイルがSoftware AG Designer内で想定どおりに機能するかどうかを検証します。
詳細についてはApamaドキュメントの The Cumulocity IoT Transport Connectivity Plug-in をご覧ください。
ステップ 5 - モニタファイルの実行と検証
プロジェクトをローカルで実行する場合、プロジェクトの構成設定でThings Cloud認証情報を提供する必要があります。Things Cloudクライアントにある CumulocityIoT.properties ファイルで認証情報を構成設定します。例えば:
CUMULOCITY_USERNAME=user@example.com
CUMULOCITY_SERVER_URL=http://exampleTenant.je1.thingscloud.ntt.com
CUMULOCITY_PASSWORD=examplePassword
CUMULOCITY_APPKEY=apamaAppKey
CUMULOCITY_APPKEY
の値を得るためには、Things Cloudでアプリケーションの管理をする必要があります。上記の説明は、URLがテナントを識別しているテナントに接続していることを前提としていることを注記してください。そうでない場合(たとえば、IPアドレスで接続している場合)、CumulocityIoT.propertiesファイルで次を設定する必要があります:
CUMULOCITY_TENANT=my_custom_tenant
これで、Software AG DesignerでEPLの検証を進めることができます。
EPLアプリの準備がでたら、EPLアプリを単一の*.monファイルとしてインポートをするために、アプリケーションのデプロイをご覧になり、Things Cloudへのデプロイ方法を確認ください。
アプリケーションのデプロイ
以下をThings Cloudにデプロイできます。
- EPLアプリ。ストリーミング分析アプリケーションを使用してEPLアプリを単一の *.mon ファイルとしてデプロイできます。これは、EPLアプリをデプロイするための最も単純なメカニズムです。
Apama EPL Appsを使用してEPLアプリを単一の *.mon ファイルとしてデプロイする
EPLアプリ(つまり、*.mon file)がThings Cloudで有効化されると、*.monファイルには一意のパッケージ名が割り当てられます。これにより、複数のモジュールが有効化されたときの競合を防ぎます。このため、*.monファイルで package
ステートメントを指定しないでください。アプリケーションの異なる部分間でイベントを共有する必要がある場合は、単一の*.monファイルでイベント定義とそれを使用するモニターを作成します。
EPLアプリで利用できる制限されたユーティリティと基本イベントのセットがあります。このドキュメント執筆時点では、これらに Time Format および HTTP Client > JSON with generic request/response event definitions が含まれています。
EPLアプリがランタイムエラーを通知すると、アラームが発生します。ランタイムエラーには、検知されなかった異常、およびEPLアプリによる明確な警告・エラーのロギングが含まれます。一般的にApamaランタイムに関連する動作や状態の問題もアラームとして発生します。
ApamaランタイムおよびアクティブなEPLアプリの詳細な診断については、Apama-ctrlマイクロサービスのログで確認できます。ログファイルの詳細については、ユーザーガイドの管理 > マイクロサービスの管理と監視をご覧ください。ただし、Apamaログファイルを最大限に活用するには、Apamaにある程度精通している必要があります。
アプリをテストする
GitHub の Apama EPL アプリツールを使用して、EPL アプリのアップロードをスクリプト化し、CI/CD (継続的インテグレーションおよび継続的デリバリー) ユースケースに合わせて管理できます。このツールは、PySys テストフレームワークへの拡張機能も提供し、EPL アプリのテストを簡単に作成して自動的に実行できるようにします。
Apama EPL Apps Tools は、https://github.com/SoftwareAG/apama-eplapps-tools から入手できます。詳細については、GitHub のドキュメント を参照してください。
PySys の詳細については、Apama ドキュメントからアクセスできる Python の API リファレンス を参照してください。
サポートされるRESTサービス
EPLアプリはREST(Representational State Transfer)サービスをリッスンし、すべてのGET、POST、PUT、DELETEオペレーションをサポートするよう設計されています。さまざまなオペレーションに対するリクエストの例を次に示します。
これらのオペレーションを実行するには、「CEP管理」の読み取りおよび管理者権限が必要です。(ユーザーガイドの管理 > 権限の管理もご覧ください。).
すべてのオペレーションに対するリクエストヘッダー
各リクエストは、Things Cloudに対して認証される必要があります。
名前 | 説明 |
---|---|
Accept | “application/json” (これは必須パラメーターです) |
共通レスポンスコード
次の一般的なエラーレスポンスコードは、すべてのリクエストで予想されます。
コード | 説明 |
---|---|
401 | リクエストが認可されていません。 |
403 | リクエストが禁止されています。 |
特定のリクエストから期待できるその他のレスポンスコードを以下に示します。
共通フィールドの説明
レスポンスでは、オペレーションに応じて次の共通フィールドを使用できます。
フィールド | 説明 |
---|---|
contents | EPLファイルの全内容 |
description | ファイルの説明 |
eplPackageName | EPLファイルのパッケージ名。名前に特殊文字(スペースを含む)が含まれている場合、これらの文字はエスケープされて有効なEPL識別子になり、インジェクションエラーを回避します。 |
errors | ファイル内のすべてのコンパイルエラーのリスト(ある場合)と行番号およびテキスト |
id | ファイルの一意の識別子 |
name | EPLに付けられた名前 |
state | EPLがコリレーターに注入されて実行されているかどうか。これはactive またはinactive のいずれかになります。 |
warnings | ファイル内のすべてのコンパイル警告のリスト(ある場合)と行番号およびテキスト |
GET - 利用可能なすべてのEPLファイルを取得
エンドポイント: /service/cep/eplfiles
リクエストの例
GET /service/cep/eplfiles
レスポンス
コード | 説明 |
---|---|
200 | 正常に動作しました。以下の値の例もご覧ください。 |
400 | 不正なリクエストです。ヘッダの内容に予期しない値が含まれています。 |
レスポンスコード200の値の例:
{
"eplfiles":[
{
"description":"",
"eplPackageName": "eplfiles.Ordinal1",
"errors":[
],
"id":"39615",
"name":"Ordinal1",
"state":"active",
"warnings":[
]
}
]
}
GET - 利用可能なすべてのEPLファイルとその内容を取得
エンドポイント: /service/cep/eplfiles
リクエストパラメータ
名前 | 説明 |
---|---|
contents | ブール型。EPLファイルとその内容を取得します。これは任意のクエリパラメータです。 |
リクエストの例
GET /service/cep/eplfiles?contents=true
レスポンス
コード | 説明 |
---|---|
200 | 正常に動作しました。以下の値の例もご覧ください。 |
レスポンスコード200の値の例:
{
"eplfiles":[
{
"contents":"monitor M0 { action onload() { on wait(1.0) { log \"Hello\" at INFO; }}}",
"description":"",
"eplPackageName": "eplfiles.Ordinal1",
"errors":[
],
"id":"39615",
"name":"Ordinal1",
"state":"active",
"warnings":[
]
}
]
}
GET - 識別子でEPLファイルを取得
エンドポイント: /service/cep/eplfiles/{id}
リクエストパラメータ
名前 | 説明 |
---|---|
id | 取得するEPLファイルの識別子。これは必須パラメータです。 |
リクエストの例
GET /service/cep/eplfiles/{{id}}
レスポンス
コード | 説明 |
---|---|
200 | 正常に動作しました。以下の値の例もご覧ください。 |
404 | 識別子のファイルが見つかりません。このセクションの最後にあるレスポンスコードのサンプル値もご覧ください。 |
レスポンスコード200の値の例:
{
"contents":"monitor M0 { action onload() { on wait(1.0) { log \"Hello\" at INFO; }}}",
"description":"",
"eplPackageName": "eplfiles.Ordinal1",
"errors":[
],
"id":"39615",
"name":"Ordinal1",
"state":"active",
"warnings":[
]
}
POST - 新しいEPLアプリケーションを作成
エンドポイント: /service/cep/eplfiles
リクエストの例
POST /service/cep/eplfiles
リクエストボディーの例を次に示します。
{
"name": "Ordinal1",
"contents": "monitor M1 { action onload() { on wait(1.0) { log \"Hello\" at INFO; }}}",
"state": "active",
"description": ""
}
以下を注記してください:
name
はファイルのパッケージ(したがって、EPLファイルにpackage
ステートメントを含めることはできません)に使用され、すべてのEPLファイルで一意である必要があります。名前にプレフィクスが付き、特定の文字がエスケープされます。実際に使用されるパッケージ名は、便宜上eplPackageName
フィールドに返されます(これをマイクロサービスのログファイルで検索して、ログステートメントを見つけることができます)。- 安全にエスケープされた
contents
を提供するようにしてください。 description
はオプションで、空にすることができます。
レスポンス
コード | 説明 |
---|---|
201 | 正常に作成されました。/ 作成されましたが、ファイルにエラーがあります。/ 作成されましたが、ファイルに警告があります。以下の例もご覧ください。 |
405 | 入力に誤りがあります。 |
正常に作成された場合のレスポンスコード201の例:
{
"description":"",
"eplPackageName": "eplfiles.Ordinal1",
"errors":[
],
"id":"39615",
"name":"Ordinal1",
"state":"active",
"warnings":[
]
}
警告またはエラー付きで作成された場合のレスポンスコード201の例:
{
"description":"",
"eplPackageName": "eplfiles.Ordinal1",
"errors":[
{
"line":5,
"text":"assigning a float to an integer variable"
}
],
"id":"39651",
"name":"Ordinal1",
"state":"inactive",
"warnings":[
{
"line":10,
"text":"\"assert\" may become a reserved word in future versions of EPL"
}
]
}
PUT - EPLファイルを識別子で更新
エンドポイント: /service/cep/eplfiles/{id}
リクエストパラメータ
名前 | 説明 |
---|---|
id | 更新するEPLファイルの識別子。識別子はパスに含める必要があります。これは必須パラメータです。 |
リクエストの例
PUT /service/cep/eplfiles/{id}
リクエストボディーの例を次に示します。
{
"name": "Ordinal1",
"contents": "monitor M1 { action onload() { on wait(1.0) { log \"Hello\" at INFO; }}}",
"state": "active",
"description": ""
}
POSTリクエストに記載されている情報もご覧ください。
レスポンス
コード | 説明 |
---|---|
200 | 正常に更新されました。以下の値の例もご覧ください。 |
404 | 識別子のあるファイルが見つかりません。このセクションの最後にあるレスポンスコードのサンプル値もご覧ください。 |
エラーなしで正常に更新された場合のレスポンスコード200の値の例:
{
"description":"",
"eplPackageName": "eplfiles.Ordinal1",
"errors":[
],
"id":"39615",
"name":"Ordinal1",
"state":"active",
"warnings":[
]
}
エラーまたは警告で更新された場合のレスポンスコード200の値の例:
{
"description":"",
"eplPackageName": "eplfiles.Ordinal1",
"errors":[
{
"line":5,
"text":"assigning a float to an integer variable"
}
],
"id":"39651",
"name":"Ordinal1",
"state":"inactive",
"warnings":[
{
"line":10,
"text":"\"assert\" may become a reserved word in future versions of EPL"
}
]
}
DELETE - 識別子でEPLファイルを削除
エンドポイント: /service/cep/eplfiles/{id}
リクエストパラメータ
内容 | 説明 |
---|---|
id | 削除するEPLファイルの識別子。識別子はパスに含める必要があります。これは必須パラメータです。 |
リクエストの例
DELETE /service/cep/eplfiles/{{id}}
レスポンス
コード | 説明 |
---|---|
200 | 削除に成功しました。 |
404 | 識別子のあるファイルが見つかりません。このセクションの最後にあるレスポンス・コードのサンプル値もご覧ください。 |
レスポンスコード404の値の例
レスポンスコード404は、特定の識別子を持つファイルが見つからなかったことを示します。
{
"error":"Not Found",
"exception":"com.apama.in_c8y.FileNotFoundException",
"message":"File with id 39613 not found",
"path":"/eplfiles/39613",
"status":404,
"timestamp":"2020-01-17T12:21:42.457+0000"
}
error
はエラーメッセージです。exception
は、発生した例外を指定します。message
は、例外メッセージの説明です。path
はリクエストされたパスです。status
は、アプリケーションのステータスです。timestamp
はISO形式のタイムスタンプです。
イベントとチャネル
Apama EPLでは、他のThings Cloudエコシステムとのやり取りはイベントを介して行われます。Things Cloudデータにアクセスするための多くのイベント定義が提供されています。
定義済みのイベント型
さまざまなThings Cloud APIとやり取りをするために、いくつかの定義済みイベント型があります。イベントは、新しいメジャーメント、アラームやイベントが作成されると、Apamaアプリケーションに自動的に送信されます。Things Cloudバックエンドとやり取りをするために、イベントを作成して関連するチャネルに送信できます。Things Cloudは自動的に、メールやSMSなどの送信に必要なデータベースクエリを実行するか、APIコールを作成します。
EPL (ApamaDoc)のAPIリファレンスにある データモデル で各ストリームのイベントの構造を確認してください。
チャネルにイベントを送信する
イベントを送信するには、 new <type>
でイベントを作成し、その後に各フィールドを割り当てるか、またはすべてのフィールドを指定するコンストラクターを使用します。次に、send
ステートメントを使用して、Things Cloudにイベントを送信します。send
ステートメントにはチャネルが必要です。これはイベント型のSEND_CHANNEL
定数です。
イベントを監視する
チャネルでイベントを監視することにより、EPLをトリガーできます。monitor.subscribe("string name")
メソッドでチャネル接続できます。これは、モニターの起動時に実行するか、時々イベントを受信する程度でよければ、必要に応じて呼び出し、その後にmonitor.unsubscribe("string name")
を続けます。
on
ステートメントを使用してイベントを監視し、そして監視しているイベント型に続き、括弧を開いて閉じ、イベントを保持する変数にas <identifier>
を指定します。
デフォルトでは、リスナーは一度だけ起動します。すべてのイベントで繰り返し起動させるには、イベント型の前にall
キーワードを使用します。
フィルタ
フィルタを追加するには、リスナーのカッコの間に1つ以上のフィールドを指定します。最上位レベルのフィールドのみをフィルタできます。より複雑なフィルタリング、またはイベントのサブプロパティ(たとえば、ディクショナリー内)でのフィルタリングには、if
ステートメントを使用します。
標準のイベント型とチャネル
標準のThings Cloudイベントには、イベントを送受信するためのチャネルを含む定数があります。たとえば:
monitor.subscribe(Measurement.SUBSCRIBE_CHANNEL);
send msmnt to Measurement.SEND_CHANNEL;
イベント | 送信用チャネル | 受信用チャネル |
---|---|---|
Operation | Operation.SEND_CHANNEL | Operation.SUBSCRIBE_CHANNEL |
Measurement | Measurement.SEND_CHANNEL | Measurement.SUBSCRIBE_CHANNEL |
Event | Event.SEND_CHANNEL | Event.SUBSCRIBE_CHANNEL |
Alarm | Alarm.SEND_CHANNEL | Alarm.SUBSCRIBE_CHANNEL |
ManagedObject | ManagedObject.SEND_CHANNEL | ManagedObject.SUBSCRIBE_CHANNEL |
MeasurementFragment | MeasurementFragment.SEND_CHANNEL | MeasurementFragment.SUBSCRIBE_CHANNEL |
メジャーメントフラグメント
Measurement
および MeasurementFragment
イベントは常に公開されます。
EPL では、Measurement
イベントではなく MeasurementFragment
イベントの内容に一致するリスナーを生成できます。
例:
on all MeasurementFragment(type="c8y_SpeedMeasurement", valueFragment = "c8y_speed", valueSeries = "speedX", value > SPEED_LIMIT) as mf {
}
メジャーメントフラグメントもご覧ください。
通知の作成と更新を区別する
Things Cloud からの Alarm
、Event
、ManagedObject
、または Operation
イベントをリッスンする場合、作成操作と更新操作を区別することが必要な場合があります。これらのイベントタイプにはそれぞれ、 isCreate()
および isUpdate()
という名前のアクションがあり、作成と更新の区別に利用できます。
アラーム作成を監視する例:
on all Alarm() as alarm {
if alarm.isCreate() {
log "Alarm created: " + alarm.toString() at INFO;
}
// else it's an update
}
アラーム更新を監視する例:
on all Alarm() as alarm {
if alarm.isUpdate() {
log "Alarm updated: " + alarm.toString() at INFO;
}
// else it's a create
}
Things Cloud からのイベントの場合、isUpdate()
または isCreate()
のいずれかが常に true を返します。 どちらのアクションも、選択肢と読みやすさを考慮して提供されています。
さまざまなタイプのオブジェクトの例などの詳細については、Apama ドキュメントの Receiving update notifications を参照してください。
isCreate()
および isUpdate()
の詳細については、API Reference for EPL (ApamaDoc) も参照してください。
例
この例では、MeasurementFragment
APIを使用して新しいメジャーメントの値をリッスンします。受信したメジャーメントの値をフィルタ処理して、指定された最大速度を超える速度の値を検索し、制限に違反した場合はアラームを発生します。
MeasurementFragment.SUBSCRIBE_CHANNEL
チャネル接続します。- メジャーメントフラグメントをリッスンし、
type
(c8y_SpeedMeasurement
) でフィルタします。valueFragment
の値がc8y_speed
であり、valuesSeries
がspeedX
のみをフィルタ処理することを確認してください。また、value
がSPEED_LIMIT
より大きい場合は、value
でフィルタします。 - すべてのフィールドを指定するコンストラクターを使用してイベントを作成します。
- イベントを正しいチャネルに送信します。
Alarm.SEND_CHANNEL
結果として完成する *.monファイルは次のようになります:
using com.apama.cumulocity.Alarm;
using com.apama.cumulocity.MeasurementFragment;
monitor TriggerAlarmForSpeedBreach {
constant float SPEED_LIMIT := 30.0;
action onload() {
monitor.subscribe(MeasurementFragment.SUBSCRIBE_CHANNEL);
// Everytime a measurement fragment with the specific details of the match criteria is triggered then we should raise an alarm
on all MeasurementFragment(type="c8y_SpeedMeasurement", valueFragment = "c8y_speed", valueSeries = "speedX", value > SPEED_LIMIT) as mf {
send Alarm("", "c8y_SpeedAlarm", mf.source, currentTime,
"Speed limit breached", "ACTIVE", "CRITICAL", 1,
new dictionary<string,any>) to Alarm.SEND_CHANNEL;
}
}
}