前回定時に薬飲んだかLINEにリマインドする機能をご紹介したのですが、私は聞きっぱなしで記録し忘れることが判明しました。
これでは毎日飲んだか忘れてしまうことを完全に防げていないので記録されるまで1時間おきに確認をLINEに投げ続けるように修正したいと思います。
機能追加後のコード
前提として、薬を飲んだか確認する時刻は、alarmというシートで19時に設定しています。
「飲んだ」と記録が来るまで、毎時20時、21時、23時…と設定を上書きしていき、「飲んだ」と記録が来たら19時に戻す、という感じです。
19時になったらフラグを1にして、フラグが1ならリマインド時刻の設定を上書きします。
//19時以降「飲んだ」が来るまでトリガーで1時間ごとにリマインドするためにalertシートの時間を上書きする。
function remindCheck(){
const alatrtSheet = SpreadsheetApp.openById(SHEET_KEY).getSheetByName('alarm');
const noticeTimeRange = alatrtSheet.getRange("F17");//セル固定なので編集時は注意
const flagSheet =getMedicineLogSheet();
const flag = flagSheet.getRange("E1").getValue();//セル固定なので編集時は注意
const now = new Date().getHours();
if(flag === 1 && now != 19){
Logger.log("flg 1 and not 19'");
const now = new Date();
const setHour = now.getHours() + 1;
if(setHour == 24){setHoue = 0;} // 24の場合は0に戻る
Logger.log("setHour is "+setHour);
noticeTimeRange.setValue(setHour);
}
return;
}
//トリガーで19時にリマインドフラグを1にする。毎日18-19時に発火。
function flagSet(){
const flagSheet =getMedicineLogSheet();
const dateArry = flagSheet.getRange("A:A").getValues().flat().filter(function(x){return !(x === null || x === undefined || x === "");});
const latestDate = new Date(dateArry[dateArry.length - 1]).getDate();
const now = new Date().getDate();
if(latestDate != now){flagSheet.getRange("E1").setValue(1);}//セル固定なので編集時は注意
}
//薬チェックシートに日時と飲んだことを記録する。
function logMedicine() {
const sheet = getMedicineLogSheet();
const today = Utilities.formatDate(new Date(),"JST","yyyy/MM/dd HH:mm:ss");
sheet.appendRow([today,"飲んだ"]);
//リマインド用の設定リセット
const alatrtSheet = SpreadsheetApp.openById(SHEET_KEY).getSheetByName('alarm');
const noticeTimeRange = alatrtSheet.getRange("F17");//セル固定なので編集時は注意
noticeTimeRange.setValue("19");
const flagSheet =getMedicineLogSheet();
flagSheet.getRange("E1").setValue(0);//セル固定なので編集時は注意
return message = '記録しました';
}
//薬チェックシートの最後の飲んだ記録を返す。
function checkMedicineLog(){
const sheet = getMedicineLogSheet();
const lastRow = sheet.getLastRow();
const lastLog = sheet.getRange(lastRow,1).getValue();
let message = "";
if(lastLog instanceof Date){
message = "前回飲んだ日時です。\n" + Utilities.formatDate(new Date(lastLog),"JST","yyyy/MM/dd HH:mm:ss") + "\n飲んだら「飲んだ」で記録!"
}else{
message = "前回飲んだ日時が見つかりませんでした。"
}
return message;
}
太字の部分が今回追加した部分です。
ちょっとした追加なのでやっつけ感もありますが・・・
remindCheck()とflgSet()はそれぞれGASのトリガー機能で自動で実行されるようにしています。
トリガー設定
remindCheck()... 毎時実行
flgSet()... 毎日18-19時に実行
まとめ
忘れるっていやですね。
コメント