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


[前回までの記事](http://qiita.com/fumishitan/items/bbd21b73a6b2ec5a4cbd)でRasberry pi 上に構築したnode.jsで温度センサのデータを取得できるようになったので、これをクラウドに保存します。

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

## mBaaSの利用登録を行う

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

![スクリーンショット 2015-09-21 19.41.44.png](https://qiita-image-store.s3.amazonaws.com/0/55227/f3849659-755f-a529-befa-a947de531fd6.png "スクリーンショット 2015-09-21 19.41.44.png")

![スクリーンショット 2015-09-21 19.42.00.png](https://qiita-image-store.s3.amazonaws.com/0/55227/e6cf3691-3535-e6eb-f8ab-8266c75028e9.png "スクリーンショット 2015-09-21 19.42.00.png")

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

![スクリーンショット 2015-09-21 19.50.16.png](https://qiita-image-store.s3.amazonaws.com/0/55227/060970e0-67ef-5b06-1cd3-42920ef24e12.png "スクリーンショット 2015-09-21 19.50.16.png")

アプリとはアプリ用のサーバー環境と捉えてください、このアプリ名に「ncmb_temper」と入力して、新規作成をクリックしてください。
![スクリーンショット 2015-09-21 19.51.18.png](https://qiita-image-store.s3.amazonaws.com/0/55227/83784177-19e7-5832-e2fb-a0fb3bb86d95.png "スクリーンショット 2015-09-21 19.51.18.png")

正常に作成されると、上記の画面が出ます。
この「アプリケーションキー」と「クライアントキー」は後ほど利用します。
※[後述](http://qiita.com/fumishitan/items/8abae38db286138f23bf#%E6%AC%A1%E3%81%AFsdk%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96)するSDKの初期化の部分で利用します。
利用登録は以上

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

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

```
$ npm install -S ncmb
```


さて上記のコマンドまで行ったらコードを書きましょう。
温度センサのデータを取得し、クラウドに保存するコードは以下になります。

```js: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](https://qiita-image-store.s3.amazonaws.com/0/55227/a0e88dba-10cf-2cd8-12aa-7d65685a0e19.png "スクリーンショット 2015-09-21 20.30.54.png")

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

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

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

```js:temper.js
var NCMB = require("YOURPATH/ncmb_js/lib/ncmb");
```

### 次はSDKの初期化

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

```js:temper.js
var ncmb = new NCMB("YOUR_APPLICATIONKEY","YOUR_CLIENTKEY");
```

上記の
YOUR_APPLICATIONKEY
YOUR_CLIENTKEY

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

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

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

```js:temper.js
var TemperatureClass = ncmb.DataStore("Temperature");
var temperatureClass = new TemperatureClass();
```

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

```js:temper.js
var today = new Date();
temperatureClass.set("temperature",data.temperature);
temperatureClass.set("date",today);
```

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

```js:temper.js
temperatureClass.save()
                .then(function(){
                  console.log("message is saved.");
                })
                .catch(function(err){
                  console.log(err.text);
                });
```

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