前提・実現したいこと
Google App Script(GAS)を用いてArduinoから送られてくるデータをGoogle Spreadsheetに格納したい。
その際、Arduino側から指定した番号によって書き込むシートを選択したい。
番号の指定はパラメータによって渡す。
発生している問題
送りたいデータ等のパラメータはきちんと渡せているが、番号指定のパラメータ(NUMBER)のみうまく渡せていない。
該当のソースコード
GAS
1 var id = 'XXXXXXXXXX'; 2 3function doGet(e) { 4 var spreadsheet=SpreadsheetApp.openById(id).getSheets(); 5 var NUMBER = e.parameter.NUMBER; 6 var sheet=spreadsheet[NUMBER-1]; 7 var newRow = sheet.getLastRow() + 1; 8 9 if (e.parameter == undefined) { 10 var result = 'Parameter undefined'; 11 } 12 else{ 13 var rowData = []; 14 var YEAR = e.parameter.YEAR; 15 var MONTH = e.parameter.MONTH; 16 var DAY = e.parameter.DATE; 17 var HOUR = e.parameter.HOUR; 18 var MIN = e.parameter.MIN; 19 var SEC = e.parameter.SEC; 20 var strDATE=String(YEAR)+'/'+String(MONTH)+'/'+String(DAY)+'_'+String(HOUR)+':'+String(MIN)+':'+String(SEC); 21 22 rowData[0] = e.parameter.Lux; //Lux 23 rowData[1] = e.parameter.Temp; //Temp 24 rowData[2] = e.parameter.RH; //RH 25 rowData[3] = e.parameter.CO2a;//CO2 26 rowData[4] = e.parameter.CO2b; 27 rowData[5] = e.parameter.CO2c; 28 rowData[6] = NUMBER; 29 30 sheet.getRange(newRow,1,1,1).setValue(strDATE); 31 var newRangeData = sheet.getRange(newRow, 2, 1, rowData.length); 32 newRangeData.setValues([rowData]); 33 var result = 'Ok'// Text des Anworts 34 } 35 36 return ContentService.createTextOutput(result); 37}
Arduino
1//該当部のみ記載 2 String URL="https://script.google.com/macros/s/"; 3 URL += key; 4 URL += "/exec?"; 5 URL += "$NUMBER="; 6 URL += Number; 7 URL += "&YEAR="; 8 URL += YEAR; 9 URL += "&MONTH="; 10 URL += MONTH; 11 URL += "&DATE="; 12 URL += DATE; 13 URL += "&HOUR="; 14 URL += HOUR; 15 URL += "&MIN="; 16 URL += MIN; 17 URL += "&SEC="; 18 URL += SEC; 19 20 21 URL += "&Lux="; 22 URL += sensor_Lux; 23 URL += "&Temp="; 24 URL += Temp ; 25 URL += "&RH="; 26 URL += RH ; 27 URL += "&CO2a="; 28 URL += CO2a; 29 URL += "&CO2b="; 30 URL += CO2b; 31 URL += "&CO2c="; 32 URL += CO2c; 33
試したこと
原因の模索→e.parameter.NUMBERが渡せていないことでは?と推定(それに至るまでの経緯を下に記します。)
GASのウェブアプリとして公開のところをやり直す(versionは毎回Newを指定)
###e.parameter.NUMBERのみが渡せていないと判断した経緯
上記のコードではまずシートへの記述が始まらなかったので、**var sheet=spreadsheet[NUMBER-1]でなく--[1]などとしてシートを開いた。
その後if(e.parameter==undefined)**のブロックの後に
else if(e.parameter.NUMBER==undefined){新しい行の左端のセルに適当な単語を入力させる}といった処理を追加したところ、
指定した単語が延々とセルに書き込まれたため。
また、else ifとは違うアプローチとして、上記コードではDatarowの6番目としてNUMBER(4行目でe.parameter.NUMBERを代入している)を格納して試しているが、セルには何も表示されなかったため。
それ以外の時刻や各種センサーの値はシートに正しく書き込まれていった。
補足情報
シリアルモニタで最終的なURLを確認できるようにしているのですが、シリアルモニタには&NUMBER=1&....と書かれいます。
また、通信も成功しているようなので、GAS側で拾えていないのではと思います。
初質問ですので、至らないところがありましたらご教授願います。
回答1件
あなたの回答
tips
プレビュー