6.6. ICE Core¶
アダプタやアプリケーションから収集したデータをフィルタ、加工してアダプタやアプリケーションに送信する主にエッジサーバで動作する基盤ソフトウェアです。
(以下旧互換向けの機能です)
6.6.1. モジュール¶
- JavaScriptで書かれたモジュール。トポロジ、インバウンドアダプタ、アウトバウンドアダプタ、プロセッサの4種類があります。
6.6.1.1. トポロジ¶
- Core内でデータがどこから入って、どう処理された、どこへ出ていくかを記述するモジュール。 書き方については”トポロジの書き方”で詳しく説明します。
6.6.1.2. インバウンドアダプタ¶
- データ発生源であるsourceを生成するモジュール。以下の名前で関数をexportsする必要があります。
- start: モジュールロード時に実行される関数
- stop: モジュールアンロード時に実行される関数
- source: このモジュールをsourceとして指定したトポロジのロード時に実行される関数。optionsが引数として渡ってくます。stream.Readableを実装したオブジェクトを返却する必要があります。
6.6.1.3. アウトバウンドアダプタ¶
- データ消費先であるsinkを生成するモジュール。以下の名前で関数をexportsする必要があります。
- start: モジュールロード時に実行される関数
- stop: モジュールアンロード時に実行される関数
- sink: このモジュールをsinkとして指定したトポロジのロード時に実行される関数。optionsが引数として渡ってくます。stream.Writableを実装したオブジェクトを返却する必要があります。
6.6.1.4. プロセッサ¶
- トポロジから呼び出されるモジュールで、データの変換を行う。以下の名前で関数をexportsする必要があります。
- process: このプロセッサをprocessとして指定したトポロジにデータが来たときに実行される関数。引数はデータで戻り値が新しいデータ。
6.6.2. ユーザモジュールのロード¶
- JavaScriptで書かれたユーザモジュールをロードする機能 モジュール配置ディレクトリに置かれた、拡張子が.jsであるファイルはCore起動時に自動的にロードされます。
6.6.2.1. ユーザモジュール配置ディレクトリ¶
- ユーザモジュール配置ディレクトリはモジュール種別ごとに別になっています。
- ${ICE_HOME}/user_modules/flows: トポロジ
- ${ICE_HOME}/user_modules/inbounds: インバウンドアダプタ
- ${ICE_HOME}/user_modules/outbounds: アウトバウンドアダプタ
- ${ICE_HOME}/user_modules/processors: プロセッサ
6.6.3. トポロジの書き方¶
- 以下の名前で関数をexportsする必要があります。
- start: トポロジロード時に実行される関数
- stop: トポロジアンロード時に実行される関数
- 以下の名前でオブジェクトをexportsする必要があります。
- topology: トポロジを表す。source、flow、sinkプロパティを持つ。
- source: プロパティとしてadapterでインバウンドアダプタのモジュールファイル名、optionsでsourceメソッド呼び出し時の引数オブジェクトを指定
- flow: 配列。各要素はプロパティとしてstreamで処理名、optionsで処理に渡される引数オブジェクトを指定。
- sink: プロパティとしてadapterでアウトバウンドアダプタのモジュールファイル名、optionsでsinkメソッド呼び出し時の引数オブジェクトを指定
- topology: トポロジを表す。source、flow、sinkプロパティを持つ。
6.6.3.1. トポロジの例¶
exports.start = function () {
}
exports.stop = function () {
}
exports.topology = {
source: {
adapter: 'CoAPAdapter.js',
options: {date_type: 'thermometer'}
},
flow: [
{
stream: 'filter',
options: {
f: (e) => {return e.payload.value > 30;}
}
}
],
sink: {
adapter: 'CloudOutboundAdapter.js',
options: {type: 'app'}
}
}
6.6.4. streamとして書ける処理名¶
6.6.4.3. externalNanomsg¶
データをoptions.app_nameで指定されたアプリケーションに渡し、options.app_nameで指定されたアプリケーションから来たデータを次の処理に渡す。
- 引数
- options.app_name: アプリケーション名
6.6.4.4. output¶
- データをINFOレベルでログに出力し、そのまま次の処理に渡します。
6.6.5. sourceに指定できるビルトインのインバウンドアダプタ¶
6.6.5.1. CloudInboundAdapter.js¶
${ICE_HOME}/conf/cloud_config.jsonの設定を使用してクラウドからデータを受け取るアダプタ
- 引数
- options.destination: ${ICE_HOME}/conf/cloud_config.json内で参照するdestination名。
6.6.5.2. CoAPAdapter.js¶
デバイスアダプタとCoAP通信するアダプタ
- 引数
- options.data_type: デバイスアダプタのデバイスプロファイルに記述したdata_type。
6.6.5.3. CronScheduler.js¶
定期的にメッセージを発行するアダプタ
- 引数
- options.rule: Cronライクな書き方でメッセージ発行ルールを記述。
- options.value: (objectを指定した場合) 発火時に発行する値。(関数を指定した場合) 発火時に実行する関数。objectを返却する関数である必要があります。
6.6.5.4. MqttInboundAdapter.js¶
クラウドからMqttメッセージを受け取るアダプタ
- 引数
- options.topic_name: subscribeするトピック名を指定。options.typeと同時に指定するとこちらが優先されます。
- options.type: subscribeするタイプを指定。’adm’,’app’, ‘ma’のいずれかを指定します。
6.6.5.5. NanomsgInboundAdapter.js¶
エッジアプリケーションからメッセージを受け取るアダプタ
- 引数
- options.app_name: メッセージを受け取るアプリケーション名を指定。
6.6.5.6. PollingHttpInoundAdapter.js¶
HTTPサーバからメッセージを受け取るアダプタ
- 引数
- options.url: メッセージを受け取るURL
- options.method: HTTPメソッド。未指定の場合’GET’が使用されます。
- options.request_interval: HTTPリクエスト成功時(200が返却された際)の次のリクエストまでの間隔をミリ秒で指定します。既定値10
- options.timeout_interval: HTTPリクエストがタイムアウトした場合(504が返却された際)の次のリクエストまでの間隔をミリ秒で指定します。既定値100
- options.error_interval: HTTPリクエストがエラーになった場合(その他レスポンスコード。あるいはその他エラー)の次のリクエストまでの間隔をミリ秒で指定します。既定値1000
6.6.6. sinkに指定できるビルトインのアウトバウンドアダプタ¶
6.6.6.1. CloudOutboundAdapter.js¶
${ICE_HOME}/conf/cloud_config.jsonの設定を使用してクラウドにデータを送るアダプタ
- 引数
- options.destination: ${ICE_HOME}/conf/cloud_config.json内で参照するdestination名。
6.6.6.2. HttpOutboundAdapter.js¶
HTTPサーバにメッセージを送るアダプタ
- 引数
- options.url: メッセージを送るURL
- options.method: HTTPメソッド。未指定の場合’POST’が使用されます。
6.6.6.3. MqttOutboundAdapter.js¶
Mqttメッセージをクラウドに送るアダプタ
- 引数
- options.topic_name: subscribeするトピック名を指定。options.typeと同時に指定するとこちらが優先されます。
- options.type: subscribeするタイプを指定。’adm’,’app’, ‘ma’のいずれかを指定します。
6.6.6.4. NanomsgOutboundAdapter.js¶
エッジアプリケーションにメッセージを送るアダプタ
- 引数
- options.app_name: メッセージを送るアプリケーション名を指定。