Edited at

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

More than 1 year has passed since last update.


やりたいこと

こども(小学校低学年)がタブレット通信教育を受講しています。

毎日やれるといいので、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を使って、日常生活のさまざまな改善に取り組めたらと思っています!