IBM Cloud の Node-REDを使ってセンサーデータを Db2 on Cloud にいれるよ
IBM Cloud で無償で使える Node-RED と Db2 on Cloud を 使ってセンサーデータを蓄積する仕組みを作成したいと思います。Db2 on Cloudの表へデータを入れる際にちょっとしたコツがあったのでまとめました。
0. 前提事項
事前に IBM Cloud の アカウントを作成しておきます。
-
Db2 on Cloud を作成しておきます。こちらをご参考ください。
- IBM Cloud で無償枠のDb2 on Cloudを使ってみる
- 無償で使えるのはLiteプランのみで、容量200MBまでとなります。
今回センサーは IBM Watson IoT Platform が提供するシュミレーターを使用します。
参考にさせていただいたBlogや記事
1. IBM Cloud 上に Node-REDの環境を構築する
1-1.IBM Cloudにログインするとダッシュボードのページが表示されると思います。このダッシュボードのページの上の方にカタログ(使用できるサービス)の検索ボックスがあるので「Node-RED」と入力して「Node-RED Starter」を選択します。
1-2. Cloud Foundryアプリの作成のページで以下を入力します。
①任意のアプリ名を入力します。②ホスト名を入力します。③ドメインを変えたい場合は、プルダウンから選択します。④デプロイする地域/ロケーションを選択して、下にスクロールします。
⑤SDK for Node.js ではライトを選択します。⑥Cloudant では Liteを選択します。⑦価格プランではライトを選択します。⑧最後に「作成」ボタンをクリックします。
1-3. 以下のページにリダイレクトします。「開始中」から「このアプリは稼働中です。」になるまでしばらくお待ちください。「このアプリは稼働中です。」になったら、「アプリURLにアクセス」をクリックします。
1-4.以下のページが表示されます。「NEXT」をクリックします。
1-5.以下のページで、Node-RedのエディターにアクセスできるユーザーIDとパスワードをセットします。「NEXT」をクリックします。
1-8.「Go to your Node-RED flow editor」をクリックします。
1-9.認証画面が表示されますので、先ほど設定したユーザーIDとパスワードでログインします。
2. Watson IoT Platform を準備する
今回は 物理デバイスではなく、Watson IoT Platform が用意しているセンサーのシュミレーターを使用したいと思います。物理デバイスでのセンシングは準備中。
2-1. 以下のページにアクセスします。「デバイスがない場合」の「詳細について」をクリックします。
https://quickstart.internetofthings.ibmcloud.com/#/
2-2. シュミレータの解説ページが表示されます。中程にある以下のURLにアクセスします。
http://quickstart.internetofthings.ibmcloud.com/iotsensor
2-4. IoT Sensor(シュミレータ)が表示されます。右上に表示された文字列がデバイスIDです。これをコピーします。
3. Node-RED でフローを作成する。
3-1. Node-REDのエディターに戻ります。左側の「入力」から「ibmiot」を選んで、真ん中のパレットにドラッグ&ドロップします。
3-2. 追加したノードをダブルクリックして設定画面を開きます。先ほどコピーしておいたデバイスIDを設定して、「完了」をクリックします。
3-3. センサーで取得されるデータをデバッグモードで確認してみます。左側の「出力」から「debug」を選んで、真ん中のパレットにドラッグ&ドロップします。
3-4. 追加した2つのノードを繋ぎます。その後、「デプロイ」をクリックします。
3-5. デバッグメッセージを確認します。虫のアイコンをクリックしてください。
3-6. センサーから送信されたデータを確認することができます。
3-7. デバッグメッセージへの出力を一旦停止しておきたい場合は、debugノードの右側をクリックします。
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」を選んで、真ん中のパレットにドラッグ&ドロップします。
4-2. 追加したノードをダブルクリックして設定画面を開きます。「新規にdashDBを追加」の右横にある鉛筆アイコンをクリックします。
4-3. 接続情報を入力します。①Db2 on CloudのFully Qualified Domain Nameを入力します。② BLUDBと入力します。③Db2 on CloudのDBユーザー名を入力します。④パスワードを入力します。⑤ポート番号を指定します。non-SSLの場合は50000、SSLの場合は50001です。⑥「完了」をクリックします。
4-4. 「IBM IoT」と「dashDB」のノードを繋ぎます。その後、「デプロイ」をクリックします。
4-5. デバッグメッセージで以下のエラーが表示されます。これは、「IBM IOT」ノードから送られてきたデータに、NAME が無いと言っています。
3-6で確認しましたが、nameは送信されています。なので、dashDBに連携する際に送信されるデータを大文字にしてあげる必要がありそうです。
5. センサーの送信データを整形する
5-1. 左側の「機能」から「function」を選んで、真ん中のパレットにドラッグ&ドロップします。「IBM IoT」と「dashDB」の線はマウスで選択してdeleteキーで削除します。
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;
5-3. 「IBM IoT」「function」「dashDB」のノードをつないで、デプロイします。デバッグメッセージになにも表示されなければDb2 on Cloudの表にデータが入っているはずです。
*データの挿入を止めるには、ノードの線を削除してデプロイします。
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分に設定します。④「完了」をクリックします。
Db2 on Cloudの画面で「RUN SQL」から以下を実行して確認してみてください。
SELECT * FROM IOT_DATA;
以上、IBM Cloud の Node-REDを使ってセンサーデータを Db2 on Cloud にいれるよ、でした。
Author And Source
この問題について(IBM Cloud の Node-REDを使ってセンサーデータを Db2 on Cloud にいれるよ), 我々は、より多くの情報をここで見つけました https://qiita.com/Asuka_Saito/items/e2c21e43ce583f3dc21a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .