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メソッド呼び出し時の引数オブジェクトを指定

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.1. map

データを引数options.fで渡された関数に適用し、戻り値を次の処理に渡す。

  • 引数
    • options.f: 関数

6.6.4.2. filter

データを引数options.fで渡された関数に適用し、trueの場合、データを次の処理に渡す。

  • 引数
    • options.f: 関数

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: メッセージを送るアプリケーション名を指定。