前回までの記事でRasberry pi 上に構築したnode.jsで温度センサのデータを取得できるようになったので、これをクラウドに保存します。
使うクラウドはニフティクラウド mobile backend(以下mBaaS)という、データストア(DB)からプッシュ通知の配信基盤まで提供しているものを利用します。このサービスにはnode.jsにも対応しているJavaScript SDK Version 2もあるのでそれを利用します。今回は利用導入から解説をします。
mBaaSの利用登録を行う
利用登録は下記の要領で行います。
利用開始すると下記のような画面が出てきます。
アプリとはアプリ用のサーバー環境と捉えてください、このアプリ名に「ncmb_temper」と入力して、新規作成をクリックしてください。
正常に作成されると、上記の画面が出ます。
この「アプリケーションキー」と「クライアントキー」は後ほど利用します。
※後述するSDKの初期化の部分で利用します。
利用登録は以上
mBaaSへ温度データを保存する
Raspbery pi に構築したnode.js上からmBaaSに温度データを保存するには、まずRaspbery pi にmBaaSのSDKをインストールする必要があります。npmインストールができるのでそれを行います。以下のnpmコマンドでインストールが行えます。
$ npm install -S ncmb
さて上記のコマンドまで行ったらコードを書きましょう。
温度センサのデータを取得し、クラウドに保存するコードは以下になります。
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
すると、下記のようにデータが保存されます。
mBaaSデータストア利用のポイント
上のようにただコードを記載しても、解説にならないのでmBaaSを利用する際のポイントを述べたいと思います。
まずはライブラリの読み込み
mBaaSのSDKを使うためにもまずはライブラリの読み込みを行います
var NCMB = require("YOURPATH/ncmb_js/lib/ncmb");
次はSDKの初期化
次は自分が作った、サーバー環境に保存するための準備として、SDKの初期化を行います
それが下記になります。
var ncmb = new NCMB("YOUR_APPLICATIONKEY","YOUR_CLIENTKEY");
上記の
YOUR_APPLICATIONKEY
YOUR_CLIENTKEY
の部分に
上記のアプリケーションキー、クライアントキーをそれぞれコピーアンドペーストします。
最後にデータストアにデータを保存します
まず、保存するクラスを定義します。
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);
});
mBaaSのデータストアはKey-Valueのようなデータベースとなっており、mysqlのようにあらかじめテーブルなどを定義する必要がありません。上記のようにクライアント側にコードを書けば、サーバー側にもそれが反映されます。。。便利ですね!