0.はじめに
前回の続きです。今回はchart.jsを使用し、mongodbに保存してあるデータの可視化を行います。
1.必要なもの(今回準備したもの)
| 項目 | 数量 | メモ | 
|---|
2.参考にさせていただいたところ
Chart.js使い方。Chart.js使ってデータをグラフ化・視覚化する。
3.mongodbより保存したJSONデータを取得し加工
①mongodb検索用ノードを作成する
 Service項目は、「mongodb-42」を選択する。
 Collection項目は、「SenseData」を入力する。
 Operation項目は、「find」を選択する。
 Name項目は、「DB検索」を入力する。

②JSON加工用のfunctionノードを作成する。
 Name項目は、「JSON整形」を入力する。
 Function項目は、下記を入力する。
var dev = {
  'data': []  
};
for ( var i=0; i < msg.payload.length; i++ ){
   dev.data.push({
       deviceid:msg.payload[i].deviceid,
       timestamp:msg.payload[i].timestamp,
       temp:msg.payload[i].temp,
       humid:msg.payload[i].humid,
       press:msg.payload[i].press
   });
} 
msg.payload = dev;
return msg;
③HTTP 入力ノードを作成する。
 Method項目は、「GET」を選択する。
 URL項目は、「/list」を入力する。

④HTTP 出力ノードを作成する。
4.chart.jsでの折れ線グラフ表示設定
①chart.jsで折れ線グラフを表示するtemplateノードを作成する。
Name項目は、「折れ線チャート」を入力する。
Syntax Highlight項目は、「HTML」を選択する。
Format項目は、「Plain text」を選択する。

Template項目には、下記を入力する。
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Line Chart</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js"></script>
    </head>
    <body>
        <h2>温湿度・気圧 履歴表示(chart.js)</h2>
        <div style="width:30%">
            <div>
                <canvas id="canvas" height="450" width="600"></canvas>
                <div id="chart_legend"></div>
            </div>
        </div>
    <script>
        var jsonData = $.ajax({
            url: './list', dataType: 'json', }).done(function(results){
                var labels= [], data1=[], data2=[], data3=[];
                results["data"].forEach(function(data) {
                    labels.push(data.timestamp);
                    data1.push(parseFloat(data.temp));
                    data2.push(parseFloat(data.humid));
                    data3.push(parseFloat(data.press));
                });
                var lineChartData = { 
                    //X軸のラベル
                    labels : labels,
                    datasets : [
                    {
                        //ラベルの名前
                        label: "温度",
                        //線の下側の色
                        fillColor : "rgba(255,0,0,0.2)",
                        //線の色
                        strokeColor : "rgba(255,0,0,1)",
                        //ポイントの色
                        pointColor : "rgba(255,0,0,1)",
                        pointStrokeColor : "#fff",
                        pointHighlightFill : "#fff",
                        pointHighlightStroke : "rgba(220,220,220,1)",
                        //My First datasetの値
                        data : data1
                    },
                    {
                         label: "湿度",
                         fillColor : "rgba(0,255,0,0.2)",
                         strokeColor : "rgba(0,255,0,1)",
                         pointColor : "rgba(0,255,0,1)",
                         pointStrokeColor : "#fff",
                         pointHighlightFill : "#fff",
                         pointHighlightStroke : "rgba(0,255,0,1)",
                         data :data2
                    },
                    {
                         label: "気圧",
                         fillColor : "rgba(151,187,205,0.2)",
                         strokeColor : "rgba(151,187,205,1)",
                         pointColor : "rgba(151,187,205,1)",
                         pointStrokeColor : "#fff",
                         pointHighlightFill : "#fff",
                         pointHighlightStroke : "rgba(151,187,205,1)",
                         data :data3
                    }
                    ]
                };
            var option = {
    legendTemplate : "<% for (var i=0; i<datasets.length; i++){%><li><span style=\"color:<%=datasets[i].strokeColor%>\">■</span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%>"
};
            //データを読み込んだ後、グラフ化開始
            var ctx = document.getElementById("canvas").getContext("2d");
            var char = new Chart(ctx).Line(lineChartData, option);
            /*
            window.myLine = new Chart(ctx).Line(lineChartData, {
                responsive: true
            },options);
            */
          document.getElementById('chart_legend').innerHTML = char.generateLegend();
       });
     
       
    </script>
    </body>
</html>
②HTTP 入力ノードを作成する。
 Method項目は、「GET」を選択する。
 URL項目は、「/chart」を入力する。

③HTTP 出力ノードを作成する。
5.ブラウザで表示を確認
①任意のブラウザで下記URLに接続する。
http://XXXXXX.mybluemix.net/chart  ※XXXXXXは、自分の環境にあわせて変更してください。
以上で、chart.jsを用いた可視化手順は終了です。
次(その10)は、おまけとしてNode-RED側で温度を判定して、LEDの点灯色を指定してみることを行います。



