javascript - 是否可以将多个实时传感器数据发布到单个 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);
}
}
解决方案
首先要检查的事情
- 确保您的 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 应用程序!
推荐阅读
- javascript - Karma/Jasmine Angular InjectionToken 测试失败,除非我使用 fdescribe
- sql - SQL 中的累积保留率
- flutter - JSON Serializable 插件在更新到 Android Studio 4.2.2 后停止工作
- excel - 尝试更改宏,以便当活动单元格是数字时,它会改变颜色,但如果不是,它不会
- build - ng serve 与 --poll 选项导致无限重新加载
- node.js - 如何在 Next.js 中获取完整的服务器错误日志?
- node.js - 处理来自外部服务器/api的不记名令牌的最佳方法是什么
- c - 如何修复函数调用中指定参数的“不兼容类型”?
- android - 无法从其他应用访问自定义内容提供程序
- r - 使用 GraphQL 的 R 代码不打印嵌套数据