首页 > 解决方案 > 是否可以将多个实时传感器数据发布到单个 Google 电子表格?

问题描述

我使用 M5 堆栈制作了一台称重机。测量数据保存在名为“logsheet”的工作表和另一个工作表(称为“chartsheet”)中,以使用该实时数据创建仪表图。现在,我想再创建 60 台这样的称重机,并希望在一个电子表格中显示它们的实时数据。是否可以创建这样的工作表?

这是我的 Arduino 代码:(仅后值函数)

void postValues(float a){

  DynamicJsonDocument doc(capacity);
  doc["sensor"] = a;
  serializeJson(doc, Serial);
  Serial.println("");
  
  serializeJson(doc, buffer, sizeof(buffer)); 

  HTTPClient http;
  Serial.println(http.begin(host));
  
  http.addHeader("Content-Type", "application/json");
  int status_code = http.POST((uint8_t*)buffer, strlen(buffer));
  Serial.printf("status_code=%d\r\n", status_code);
  
  if( status_code == 200 ){
    Stream* resp = http.getStreamPtr();
    DynamicJsonDocument json_response(255);
    deserializeJson(json_response, *resp);
    serializeJson(json_response, Serial); 
    Serial.println("");
  }else{
    Serial.println(http.getString());
  }
  http.end();
}

我的 appSpipt 代码:

function doPost(e) {
  var postjsonString = e.postData.getDataAsString();
  var postdata = JSON.parse(postjsonString);

  var spreadsheet = SpreadsheetApp.openById("####"); //sheetName
  var logSheet = spreadsheet.getSheetByName("logSheet") || spreadsheet.insertSheet("logSheet"); //logsheet
  var chartSheet = spreadsheet.getSheetByName("chartSheet") || spreadsheet.insertSheet("chartSheet"); //chartsheet

  sensor_data = postdata.sensor;
  var date_time =  Utilities.formatDate(new Date(), 'JST', 'yyyy年M月d日 H時m分s秒')
  var values = [date_time, sensor_data];
  logSheet.appendRow(values);
 //chart
  chartSheet.getRange("A1:B1").setValues([values]);

  var max = 25; 
  var min = 0;  
  var charts = chartSheet.getCharts();
  if (charts.length == 0) {
    var chart = chartSheet.newChart().setChartType(Charts.ChartType.GAUGE).addRange(chartSheet.getRange('B1')).setPosition(3, 1, 0, 0).setOption('height', 300).setOption('width', 300).setOption('title', 'Weighing Gauge').setOption('max', max).setOption('min', min).build();
    chartSheet.insertChart(chart);
  }
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


首先要检查的事情

  • 确保您的 Web 应用程序已部署为可供“任何人,甚至是匿名用户”访问
  • 重要的!尝试使用旧编辑器再次部署 Web 应用程序- 新 IDE 在部署 Web 应用程序时存在问题,有时在旧编辑器中重新部署它会解决问题。

示例网络应用程序

function doPost(e) {
  let file = SpreadsheetApp.getActive();
  let sheet = file.getSheetByName("Sheet1");
  
  let id = e.parameter.id;
  let weight1 = e.parameter.weight1;
  let weight2 = e.parameter.weight2;

  sheet.appendRow([id, weight1, weight2])
  
}

然后在任何机器上使用带有 CURL 的简单 POST 请求进行访问:

curl -d "id=0001&weight1=100&weight2=200" -X POST https://script.google.com/a/egs-sbt095.eu/macros/s/[SCRIPTID]/exec

产生这个:

在此处输入图像描述


这个例子使用 cURL 只是为了表明现在电子表格可以从任何地方接收数据。这是同一 POST 请求的另一种变体:

curl -X POST "https://script.google.com/a/egs-sbt095.eu/macros/s/[SCRIPTID]/exec?id=0001&weight1=100&weight2=200"

最后,请记住确保每次进行更改时都重新部署您的 Web 应用程序!


推荐阅读