LoginSignup
30
25

More than 5 years have passed since last update.

Node-REDを使ってセンサーデータをCloudantに格納する

Last updated at Posted at 2015-04-22

センサーデータをデータベースに保管して、後から使いたいというケースがあるかと思います。Node-REDを使ってセンサーデータを受け取り、Cloudantに格納する手順についてまとめます。

前提

IBM Bluemix上でボイラープレート「Node-RED Starter」、または、「Internet of Things Foundation」がデプロイされていることとします。

作業の流れ

  1. Cloudantにデータベースを作成する
  2. Node-REDを使ってセンサーデータをCloudantに保管するフローを作成する
  3. Cloudantにデータが保管されていることを確認する

1. Cloudantにデータベースを作成する

Bluemixのダッシュボードより、Node-REDのアプリケーションをクリックします。
nodered-cloudant01.jpg

Cloudant NoSQL DBをクリックします。
nodered-cloudant02.jpg

右上にある起動をクリックし、Cloudantの管理コンソールを起動します。
nodered-cloudant03.jpg

Cloudant上にあるデータベースの一覧が表示されます。すでにnoderedというデータベースが存在していますが、これは、Node-REDがフローの格納などに利用するデータベースです。
ここでは、センサーデータ用に新規のデータベースを作成します。右上のAdd New Databaseをクリックします。
nodered-cloudant04.jpg

表示されるポップアップにデータベース名sensordataを入力しCreateをクリックします。
nodered-cloudant05.jpg

Cloudant上にセンサーデータを格納するためのデータベースを作成できました。

2. Node-REDを使ってセンサーデータをCloudantに保管するフローを作成する

Node-REDのフローエディターを使って、以下のフローを作成します。
nodered-cloudant06.jpg

以下の4つのノードを利用しています。

ノード 用途
ibmiot(入力)ノード nodered-ibmiot-input.jpg センサーデータの入力受付
functionノード nodered-function.jpg センサーデータの加工
Cloudant(出力)ノード nodered-cloudant-output.jpg Cloudantへのデータ格納
Debugノード nodered-debug.jpg センサーデータの加工結果確認

ibmiotノードの構成

ibmiotは、センサーシミュレーターを使用するように構成しています。

functionノードの構成

センサーデータにタイムスタンプを追加するスクリプトを埋め込んでいます。Node-RED小ワザ集小ワザ2. センサーデータを加工してタイムスタンプを追加するを参照してください。

Cloudantノードの構成

Cloudantノードの設定は以下のとおりです。

設定項目 内容
Service Bluemix上に作成されたCloudantのサービス名を選択します
Database Cloudantに作成したデータベース名であるsensordataを入力します
Operation insertを選択します。センサーデータだけを格納するため、Only store msg.payload object?にチェックを入れています。
Name ノードに付ける名前です。任意の値で問題ありません。

入力例は以下のとおりです。
nodered-cloudant07.jpg

(参考)サンプルフローのインポート

以下のJSONを、Node-RED小ワザ集小ワザ1. フローのインポートの方法を使ってインポートすることで、サンプルフローを復元できます。

[{"id":"a096f3c0.8b2af","type":"ibmiot in","authentication":"quickstart","apiKey":"","inputType":"evt","deviceId":"a910e6c629f2","applicationId":"","deviceType":"+","eventType":"+","commandType":"","format":"json","name":"Sensor Simulator","service":"quickstart","allDevices":"","allApplications":"","allDeviceTypes":true,"allEvents":true,"allCommands":"","allFormats":"","x":125,"y":114,"z":"56be2dc6.6f2e4c","wires":[["b35ec10c.df9bc"]]},{"id":"b35ec10c.df9bc","type":"function","name":"Convert Payload","func":"var getCurrentTime = function () {\n    var date = new Date();\n    date.setHours(date.getHours() + 9);\n    var d = date.getFullYear() + '-';\n    d += ('0' + (date.getMonth() + 1)).slice(-2) + '-';\n    d += ('0' + date.getDate()).slice(-2) + 'T';\n    d += ('0' + date.getHours()).slice(-2) + ':';\n    d += ('0' + date.getMinutes()).slice(-2) + ':';\n    d += ('0' + date.getSeconds()).slice(-2) + 'Z';\n    return d;\n};\n\nmsg.payload =  {\n    \"timestamp\": getCurrentTime(),\n    \"temp\": msg.payload.d.temp,\n    \"humidity\": msg.payload.d.humidity,\n    \"objectTemp\": msg.payload.d.objectTemp\n};\n\nreturn msg;","outputs":1,"valid":true,"x":326,"y":114,"z":"56be2dc6.6f2e4c","wires":[["2bd52b43.6ff1fc"]]},{"id":"2bd52b43.6ff1fc","type":"debug","name":"Check Output","active":false,"console":"false","complete":"payload","x":521,"y":114,"z":"56be2dc6.6f2e4c","wires":[]}]

フローのデプロイ

以上でフローの作成は完了です。フローエディター右上の nodered-cloudant08.jpg をクリックして、フローをデプロイします。

Cloudantにデータが保管されていることを確認する

フローをデプロイした時点から、Cloudantへのデータ保管が開始されています。保管されたデータを確認します。

Cloudantの管理コンソールに戻ります。
左メニューバーのDatabasesをクリックし、データベースの一覧を表示します。sensordataデータベースのデータ数(# of Docs)の値が増えていることが確認できます。
nodered-cloudant09.jpg

sensordataをクリックして、保管されたデータを見てみます。
右側に保管されているデータの一覧が表示されるため、どれでもいいのでidの部分の文字列をクリックします。
nodered-cloudant10.jpg

タイムスタンプとセンサーデータが保管されていることが分かります。
nodered-cloudant11.jpg

30
25
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
30
25