LoginSignup
5
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-28

やりたいこと

こども(小学校低学年)がタブレット通信教育を受講しています。
毎日やれるといいので、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を使って、日常生活のさまざまな改善に取り組めたらと思っています!

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6