SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発(AD)

IoTセンサーデータから過去の気象データをもとに体感温度を求めてツイートするアプリケーションをつくる

Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発 【第2回】

  • このエントリーをはてなブックマークに追加

ノード⑤:期間内のデータを検索

このノードで、CloudantからIoTセンサーシミュレーターのデータを取り出します。 StorageのCloudantノードを配置し、次表のように設定してください。 使用するノードは、左右両方にポートがあるCloudantノードです。

左右両方にポートがあるCloudantノードを使う
左右両方にポートがあるCloudantノードを使う
項目 設定値 備考
Service [アプリ名]-cloudantNoSQLDB  
Database [データベース名] 例:iotsensor
Search by search index  
  index/[インデックス名] 例:indexByTimestamp
Name [任意]  
⑤Cloudantノード「期間内のデータを検索」
⑤Cloudantノード「期間内のデータを検索」

ノード⑥:平均気温と平均湿度の計算

ノード⑤で取り出したデータから、平均気温と平均湿度を計算します。 Functionノードを配置して、次のJavaScriptコードを設定します。

//平均値を計算
var getAverage = function( arr ) {
    var sum = 0;
    arr.forEach(function( elm ) {
        sum += elm;
    });
    return Math.round(sum / arr.length);
};

var total = msg.cloudant.total_rows;
if ( total === 0 ){
    //データが見つからなかった場合は処理を終了する(後続にmsgを返さない)
} else {
    //データの取得
    var timestamp = [];
    var temp = [];
    var humidity = [];
    obj = msg.payload;
    for ( var i in obj ) {
        var iotfdata = obj[ i ];
        var name1 = "temp";
        var name2 = "humidity";
        var name3 = "timestamp";
        temp.push(iotfdata[name1]);
        humidity.push(iotfdata[name2]);
        timestamp.push(iotfdata[name3]);
    }

    msg.payload = {
        "timestamp" : timestamp ,
        "temp" : temp ,
        "humidity" : humidity ,
        "avgtemp" : getAverage( temp ) ,
        "avghumidity" : getAverage( humidity )
    };

    return msg;
}

1~8行目:平均値の計算を行っています。

10行目:検索結果のデータ件数(msg.cloudant.total_rows)を取得しています。

11~12行目:取得したデータ件数が0件の場合、そのまま処理を終了します。 後続のフローにmsgを渡さないと、以降のフローは動作せず終了します。 取得したデータが1件でもある場合、平均気温と平均湿度を求めます。

29~35行目:後続のノードに渡すデータを作成しています。

⑥Functionノード「平均気温と平均湿度の計算」
⑥Functionノード「平均気温と平均湿度の計算」

ノード⑦:不快指数の計算

平均気温、平均湿度に続き、ここでは不快指数を計算します。 Functionノードを配置して、次のJavaScriptコードを設定します。

//不快指数の計算
var getDiscomfortIndex = function ( Td , H ) {
    return 0.81 * Td + 0.01 * H * (0.99 * Td - 14.3) + 46.3;
};

var temp = msg.payload.avgtemp;
var humidity = msg.payload.avghumidity;
var discomfort = Math.round(getDiscomfortIndex( temp , humidity ));

//グローバル変数に不快指数を格納
context.global.temp = temp;
context.global.humidity = humidity;
context.global.discomfort = discomfort;

msg.payload = discomfort;

return msg;

1~8行目:不快指数の計算を行っています。

10~13行目:グローバル変数に結果を設定しています。

15行目:後続のノードに渡す不快指数の値を設定しています。

⑦Functionノード「不快指数の計算」
⑦Functionノード「不快指数の計算」

IoTを始めたい方も・本格導入を検討中の方も:おすすめソリューションのご紹介

ビジネスのパフォーマンスを高めようとさまざまな業種・企業で、IoT活用を前提とするプロジェクトが動き始めています。ただし、検討を始めて最初に出てくるのは、こんな要望ではないでしょうか。

「最初は実験的にスタートしたいから、小さく簡単に素早く始めたい」
「実運用に移ったときには10万・100万単位のセンサ/デバイスに対応できるスケーラビリティも確保したい」

これにお応えできるサービス・製品がIBMにあります。ぜひ、下記の資料をご覧ください。(編集部)

次のページ
ノード⑧:検索条件の設定

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発連載記事一覧

もっと読む

この記事の著者

吉田 武司(ヨシダ タケシ)

株式会社ソルクシーズ ソリューション部 所属。IBM Notes/Domino 一筋20年。2013年度、2014年度、2015年度IBM Champions for ICS(http://www.ibm.com/developerworks/champion/)に選出される。XPages Extensio...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9282 2016/04/04 02:08

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング