睡眠時間自動記録(gas,Alexa,IFFFT)
自分の睡眠時間を記録する方法を、考えました。
あくまで僕の生活習慣に合わせたので、時間の設定などは各自でお願いします
やりたいこと
アレクサ、おやすみ
アレクサ、おはよう
の合図により就寝時刻と、起床時刻がgoogleカレンダーに記録され、
その時間差から睡眠時間を計算する。
どうやってやるのか
- AlexaとIFFFTを連携させる
アレクサの定型アクションを使ってIFFFTのアプレットを実行する
- IFFFTとGoogleCalenderを連携させる
IFFFT側ではアレクサとgoogleCalenderを連携させておいて、就寝時刻を記録するアプレットと起床時刻を記録するアプレットの二つを作成する
- GoogleCalenderのデータ(就寝時刻と起床時刻)を取得し、差から睡眠時間を求め、それをgooglecarenderに記録する。
イメージ
これで、アレクサおやすみと言うと、その時刻がカレンダーに追加されます
起床時刻も同じことです。
そして、その記入された二つのデータから時間を抽出し、差をgasで求めます!
全コード
function sleepFunction() {
const calender=CalendarApp.getDefaultCalendar();
//今日と昨日の時刻を取得
let today = new Date();
let yesterday =
new Date(today.getFullYear(), today.getMonth(),today.getDate() - 1);
let hour =0;
let minute =0;
//起床時間(11時に実行時点で一つしかないので確定で1つしか取得しない)
const wakeup_events =
calender.getEventsForDay(today, {search: '起床時刻'});
const wakeup_start = wakeup_events[0].getStartTime();
const wakeup_hours =wakeup_start.getHours();
const wakeup_minutes =wakeup_start.getMinutes();
let sleep_events =
calender.getEventsForDay(today, {search: '就寝時刻'});
//12時過ぎてから寝た場合
if(sleep_events.length>0){
let sleep_start = sleep_events[0].getStartTime();
let sleep_hours =sleep_start.getHours();
let sleep_minutes =sleep_start.getMinutes();
hour =wakeup_hours - sleep_hours;
minute =wakeup_minutes - sleep_minutes;
if(minute>60){
minute -=60;
hour +=1;
}
//起床時間の分数ー就寝時間の分数がマイナスだった場合
if(minute<0){
hour -=1;
minute = 60 + wakeup_minutes - sleep_minutes;
}
}
//12時前に寝た場合
else{
const yesterday_sleep_events =calender.getEventsForDay(yesterday, {search: '就寝時刻'});
let sleep_start = yesterday_sleep_events[yesterday_sleep_events.length-1].getStartTime();
let sleep_hours =sleep_start.getHours();
let sleep_minutes =sleep_start.getMinutes();
let yesterday_minute =60 - sleep_minutes;
let yesterday_hour =23 - sleep_hours;
if(yesterday_minute===0){
yesterday_hour +=1;
}
// console.log(yesterday_hour);
// console.log(yesterday_minute);
hour =yesterday_hour + wakeup_hours;
minute =yesterday_minute + wakeup_minutes;
if(minute>60){
minute -=60;
hour +=1;
}
// console.log(`今日睡眠時間は ${hour}時間 ${minute}分です`);
}
//カレンダーに書き込みます。
let title =`睡眠時間${hour}時間${minute}分です`;
let startTime = new Date;
let endTime = new Date;
let event = calender.createEvent(title,startTime,endTime);
event.setColor(CalendarApp.EventColor.PALE_RED);
}