GoogleAppsScript
ifttt
GoogleHome

Google Home でこどものタブレット学習をリマインドする

やりたいこと

こども(小学校低学年)がタブレット通信教育を受講しています。
毎日やれるといいので、Google Homeを利用してリマインドさせます。

前提

 Google Homeは自発的に発声することは標準ではできません。
 「Google Home しゃべらせる」等で検索して、設定しました。
 google-home-notifierをRaspberry Piにインストールし、firebaseの更新をトリガに
 発声させる仕組みにしています。

概要

リマインド.png

1.学習履歴のログ出力

 タブレット教材に、学習結果をメール通知する機能があります。
 メール通知機能(gmailの受信)を元にIFTTTで、スプレッドシートに記録します。

2.学習履歴のチェックとリマインド

 Google Apps Scriptでチェック処理を日次実行し、
 スプレッドシートに当日の記録があるかを確認します。
 確認結果を元に、Google Homeで、家にいるこどもに通知します。

詳細

1.学習履歴のログ出力

タブレット教材に、メールで学習状況を通知する機能があります。
これを利用して、IFTTTで学習履歴をスプレッドシートに蓄積します。

ifttt001.png

 ※1:「xxx@mail.co.jp」は、タブレット教材からメール発信された時の送信元アドレスです。

 このIFTTTの設定で、タブレット教材から連絡メールが送信されると、
 スプレッドシートに以下のように、送信日時、送信者、件名が記録されていきます。
sheet001.png

2.学習履歴のチェックとリマインド

 Google Apps Scriptでスプレッドシート上に当日分の学習履歴があるかどうかを
 チェックします。

1)学習履歴チェックスクリプトの作成

コード.gs
function checkZemi() {

  // -- 各種変数関連の宣言(固定値)---------------------------------------------------------
  // タブレット学習のスプレッドシート
  var spreadsheet = SpreadsheetApp.openById('123xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
  var sheet = spreadsheet.getSheetByName('シート1');

  // シートの日付列
  var posDate = 1;
  // シートのタイトル列
  var posTitle = 3;
  // シートの通知済みフラグの列
  var posNotified = 4;
  // チェック対象の件名(部分一致)
  var chkTitle = "の学習結果のお知らせ"
  // タブレット学習の未完了時のメッセージ
  var message = "今日のタブレット学習が、まだ、終わっていません。タブレット学習を、はじめましょう";


  // -- 各種変数関連の宣言(可変値)---------------------------------------------------------
  // シートの最終行
  var posLastColumn = sheet.getLastRow();
  // 今日の日付を「December 30, 2017」の形式で取得  
  var formattedDate = Utilities.formatDate(new Date(), "GMT", "MMMMMMMMMMMM dd, yyyy");
  // 現在の操作行  
  var currentRow = posLastColumn;
  // 終了の判定フラグ
  var endFlg = false;
  // スプレッドシート上の日付
  var sDate = "";
  // スプレッドシート上のタイトル
  var sTitle = "";
  // スプレッドシート上の完了通知フラグ
  var sNotified = "";



  // -- 処理開始-----------------------------------------------------------------------
  // 日付の列の最終行取得
  sDate = sheet.getRange(currentRow,posDate).getValue();
  // タイトルの列の最終行取得
  sTitle = sheet.getRange(currentRow,posTitle).getValue();
  // 完了通知フラグの最終行取得
  sNotified = sheet.getRange(currentRow,posNotified).getValue();


  // 最終行から上にセルを確認していき、今日のタブレット学習からの連絡メールの受信を確認する
  while( currentRow > 1 && endFlg == false ) {

    // 今日の日付 かつ タイトルが連絡メールの場合
    // indexOf は 検索文字を見つけた開始位置が返却される(見つからない場合は「-1」が返る
    if ( sDate.indexOf(formattedDate) == 0 && sTitle.indexOf(chkTitle) >= 0 ) {
      endFlg = true;
      message = "今日のタブレット学習は、おわっていることを確認しました。お疲れさまでした。明日も頑張りましょう"
      sheet.getRange(currentRow,posNotified).setValue("済");
      break;
    }
    // 1行上のセルに移動
    currentRow --;
    sDate = sheet.getRange(currentRow,posDate).getValue();
    sTitle = sheet.getRange(currentRow,posTitle).getValue();
    sNotified = sheet.getRange(currentRow,posNotified).getValue();
  }

  // 当日分のタブレット学習が未完了 または 
  // 当日分の完了通知がまだなら、
  // メッセージの送信
  if ( endFlg == false || (sDate.indexOf(formattedDate) == 0 && sNotified.equals('')) ) {
    Logger.log(message);
    sendGoogleHomeLiving(message);  
  } else {
    Logger.log("通知済みなので、通知しません");
  }

}

2)チェックスクリプトの起動設定

 ツールバーから起動トリガーを設定します。
 毎日、PM6~7時、PM7~8時、PM8~9時の間で、チェックして、
 まだ終わっていないようであれば、実施を促します。

trigger001.png

まとめ

初投稿なので、内容の善し悪し等、改善の余地もあるかと思います。
不明点等あれば、コメントいただければ、改善します。

Google Homeを使って、日常生活のさまざまな改善に取り組めたらと思っています!