Raspberry PiにNode-REDをインストールしてmBaaSに保存する

Raspberry Piに[Node-RED](http://nodered.org/)をインストールして、Raspberry Piで取得できるデータを[ニフティクラウド mobile backend](http://mb.cloud.nifty.com/)に格納できるようにします。

# はじめに
流行り始めた時にRaspberry Piを買ってLチカ（LEDをチカチカさせる）させて満足していました。
その後あまり触っていなかったのですが、Node-RED勉強会に参加して、これを利用すればRaspberry Piで色々簡単に試すことができるようになると思い、この記事を書くことにしました。

# 前準備
Raspberry PiにNode-REDをインストールして準備しましょう。
この[ヘルプ](http://nodered.org/docs/hardware/raspberrypi.html)を参考にインストールしました。

# 格納するノードを作る
Node-REDのデフォルトではニフティクラウド mobile backendに格納するノードがないので、自分で作るしかないです。なので、頑張って作っていきます。


```json:package.json
{
    "name"         : "node-red-ncmb-datastore",
    "version"      : "0.0.1",
    "description"  : "NIFTY Cloud mobile backend DataStore node for node-red",
    "dependencies": {
    },
    "keywords": [ "node-red" ],
    "node-red"     : {
       "nodes": {
          "ncmbds": "ncmbds/ncmbds.js"
       }
    },
    "dependencies": {
      "ncmb": "~2.0.2"
    }
}
```

```Javascript:ncmbds/ncmbds.js
module.exports = function(RED) {
	"use strict";
	 var NCMB = require("ncmb");

    function NCMBDataStore(config) {

        RED.nodes.createNode(this,config);
		this.appkey = config.appkey;
		this.clikey = config.clikey;
		this.classname = config.classname;
		this.fieldname = config.fieldname;
        var node = this;

        this.on('input', function(msg) {
			var ncmb = new NCMB(this.appkey, this.clikey);
			var NCMBClass = ncmb.DataStore(this.classname);
			var ncmbClass = new NCMBClass();
			ncmbClass.set(this.fieldname, msg.payload);
			ncmbClass.save()
				.then(function(){
					node.info("message is saved.");
				})
				.catch(function(err){
					node.info(err.text);
			});
			node.send(msg);
	    });
    }

    RED.nodes.registerType("ncmbds",NCMBDataStore);
}
```

```HTML:ncmbds/ncmbds.html
<script type="text/javascript">
    RED.nodes.registerType('ncmbds',{
        category: 'NIFTY Cloud',
        color: '#3FADB5',
        defaults: {
            name: {value:""},
            appkey: {value:"", required:true},
            clikey: {value:"", required:true},
            classname: {value:"", required:true},
            fieldname: {value:"", required:true}
        },
        inputs:1,
        outputs:0,
        icon: "db.png",
        label: function() {
		    return this.name||this.appkey||this.clikey||this.classname||this.fieldname||"ncmbds";
        }
    });
</script>

<script type="text/x-red" data-template-name="ncmbds">
    <div class="form-row">
        <label for="node-input-name">Name</label>
        <input type="text" id="node-input-name" placeholder="Name">
    </div>

    <br/>
    <div class="form-row">
        <label for="node-input-appkey">APP-Key</label>
        <input type="text" id="node-input-appkey" placeholder="APPKey">
    </div>
    <div class="form-row">
        <label for="node-input-clikey">Clinet-Key</label>
        <input type="text" id="node-input-clikey" placeholder="CLIKey">
    </div>

    <br/>
    <div class="form-row">
        <label for="node-input-classname">ClassName</label>
        <input type="text" id="node-input-classname" placeholder="ClassName">
    </div>
    <div class="form-row">
        <label for="node-input-fieldname">FieldName</label>
        <input type="text" id="node-input-fieldname" placeholder="FieldName">
    </div>
</script>
```

ファイルを作成して、インストールしていきます。

```
npm install -g .
```

インストールが完了したら、Node-REDを起動しましょう。

```
node-red-pi --max-old-space-size=128
```

起動がうまくいきましたら、ブラウザで接続しましょう。

```
http://127.0.0.1:1880/
```

以下のようなノードが追加されているはずです。

![addnode.png](https://qiita-image-store.s3.amazonaws.com/0/7257/b233e9be-6b48-f64a-81bd-07de2beb3ac4.png)

# 実際に動かしてみよう

データが格納されることを確認したいので、injectノードを置いてデータを発行させていきます。
incjectノードとncmbdsノードを置いてつなげます。

![connect.png](https://qiita-image-store.s3.amazonaws.com/0/7257/76a9a7c1-dc53-f70d-5d80-7ff8b0bd4c49.png)

ncmbdsノードに必要な値を設定してきましょう。
ncmbdsノードをダブルクリックし、設定画面を表示させます。

![ncmbsetting.png](https://qiita-image-store.s3.amazonaws.com/0/7257/ce97acd1-9639-678b-261c-41fc6302dd29.png)


「Name」には、ノードの名前を設定します。今回は「ncmbtest」と設定します。
「APP-Key」には、ニフティクラウド mobile backendのAPIキーのアプリケーションキーを設定します。
「Client-Key」には、ニフティクラウド mobile backendのAPIキーのクライアントキーを設定します。
「ClassName」には、格納するデータストアのクラス名を指定します。今回は「nodered」と設定します。
「FieldName」には、格納するデータストアのフィールド名を指定します。今回は「message」と設定します。

設定が完了したら、Deployボタンを押して、変更内容を反映させましょう。

![deploy.png](https://qiita-image-store.s3.amazonaws.com/0/7257/a9394f60-a0d6-a619-cac9-2262d528841c.png)

incjectノードのボタンを押して、動作させます。

![run.png](https://qiita-image-store.s3.amazonaws.com/0/7257/28417042-03e2-1f2c-3204-1058a0ddad13.png)

では、格納されているか確認してみましょう。

![ncmbcon.png](https://qiita-image-store.s3.amazonaws.com/0/7257/c493b0cb-8fd0-1cc6-a8ac-84dc0fd826b9.png)


格納されていましたね。

# ノードの情報を変更してみる

incjectノードの情報を変更して、格納される値が変化するかを確認してみます。

![insetting.png](https://qiita-image-store.s3.amazonaws.com/0/7257/d7f790cc-079d-ce62-0fa6-e19862016d72.png)

「Payload」を「string」に変更し、「test message」と設定します。
Deployボタンを押して変更内容を反映させます。

![run2.png](https://qiita-image-store.s3.amazonaws.com/0/7257/9ed8cdfc-59e4-fe29-7d0c-6949f6f3547b.png)

incjectノードのボタンを押して、動作させます。

![ncmbcon2.png](https://qiita-image-store.s3.amazonaws.com/0/7257/88d68915-f299-1b71-c292-dfa07e867570.png)


先ほど設定した文字列が格納されていましたね。

# おわりに

今回は力尽きたので、Raspberry Piらしい使い方を別の機会に書きたいと思います。