3.2. センサーデータ収集の実装

サンプルの実装をベースにセンサーデータを収集しICEに送信する実装コードを紹介します。

詳細はAPIリファレンスや、サンプルのソースコードを参照してください。

3.2.1. ICE Coreとの接続, Device Adapterの初期化

ddca_devadpt_context_t *context;
ret = ddca_devadpt_context_create(&context);
if (ret != DDCA_SUCCESS) {
  return -1;
}

ret = ddca_devadpt_init(context, argv[1]);
if (ret != DDCA_SUCCESS) {
  return -1;
}

3.2.2. デバイスをICEに登録

char *device_id;
ret = ddca_devadpt_register_device(dev_profile_name, &device_id);
if (ret != DDCA_SUCCESS) {
  return -1;
}

3.2.3. データの送信

ddca_event_t *evt;
ret = ddca_event_create(device_id, &evt);
if (ret != DDCA_SUCCESS) {
  return -1;
}

ret = ddca_event_put_int_value(evt, "temperature", 20);
if (ret != DDCA_SUCCESS) {
  return -1;
}

ret = ddca_devadpt_emit(evt);
if (ret != DDCA_SUCCESS) {
  return -1;
}

ddca_event_destroy(evt);

3.2.4. プログラムの終了処理、シグナルのハンドリング

ddca_devadpt_destroy();

3.2.5. DeviceAdapterから発生したデータをCloudAdapterにデータを送信するフロー

exports.start = function () {
}

exports.topology = {
    source: {
        adapter: 'DAInboundAdapter.js',
        args: 'thermometer'
    },
    sink:{
        adapter: 'CloudOutboundAdapter.js',
        options: { destination: 'app' }
    }
}

exports.stop = function () {
}

V1.2.2以前は、DAInboundAdapter.jsの部分をCoAPAdapter.jsに書き換えて実行して下さい。

3.2.6. サンプルのビルドと実行方法

thermometer_sampleとtemp_converter_sampleのビルドと実行方法について説明します。

  1. thermometer_sampleの配置 samplesディレクトリから実行用のディレクトリにファイルをコピーします。
$ cd {ICE_HOME}
$ sudo cp -r samples/native/app/thermometer_sample/ native/user/
  1. thermometer_sampleのビルド 下記のようにmakeコマンドでビルドを行います。
$ cd {ICE_HOME}/native/user/thermometer_sample
$ sudo make
  1. temp_converter_sample の配置とビルド
    thermometer_sampleと同様に配置とビルドを行います。
  2. フロー定義の配置
    {ICE_HOME}/user_modules/flows/SampleFlow.jsをエディタで新規作成し、下記の内容を記載して保存します。
    exports.start = function () {
    };
    
    exports.topology = {
       source: {
          adapter: 'DAInboundAdapter.js',
          options: {
                data_type: 'thermometer'
          }
       },
       flow: [
          {
                stream: 'externalNanomsg',
                options: {
                   app_name: 'temp_converter_sample'
                }
          }
       ],
       sink: {
          adapter: 'ConsoleLogAdapter.js'
       }
    };
    
    exports.stop = function () {
    };
    

    V1.2.2以前は、DAInboundAdapter.jsの部分をCoAPAdapter.jsに書き換えて実行して下さい。

  3. 実行と動作確認 ICE Coreを起動(または再起動)することで設定に従ってアプリケーションが起動します。

(ICE Coreのサービス/プロセスが停止している状態で)
$ cd {ICE_HOME}
$ sudo bin/start

SampleFlow.jsは発生したデータをICE Core プロセスの標準出力に出す設定になっているため、上記を起動したコンソールに温度データが表示されれば動作確認は成功です。