【GASでIoT】「お天気インジゲータ」の作成(その3)Googleスプレッドシート上のセルの値をレスポンスするだけの簡単なWEBアプリをGASで用意する
ラズベリーパイを使って傘の要否をLEDの点灯色で表示させる、「お天気インジゲータ」について、先回の記事の続きになります。
先回ではGoogleスプレッドシート上に天気情報を取り込んで、「お天気インジゲータ」で利用するための「判定」値をシート上に表示させるところまでを行いました。
今回の記事では、外部からアクセスして「判定」値をレスポンスする簡単なWEBアプリについてご説明します。
特定のセルの値をレスポンスするだけの簡単なプログラムをGAS(GoolgeAppsScript)で作る
「お天気インジゲータ」では、先回の記事で作成した、Googleスプレッドシートの「判定(MAX)」部分([E10]セル)にある数値を利用しています。
ラズベリーパイ側からこの値を利用するために、外部からアクセスすると、この値がレスポンスされる、ごく簡単なWEBアプリをGAS(Goolge Apps Script)で作成します。
ここで、スプレッドシートのIDと、シートの名称を確認しておきます。
IDは、スプレッドシートを表示させた状態で、ブラウザのヘッドラインに映し出される以下の<この部分>のことです。
https://docs.google.com/spreadsheets/d/<この部分>/edit#gid=0
シートの名称は、下側にある見出しを確認し、「天気情報」となっていれば結構です。
早速プログラムを作成しましょう。
まず、Googleドライブを開き、「新規」メニューから、GASプロジェクトを1つ作成してください。(下図参照)
すると、プロジェクトが作成されますので、適当な名称にしておきます。プロジェクトでは、コードを記載するモジュールが自動表示されます。(「コード.gs」という名前になっています)
ここに、以下のコードを貼り付けてください。
//-----------------------------------------
//----ラズパイで天気情報をLED色表示-----------------
//----レスポンス 100:赤 10:黄 0:緑--------
//---著作:Particlemethod-2021年11月22日-----
//---無断複製・転載・配布を禁じます-------------
//-----------------------------------------
function doGet(e) {
if(e.parameter.x == null){
//アプリケーションを取得|スプレッドシートのIDは各自のものを記入
var myApp = SpreadsheetApp.openById('☆スプレッドシートのID☆');
//対象シートをシートの名前を指定して取得
var mySheet = myApp.getSheetByName('天気情報');
//判定指標をレスポンスとして返す
return ContentService.createTextOutput(mySheet.getRange(10,5).getValue());
}
}
上記のコード中の ☆スプレッドシートのID☆ はご自身のスプレッドシートのIDに変えて、最後に保存します。
作成したプログラムをデプロイして、WEBアプリとして使える様にする
次に、GASで作成したプログラムをデプロイします。
デプロイとは、URLと紐づけして、外部からWEBアプリとしてアクセスできる様にする事です。
手順については以下の記事をご覧ください。
デプロイで気を付けるのが、公開設定です。実行ユーザーは「自分」アクセスできるユーザーは「全員」を選んでください。
こうすると、Googleにログインしなくてもこのアプリが実行できます。(ラズベリーパイ側からGoolgeログインを自動的に行うのは困難ですので、この様にします)
最後に、デプロイした時の実行URLをメモして、WEBアプリの準備は終了です。
なお、ここで、このスクリプトが正しく動くか、プロジェクトの上にある「実行ボタン」を押して、デモをしたくなりますが、残念ながらうまくいきません。
このプログラムは外部からアクセスする前提で作成しているため、プロジェクト内で実行した場合、エラーが出されてしまいます。
GASのプログラムについての簡単な説明
以下は、プログラムの内容の説明です。興味の無い方はスルー頂いても差し支えありません。
function doGet(e) {・・・ return xxx}
doGet( )関数は外部からアクセスがあった場合に{ }内を実行します。引数eはイベントパラメータを呼ばれるもので、URLに続いて付加情報(URLに続いて ?・・・ の形で追加する)を加えてアクセスされた場合に、それを受け取る変数です。
なお、最後にreturn・・・を記載しておくと、レスポンスとしてその内容がアクセスユーザに返されます。
if(e.parameter.x == null){・・・}
このif文は、イベントパラメータが無かった場合の分岐です。
今回は、すべてイベントパラメータ無しでアクセスしますので、意味のない分岐ですが、今後の利用のために残してあります。(e.parameter.x とは、「?x=・・・」という文字を加えてアクセスした場合に使う処理で、これも今回は意味のない記述ですが、ヒナ型として残しています)
var myApp = SpreadsheetApp.openById('☆スプレッドシートのID☆');
var mySheet = myApp.getSheetByName('天気情報');
この2文は、それぞれ「対象のスプレッドシート」および「天気情報」シートを取得しています。
return ContentService.createTextOutput( );
最も肝心な1文です。ContentService.createTextOutput() により、取得した値をWEB上に投げる準備を行い、returnでレスポンスとして返しています。この時の引数 mySheet.getRange(10,5).getValue()は、対象シート(「天気情報」シート)の10行・5列目のセルの値(つまり「判定(MAX)」の値)を示しています。
今回の記事はここまでです。次は最後の記事で、ラズベリーパイ側の配線およびプログラムについて説明します。
この記事が気に入ったらサポートをしてみませんか?