2016-02-05 65 views
1

我有2个tempsensors,每10分钟发送一次温度到firebase。 我火力的结构是这样的:创建从火力点到谷歌图表的2个温度读数图表

{ 
AB: { 
    -K9kbKg4iqzaGP_mbKIC: { 
    date: "05 Feb 2016 08:47:27 +0000", 
    value: "013.2" 
    }, 
    BattLevel: {} 
}, 
AC: { 
    -K9kaqlycXMDbH-LpVrH: { 
    date: "05 Feb 2016 08:45:19 +0000", 
    value: "009.4" 
    }, 
    BattLevel: {} 
    } 
} 

我想创建一个谷歌图表

但我似乎并没有得到JSON解析赖特。 如果我将json路径设置为 https://tempraspberry.firebaseio,我可以添加1个传感器的温度来显示。 com/AB.json

/<script> 

    // onload callback 
    function drawChart() { 

     // JSONP request 
     var jsonData = $.ajax({ 
      url: 'https://tempraspberry.firebaseio.com/AB.json', 
      data: {page: 1}, 
      dataType: 'jsonp', 
     }).done(function (results) { 

      var data1 = new google.visualization.DataTable(); 

      data1.addColumn('datetime', 'Time'); 
      data1.addColumn('number', 'Temp'); 

      $.each(results, function (i, row) { 
       data1.addRow([ 
        (new Date(row.date)), 
        parseFloat(row.value) 
       ]); 
      }); 

      //tweede chart 

      var jsonData = $.ajax({ 
       url: 'https://tempraspberry.firebaseio.com/AC.json', 
       data: {page: 1}, 
       dataType: 'jsonp', 
      }).done(function (results) { 

       var data2 = new google.visualization.DataTable(); 

       data2.addColumn('datetime', 'Time'); 
       data2.addColumn('number', 'Temp'); 

       $.each(results, function (i, row) { 
        data2.addRow([ 
         (new Date(row.date)), 
         parseFloat(row.value) 
        ]); 
       }); 

      }); 
      //einde tweede chart 
     }); 
     var joinedData = google.visualization.data.join(data1, data2, 'full', [[0, 0]], [1], [1]); 

     var chart = new google.visualization.LineChart(document.querySelector('#chart_div')); 
     chart.draw(joinedData, { 
      height: 300, 
      width: 600, 
      interpolateNulls: true 
     }); 
    } 

    // load chart lib 
    google.load('visualization', '1', { 
     packages: ['corechart'] 
    }); 

    // call drawChart once google charts is loaded 
    google.setOnLoadCallback(drawChart); 

</script> 

我用上面的代码找不到变量data1。

+0

您标题说“Highcharts”,但实际上使用的是谷歌的图表。请更新标题或您的代码和标签。 –

+0

抱歉粘贴了错误的代码。现在是正确的代码。 – GoempieK

回答

0

看起来像一个范围问题,声明DataTable前面,这样的事情...

function drawChart() { 
    var data; 
    var sensors; 

    sensors = ['AB', 'AC']; 
    data = new google.visualization.DataTable(); 
    data.addColumn('datetime', 'Time'); 
    data.addColumn('number', 'Temp'); 

    // start process 
    requestData(); 

    function requestData() { 
    var nextSensor; 

    if (sensors.length > 0) { 
     nextSensor = sensors.pop(); 
     $.ajax({ 
     url: 'https://tempraspberry.firebaseio.com/' + nextSensor + '.json', 
     data: {page: 1}, 
     dataType: 'jsonp', 
     }).done(loadData); 
    } else { 
     loadChart(); 
    } 
    } 

    function loadData(results) { 
    $.each(results, function (i, row) { 
     data.addRow([ 
     (new Date(row.date)), 
     parseFloat(row.value) 
     ]); 
    }); 
    requestData(); 
    } 

    function loadChart() { 
    var chart = new google.visualization.LineChart(document.querySelector('#chart_div')); 
    chart.draw(data, { 
     height: 300, 
     width: 600, 
     interpolateNulls: true 
    }); 
    } 
} 

google.load('visualization', '1', { 
    packages: ['corechart'] 
}); 
google.setOnLoadCallback(drawChart); 
+0

上面的代码表示感谢,唯一的问题是它将AB和AC的结果放在同一个数据表中。我应该得到一个数据表data1和data2。感谢您的工作示例。试图改变它,以填充data1和data2。 – GoempieK

0

感谢有小的调整现在的工作。 我现在有2个数据表显示在一个Google图表上。 我知道大概的代码是不漂亮,但它工作:-)

<script> 

function drawChart() { 
    var data1; 
    var data2; 
    var sensors; 

    sensors = ['AB', 'AC']; 

    data1 = new google.visualization.DataTable(); 
    data2 = new google.visualization.DataTable(); 
    data1.addColumn('date', 'Tijd'); 
    data1.addColumn('number', 'Paleis Zora'); 
    data2.addColumn('date', 'Tijd'); 
    data2.addColumn('number', 'Buiten'); 

    // start process 
    requestData(); 

    function requestData() { 

      $.ajax({ 
       url: 'https://tempraspberry.firebaseio.com/AB.json', 
       data: {page: 1}, 
       dataType: 'jsonp', 
      }).done(loadData); 
     } 

    //eerste datatable 
    function loadData(results) { 
     $.each(results, function (i, row) { 
      data1.addRow([ 
       (new Date(row.date)), 
       parseFloat(row.value) 
      ]); 
     }); 
     requestData2(); 
    } 
    //tweededatatable 
    function requestData2() { 

     $.ajax({ 
      url: 'https://tempraspberry.firebaseio.com/AC.json', 
      data: {page: 1}, 
      dataType: 'jsonp', 
     }).done(loadData2); 
    } 

    //eerste datatable 
    function loadData2(results) { 
     $.each(results, function (i, row) { 
      data2.addRow([ 
       (new Date(row.date)), 
       parseFloat(row.value) 
      ]); 
     }); 
     loadChart(); 
    } 



    function loadChart() { 
     var joinedData = google.visualization.data.join(data1, data2, 'full', [[0, 0]], [1], [1]); 

     var chart = new google.visualization.LineChart(document.querySelector('#chart_div')); 
     chart.draw(joinedData, { 
      height: 500, 
      width: 800, 
      interpolateNulls: true 
     }); 
    } 

} 



google.load('visualization', '1', {packages:['corechart'], callback: drawChart});