4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IBM Cloud の Node-REDを使ってセンサーデータを Db2 on Cloud にいれるよ

Last updated at Posted at 2019-08-15

IBM Cloud で無償で使える Node-RED と Db2 on Cloud を 使ってセンサーデータを蓄積する仕組みを作成したいと思います。Db2 on Cloudの表へデータを入れる際にちょっとしたコツがあったのでまとめました。

0. 前提事項

参考にさせていただいたBlogや記事

1. IBM Cloud 上に Node-REDの環境を構築する

1-1.IBM Cloudにログインするとダッシュボードのページが表示されると思います。このダッシュボードのページの上の方にカタログ(使用できるサービス)の検索ボックスがあるので「Node-RED」と入力して「Node-RED Starter」を選択します。
Node-RED_1.png

1-2. Cloud Foundryアプリの作成のページで以下を入力します。
①任意のアプリ名を入力します。②ホスト名を入力します。③ドメインを変えたい場合は、プルダウンから選択します。④デプロイする地域/ロケーションを選択して、下にスクロールします。
Node-RED_2.png

⑤SDK for Node.js ではライトを選択します。⑥Cloudant では Liteを選択します。⑦価格プランではライトを選択します。⑧最後に「作成」ボタンをクリックします。
Node-RED_3.png

1-3. 以下のページにリダイレクトします。「開始中」から「このアプリは稼働中です。」になるまでしばらくお待ちください。「このアプリは稼働中です。」になったら、「アプリURLにアクセス」をクリックします。
Node-RED_4.png

1-4.以下のページが表示されます。「NEXT」をクリックします。
Node-RED_5.png

1-5.以下のページで、Node-RedのエディターにアクセスできるユーザーIDとパスワードをセットします。「NEXT」をクリックします。
Node-RED_6.png

1-6.以下のページで「NEXT」をクリックします。
Node-RED_7.png

1-7.以下のページで「Finish」をクリックします。
Node-RED_8.png

1-8.「Go to your Node-RED flow editor」をクリックします。
Node-RED_9.png

1-9.認証画面が表示されますので、先ほど設定したユーザーIDとパスワードでログインします。
Node-RED_10.png

1-10.Node-REDのエディターが表示されました。
Node-RED_11.png

2. Watson IoT Platform を準備する

今回は 物理デバイスではなく、Watson IoT Platform が用意しているセンサーのシュミレーターを使用したいと思います。物理デバイスでのセンシングは準備中。

2-1. 以下のページにアクセスします。「デバイスがない場合」の「詳細について」をクリックします。
https://quickstart.internetofthings.ibmcloud.com/#/

WatsonIoT_1.png

2-2. シュミレータの解説ページが表示されます。中程にある以下のURLにアクセスします。
http://quickstart.internetofthings.ibmcloud.com/iotsensor

2-4. IoT Sensor(シュミレータ)が表示されます。右上に表示された文字列がデバイスIDです。これをコピーします。
WatsonIoT_2.png

3. Node-RED でフローを作成する。

3-1. Node-REDのエディターに戻ります。左側の「入力」から「ibmiot」を選んで、真ん中のパレットにドラッグ&ドロップします。
Node-RED-Editor_1.png

3-2. 追加したノードをダブルクリックして設定画面を開きます。先ほどコピーしておいたデバイスIDを設定して、「完了」をクリックします。
Node-RED-Editor_2.png

3-3. センサーで取得されるデータをデバッグモードで確認してみます。左側の「出力」から「debug」を選んで、真ん中のパレットにドラッグ&ドロップします。
Node-RED-Editor_3.png

3-4. 追加した2つのノードを繋ぎます。その後、「デプロイ」をクリックします。
Node-RED-Editor_4.png

3-5. デバッグメッセージを確認します。虫のアイコンをクリックしてください。
Node-RED-Editor_5.png

3-6. センサーから送信されたデータを確認することができます。
Node-RED-Editor_6.png

3-7. デバッグメッセージへの出力を一旦停止しておきたい場合は、debugノードの右側をクリックします。
Node-RED-Editor_7.png

3. センサーデータを保管する表を Db2 on Cloud上 に作成する

3-1. Db2 on Cloudにログインし、左側のメニューをクリックして「RUN SQL」をクリックします。

3-2. 以下のDDLを実行します。

CREATE TABLE IOT_DATA
(
name VARCHAR(20),
temp integer,
humidity integer,
objecttemp integer
)

4. センサーのノードとDb2のノードを繋ぐ

