はじめに

概要

Things Cloud のリアルタイムイベント処理を使って、あなたのIoTソリューションに独自のロジックを追加できます。ロジックはデータ解析ロジック以外でも実行することができます。新しいロジックを定義するには、イベント言語を使います。 この言語によって、入力データを分析できます。強力なパターン、ウィンドウベースのクエリ言語を使うことができます。 この言語により、データの生成、更新、削除をリアルタイムに行うことができます。

リアルタイム解析の典型的なユースケースには以下のようなものがあります。

  • 遠隔操作:温度が40℃を超えたら、デバイスの電源を切る
  • 値評価:負のメーター値、または前回値より低いメーター値を捨てる
  • 派生データ:1日,1自動販売機での売上高を計算する
  • 集計:1日,1顧客での自動販売機の売上総和を求める
  • 通知:あなたのマシンのいずれかの電源が落ちていたらメールを送ってほしい
  • 圧縮:車全体は5分間隔で場所を更新(でも画面で見ている車はリアルタイムに送信)

続く章ではイベント言語がどのように利用できるか、どうすれば独自の解析やサーバーサイド業務ロジック、自動化を記述できるのか基本的な内容を紹介しています。

イベントストリーム

イベント言語では、データはストリームを流れます。ストリームにイベントを生成したり、ストリームに生成されたイベントを監視することができます。

定義済みのストリーム

Things Cloud APIで使用される定義済みストリームがいくつかあります。各APIコールが発生した際、Things Cloud はそれぞれの入力ストリームに対して新しいイベントを自動生成します。例えば、REST APIでメジャーメントが生成された場合、MeasurementCreatedストリームに新しいイベントが生成されます。Things Cloud のバックエンドにアクセスするため、各出力ストリームにイベントを設定することができ、それにより Things Cloud は自動的にDBクエリやメール送信などに必要なAPIコールを実行します。例えば、データベースに新規アラームを生成するためには、CreateAlarmストリームに新規イベントを作成します。

API 入力ストリーム 出力ストリーム 説明
Inventory ManagedObjectCreated
ManagedObjectUpdated
ManagedObjectDeleted
CreateManagedObject
UpdateManagedObject
DeleteManagedObject
このイベントグループは1つのマネージドオブジェクトの生成、変更、削除を表します。
Events EventCreated
EventDeleted
CreateEvent
DeleteEvent
このイベントグループは1つのイベントの生成、削除を表します。
Measurements MeasurementCreated
MeasurementDeleted
CreateMeasurement
DeleteMeasurement
このイベントグループは1つのメジャーメントの生成、削除を表します。
Device control OperationCreated
OperationUpdated
CreateOperation
UpdateOperation
このイベントグループは1つのオペレーションの生成、変更を表します。
Alarms AlarmCreated
AlarmUpdated
CreateAlarm
UpdateAlarm
このイベントグループは一つのアラームの生成、変更を表します。
Emails (適用なし) SendEmail
SendDashboard
このイベントグループは、メール送信を表します。
SMS (適用なし) SendSms このイベントグループは、SMS送信を表します(SMS送信は Things Cloud では未サポートです)。
Text-to-speech (適用なし) SendSpeech このイベントグループは、電話の初期化を表します。(SendSpeech は Things Cloud では未サポートです)
HTTP ResponseReceived SendReqeust このイベントグループは、外部サービスへのHTTPリクエストの送信を表します。
Export (適用なし) SendExport このイベントグループは、エクスポートされたデータを含む電子メールの生成を表します。

それぞれのストリームでのイベントのデータ構成は、データモデルを確認してください。

ストリームにイベントを生成する

キーワード insert into 、select によってイベント生成ができます。まず"insert into"に続けてイベントを生成するストリーム名を指定する必要があります。そして"select"節をイベントのパラメータ指定に使用します。パラメータは次の構文で指定します:<値> as <パラメータ> コンマで区切ることで複数のパラメータを指定できます。パラメータ順序は関係ありません。ストリームによっては"select"節に必須指定パラメータがあることに注意してください。

ストリームのイベントを待ち受ける

ストリーム内の共通的なイベント生成トリガーは、他のストリーム内のイベント発生です。したがって、他のストリームを監視することでイベント待ち受けができます。キーワード"from"に続け、ストリーム名を指定し、(オプション)イベントを参照するための変数名を文の後ろに続けます。

条件

キーワード"where"で条件を追加すれば、入ってくるすべてのイベントに対してイベント生成をせず、指定条件のみに絞ることができます。whereキーワードに続けて真か偽の結果を持つ表現を記述します。and や or で複数の表現を記述することもできます。

例として文を作ってみましょう。ストリームを監視し、所定の条件が適用される場合、別のストリームに新しいイベントを生成します。 例として、温度メジャーメントに対し、アラームを生成したいと思います。

  1. アラームを生成するため、CreateAlarm に対し insert into します。
  2. select 節にイベントに必要なすべてのパラメータを指定します。
  3. MeasurementCreated ストリームにイベントが発生した場合にアラームを生成するため、from に MeasurementCreated ストリームを指定します。
  4. アラームを生成するのを、MeasurementCreated に対する特定の条件に限定するため、where節で指定します。

でき上がった文はこのようになるでしょう。

insert into CreateAlarm
select
  measurementEvent.measurement.time as time,
  measurementEvent.measurement.source.value as source,
  "c8y_TemperatureAlarm" as type,
  "Temperature measurement was created" as text,
  "ACTIVE" as status,
  "CRITICAL" as severity
from MeasurementCreated measurementEvent
where measurementEvent.measurement.type = "c8y_TemperatureMeasurement";