【Toitでiot:Script】Googlesheetに書き込む③
esp32からToitサーバーを通して送られたデータをgooglesheetに書き込むスクリプトを作成します。
google spread sheetの作成
グーグルドライブから「新規」⇒「 グーグルスプレッドシート」を選択し、新しいgooglesheetを作成します。
作成したスプレッドシート名は「無題のスプレッドシート」となっていますのでわかり易い名前に変更しておきます。
カズは「toit_send_data」としました。
シートに名前を付ける
スプレッドシートを作成するとグーグルシートが準備されています。
シート名が「シート1」になっていますのでここでもわかり易い名前に変更します。
このシート名はこれから作成するAPIスクリプトで「id」として使います。
カズは「house_data」としました。
見出しの記述
シート名を変更したらシートに見出しを記述します。
esp32から送信された計測データはこの見出しに沿って入力されます。
またこの見出しはスクリプトでパラメータとして使います。
カズは「A1」に「日時」,B1 ⇒ 温度,C1 ⇒ 湿度,D1 ⇒ 気圧としました。
Apps Scriptを作成する
シート名,見出しを入力したら送られれきたセンサーデータをgooglesheetに書き込むスクリプトを作成します。
「拡張機能」 ⇒ 「App Script」と進み、「スクリプトエディタ」を開きます。
スクリプトエディタの名称を入力して名前をつけておきましょう。
名前は自由に付ける事が出来ます。
プログラム(Script)の記述
googlesheetに書き込むスクリプトです。
ボタンクリックで表示されます。
[php]
function doGet(e){
let ss = SpreadsheetApp.getActive();
let sheet = ss.getSheetByName(e.parameter["id"]);
let headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
let lastRow = sheet.getLastRow() + 1;
let cnt = headers.length ;
let val =0;
for (let i = 0;i <= cnt;i++) {
if (headers[i] == "日時") {
val = new Date();
} else {
val = e.parameter[headers[i]];
}
sheet.getRange(lastRow, i + 1).setValue(val);
}
return ContentService.createTextOutput('投稿成功しました’);
}
[/php]
スクリプトの説明
おなじみの doGet(e)関数でパラメータ e を取得します。
「シート名」をパラメータ id で取得しています。
「headers 」で見出しを配列で取得しています。見出しが増えても「getLastColumn()」で取得します。
「getLastRow() 」関数でデータの最後を取得、次の行に入力するために1を加えています。
そしてデータ入力の部分はfor 文で回して e.parameter[headers[i]]で見出しに対応するデータを入力しています。
googlesheetに書き込む ③まとめ
(現在加筆中)
スクリプトは色々記述を変えてこれに落ち着きました。
後はesp32からtoitサーバーを通してgoogleにデータを投げるだけですね。
toitには簡単なサンプルコードも用意されていますので、参考にしながらgooglesheetに書き込むプログラムを作成しようと思います。