4-1. 左側の「ストレージ」から左側にのみコネクタが付いている「dashDB」を選んで、真ん中のパレットにドラッグ&ドロップします。
Node-RED-Editor_8.png

4-2. 追加したノードをダブルクリックして設定画面を開きます。「新規にdashDBを追加」の右横にある鉛筆アイコンをクリックします。
Node-RED-Editor_9.png

4-3. 接続情報を入力します。①Db2 on CloudのFully Qualified Domain Nameを入力します。② BLUDBと入力します。③Db2 on CloudのDBユーザー名を入力します。④パスワードを入力します。⑤ポート番号を指定します。non-SSLの場合は50000、SSLの場合は50001です。⑥「完了」をクリックします。
Node-RED-Editor_10.png

⑦表の名前を入力します。⑧「完了」をクリックします。
Node-RED-Editor_11.png

4-4. 「IBM IoT」と「dashDB」のノードを繋ぎます。その後、「デプロイ」をクリックします。
Node-RED-Editor_12.png

4-5. デバッグメッセージで以下のエラーが表示されます。これは、「IBM IOT」ノードから送られてきたデータに、NAME が無いと言っています。
Node-RED-Editor_13.png

3-6で確認しましたが、nameは送信されています。なので、dashDBに連携する際に送信されるデータを大文字にしてあげる必要がありそうです。

5. センサーの送信データを整形する

5-1. 左側の「機能」から「function」を選んで、真ん中のパレットにドラッグ&ドロップします。「IBM IoT」と「dashDB」の線はマウスで選択してdeleteキーで削除します。
Node-RED-Editor_14.png

5-2. 追加したノードをダブルクリックして設定画面を開きます。
以下のコードを上書きで貼り付けて、「完了」をクリックします。(名前は設定しなくても大丈夫です。)


msg.payload =  {
    "NAME": msg.payload.d.name,
    "TEMP": msg.payload.d.temp,
    "HUMIDITY": msg.payload.d.humidity,
    "OBJECTTEMP": msg.payload.d.objectTemp
};
return msg;

Node-RED-Editor_15.png

5-3. 「IBM IoT」「function」「dashDB」のノードをつないで、デプロイします。デバッグメッセージになにも表示されなければDb2 on Cloudの表にデータが入っているはずです。
Node-RED-Editor_16.png

*データの挿入を止めるには、ノードの線を削除してデプロイします。

5-4. Db2 on Cloudの画面で「RUN SQL」から以下を実行して確認してみてください。

SELECT * FROM IOT_DATA;

6. 現在時刻を挿入する/データの流量を調整する

6-1. 現在時刻をIOT_DATA表に入れるには、はじめに表の定義を変更します。

ALTER TABLE IOT_DATA 
ADD COLUMN TIMESTAMP varchar(20);

6-2. IBM IoT ノードの payload メッセージを整形する function を以下のもので上書きします。

var getCurrentTime = function () {
    var date = new Date();
    date.setHours(date.getHours() + 9);
    var d = date.getFullYear() + '-';
    d += ('0' + (date.getMonth() + 1)).slice(-2) + '-';
    d += ('0' + date.getDate()).slice(-2) + 'T';
    d += ('0' + date.getHours()).slice(-2) + ':';
    d += ('0' + date.getMinutes()).slice(-2) + ':';
    d += ('0' + date.getSeconds()).slice(-2) + 'Z';
    return d;
};

msg.payload =  {
    "NAME": msg.payload.d.name,
    "TEMP": msg.payload.d.temp,
    "HUMIDITY": msg.payload.d.humidity,
    "OBJECTTEMP": msg.payload.d.objectTemp,
    "TIMESTAMP": getCurrentTime()
};

return msg;


6-3. データの挿入の流量を調整します。左側の「機能」から「delay」を選んで、真ん中のパレットにドラッグ&ドロップします。ダブルクリックして設定画面を開きます。

①「動作」は「メッセージの流量制限」を選択します。②「すべてのメッセージ」を選択します。③「流量」で 1メッセージ1分に設定します。④「完了」をクリックします。
Node-RED-Editor_17.png

6-4. ノードをすべて繋ぎ、デプロイします。
Node-RED-Editor_18.png

Db2 on Cloudの画面で「RUN SQL」から以下を実行して確認してみてください。

SELECT * FROM IOT_DATA;

Node-RED-Editor_21.png

以上、IBM Cloud の Node-REDを使ってセンサーデータを Db2 on Cloud にいれるよ、でした。
:smiley_cat: :smiley_cat:

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?