Edited at

【IoTを実感しよう!】温度センサのデータをクラウドに保存する(node.js×Raspberr pi)

More than 3 years have passed since last update.

前回までの記事でRasberry pi 上に構築したnode.jsで温度センサのデータを取得できるようになったので、これをクラウドに保存します。

使うクラウドはニフティクラウド mobile backend(以下mBaaS)という、データストア(DB)からプッシュ通知の配信基盤まで提供しているものを利用します。このサービスにはnode.jsにも対応しているJavaScript SDK Version 2もあるのでそれを利用します。今回は利用導入から解説をします。


mBaaSの利用登録を行う

利用登録は下記の要領で行います。

スクリーンショット 2015-09-21 19.41.44.png

スクリーンショット 2015-09-21 19.42.00.png

利用開始すると下記のような画面が出てきます。

スクリーンショット 2015-09-21 19.50.16.png

アプリとはアプリ用のサーバー環境と捉えてください、このアプリ名に「ncmb_temper」と入力して、新規作成をクリックしてください。

スクリーンショット 2015-09-21 19.51.18.png

正常に作成されると、上記の画面が出ます。

この「アプリケーションキー」と「クライアントキー」は後ほど利用します。

後述するSDKの初期化の部分で利用します。

利用登録は以上


mBaaSへ温度データを保存する

Raspbery pi に構築したnode.js上からmBaaSに温度データを保存するには、まずRaspbery pi にmBaaSのSDKをインストールする必要があります。npmインストールができるのでそれを行います。以下のnpmコマンドでインストールが行えます。

$ npm install -S ncmb

さて上記のコマンドまで行ったらコードを書きましょう。

温度センサのデータを取得し、クラウドに保存するコードは以下になります。


temper.js


var NCMB = require("YOURPATH/ncmb_js/lib/ncmb");

// 2. mobile backendアプリとの連携
var ncmb = new NCMB("YOUR_APPLICATIONKEY","YOUR_CLIENTKEY");

var BMP085 = require('./bmp180.js');

var sensor = BMP085({address: 0x77,
mode: 3,
units: 'metric'});

setInterval(function() {
sensor.read(function (err, data) {
console.log("pressure:" +data.pressure);
console.log("temperature:" +data.temperature);

var TemperatureClass = ncmb.DataStore("Temperature");
var temperatureClass = new TemperatureClass();
var today = new Date();
temperatureClass.set("temperature",data.temperature);
temperatureClass.set("date",today);
temperatureClass.save()
.then(function(){
console.log("message is saved.");
})
.catch(function(err){
console.log(err.text);
});
});
},60000);


これで1分ごとに温度センサを取得して、データを保存するするコードができました。

あとは下記のコマンドで実行するだけです。

node temper.js

すると、下記のようにデータが保存されます。

スクリーンショット 2015-09-21 20.30.54.png


mBaaSデータストア利用のポイント

上のようにただコードを記載しても、解説にならないのでmBaaSを利用する際のポイントを述べたいと思います。


まずはライブラリの読み込み

mBaaSのSDKを使うためにもまずはライブラリの読み込みを行います


temper.js

var NCMB = require("YOURPATH/ncmb_js/lib/ncmb");



次はSDKの初期化

次は自分が作った、サーバー環境に保存するための準備として、SDKの初期化を行います

それが下記になります。


temper.js

var ncmb = new NCMB("YOUR_APPLICATIONKEY","YOUR_CLIENTKEY");


上記の

YOUR_APPLICATIONKEY

YOUR_CLIENTKEY

の部分に

上記のアプリケーションキー、クライアントキーをそれぞれコピーアンドペーストします。


最後にデータストアにデータを保存します

まず、保存するクラスを定義します。


temper.js

var TemperatureClass = ncmb.DataStore("Temperature");

var temperatureClass = new TemperatureClass();

次に保存するカラムとデータを設定します。


temper.js

var today = new Date();

temperatureClass.set("temperature",data.temperature);
temperatureClass.set("date",today);

最後に、クラウドに保存します。


temper.js

temperatureClass.save()

.then(function(){
console.log("message is saved.");
})
.catch(function(err){
console.log(err.text);
});

mBaaSのデータストアはKey-Valueのようなデータベースとなっており、mysqlのようにあらかじめテーブルなどを定義する必要がありません。上記のようにクライアント側にコードを書けば、サーバー側にもそれが反映されます。。。便利ですね!