【Toitでiot:Script】Googlesheetに書き込む③

26/01/2022

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に書き込むプログラムを作成しようと思います。

スポンサーリンク

26/01/2022MEMO

Posted by KAZU