#やりたいこと
こども(小学校低学年)がタブレット通信教育を受講しています。
毎日やれるといいので、Google Homeを利用してリマインドさせます。
#前提
Google Homeは自発的に発声することは標準ではできません。
「Google Home しゃべらせる」等で検索して、設定しました。
google-home-notifierをRaspberry Piにインストールし、firebaseの更新をトリガに
発声させる仕組みにしています。
#概要
###1.学習履歴のログ出力
タブレット教材に、学習結果をメール通知する機能があります。
メール通知機能(gmailの受信)を元にIFTTTで、スプレッドシートに記録します。
###2.学習履歴のチェックとリマインド
Google Apps Scriptでチェック処理を日次実行し、
スプレッドシートに当日の記録があるかを確認します。
確認結果を元に、Google Homeで、家にいるこどもに通知します。
#詳細
###1.学習履歴のログ出力
タブレット教材に、メールで学習状況を通知する機能があります。
これを利用して、IFTTTで学習履歴をスプレッドシートに蓄積します。
※1:「xxx@mail.co.jp」は、タブレット教材からメール発信された時の送信元アドレスです。
このIFTTTの設定で、タブレット教材から連絡メールが送信されると、
スプレッドシートに以下のように、送信日時、送信者、件名が記録されていきます。
###2.学習履歴のチェックとリマインド
Google Apps Scriptでスプレッドシート上に当日分の学習履歴があるかどうかを
チェックします。
####1)学習履歴チェックスクリプトの作成
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時の間で、チェックして、
まだ終わっていないようであれば、実施を促します。
#まとめ
初投稿なので、内容の善し悪し等、改善の余地もあるかと思います。
不明点等あれば、コメントいただければ、改善します。
Google Homeを使って、日常生活のさまざまな改善に取り組めたらと思っています!