IoTセンサーデータから過去の気象データをもとに体感温度を求めてツイートするアプリケーションをつくる
Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発 【第2回】
ダウンロード 「IoTデバイスのデータを受信してデータベースに保存する」アプリケーションのフロー (1.9 KB)
ダウンロード 「蓄積されたデータをもとに不快指数などを計算してツイートする」アプリケーションのフロー (7.1 KB)
ノード⑤:期間内のデータを検索
このノードで、CloudantからIoTセンサーシミュレーターのデータを取り出します。 StorageのCloudantノードを配置し、次表のように設定してください。 使用するノードは、左右両方にポートがあるCloudantノードです。
| 項目 | 設定値 | 備考 |
|---|---|---|
| Service | [アプリ名]-cloudantNoSQLDB | |
| Database | [データベース名] | 例:iotsensor |
| Search by | search index | |
| index/[インデックス名] | 例:indexByTimestamp | |
| Name | [任意] |
ノード⑥:平均気温と平均湿度の計算
ノード⑤で取り出したデータから、平均気温と平均湿度を計算します。 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ノードを配置して、次の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行目:後続のノードに渡す不快指数の値を設定しています。
IoTを始めたい方も・本格導入を検討中の方も:おすすめソリューションのご紹介
ビジネスのパフォーマンスを高めようとさまざまな業種・企業で、IoT活用を前提とするプロジェクトが動き始めています。ただし、検討を始めて最初に出てくるのは、こんな要望ではないでしょうか。
「最初は実験的にスタートしたいから、小さく簡単に素早く始めたい」
「実運用に移ったときには10万・100万単位のセンサ/デバイスに対応できるスケーラビリティも確保したい」
これにお応えできるサービス・製品がIBMにあります。ぜひ、下記の資料をご覧ください。(編集部)
この記事は参考になりましたか?
- Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発連載記事一覧
-
- 機械学習をクラウドで手軽に体験! BluemixのApache Sparkで異常なセンサー...
- IoTセンサーデータを使ったD3.jsによるグラフ化と機械学習モデルによる故障予測
- IoTセンサーデータから過去の気象データをもとに体感温度を求めてツイートするアプリケーショ...
- この記事の著者
-
吉田 武司(ヨシダ タケシ)
株式会社ソルクシーズ ソリューション部 所属。IBM Notes/Domino 一筋20年。2013年度、2014年度、2015年度IBM Champions for ICS(http://www.ibm.com/developerworks/champion/)に選出される。XPages Extensio...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
