Bluemix에서 IoT 온습도, 기압을 수집·축적·가시화+LED 제어 그 9

0. 소개



지난번 의 계속입니다. 이번에는 chart.js를 사용하여 mongodb에 저장된 데이터를 시각화합니다.

1. 필요한 것(이번 준비한 것)




품목
수량
메모



2. 참고로 한 곳



Chart.js 사용법. Chart.js를 사용하여 데이터를 그래프화하고 시각화합니다.

3. mongodb에서 저장된 JSON 데이터를 얻고 가공



①mongodb 검색용 노드 작성
서비스 항목은 "mongodb-42"를 선택합니다.
Collection 항목은 "SenseData"를 입력합니다.
Operation 항목은 "find"를 선택합니다.
Name 항목은 「DB 검색」을 입력한다.


②JSON 가공용의 function 노드를 작성한다.
Name 항목은 「JSON 성형」을 입력한다.
"Function"항목은 다음을 입력합니다.

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개의 노드를 접속한다.


4. chart.js에서 꺾은선형 차트 표시 설정



①chart.js에서 꺾은선형 차트를 표시하는 template 노드를 작성한다.
Name 항목은 "꺾은 선형 차트"를 입력합니다.
Syntax Highlight 항목은 "HTML"을 선택합니다.
Format 항목은 "Plain text"를 선택한다.


Template 항목에는 다음을 입력합니다.

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 출력 노드를 작성한다.

④ 작성한 3개의 노드를 접속한다.


5. 브라우저에서 표시 확인



① 임의의 브라우저로 하기 URL에 접속한다.
ht tp // // 왓 x. myb 에미 x. 네 t/차 rt ※XXXXXX는, 자신의 환경에 맞추어 변경해 주세요.

② 그래프가 표시되는 것을 확인한다.


이것으로 chart.js를 사용한 시각화 절차가 종료됩니다.
다음( 그 10 )은, 덤으로서 Node-RED측에서 온도를 판정해, LED의 점등색을 지정해 보는 것을 실시합니다.

좋은 웹페이지 즐겨찾기