※ 以前使用していたスクリプトのメモ。スマートリモコンを変更してから、遅延がひどくなったので使用停止中。
Google スプレットシート:Holiday
Google Apps Script:Holiday
記載したスクリプト
// その日の指定時刻にトリガーを設定
function setTrigger() {
var today = new Date();
//スプレットシートを呼び出して、指定時間を取得
var spreadsheet = SpreadsheetApp.openById('Google スプレットシートのURLの黒塗り部分');
var sheet = spreadsheet.getActiveSheet();
//var setTime = sheet.getRange('B3').getDisplayValue();
var value = sheet.getRange('B3:D3').getValues();
var setTime = value[0][0];
var hitDate = value[0][1];
var delDate = value[0][2];
Logger.log('設定時間 %s', setTime);
if( delDate.getFullYear() == today.getFullYear() && delDate.getMonth() == today.getMonth() && delDate.getDate() == today.getDate() ){
Logger.log('解除日 %s', delDate);
//sheet.getRange("D3").setValue("");
return;
}
if( hitDate.getFullYear() == today.getFullYear() && hitDate.getMonth() == today.getMonth() && hitDate.getDate() == today.getDate() ){
Logger.log('実行日 %s', hitDate);
//sheet.getRange("C3").setValue("");
} else {
//土日か判定
var weekInt = today.getDay();
if(weekInt <= 0 || 6 <= weekInt){
Logger.log('土日');
return;
}
//祝日か判定
var calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
var calendar = CalendarApp.getCalendarById(calendarId);
var todayEvents = calendar.getEventsForDay(today);
if(todayEvents.length > 0){
Logger.log('祝日');
return;
}
}
var setHour = 6;
var setMinute = 0;
var offset = setTime.indexOf('時');
if( offset != -1 ){
setHour = setTime.substr(0, offset).replace(/[^\d]/g, '');
setMinute = setTime.substr(offset+1).replace(/半/, '30').replace(/[^\d]/g, '');
}
Logger.log('設定時間 [%s] 時 [%s] 分', setHour, setMinute);
// 7時~18時は、指定があっても電気をつけない
if( setHour > 7 && setHour < 18 ){
Logger.log('電気オン不要');
return;
}
//時間の判定
var hour = today.getHours();
var min = today.getMinutes();
if( hour*60+min > setHour*60+setMinute ){
Logger.log('時間過ぎ');
return;
}
//新しいトリガーを作成(秒の誤差をなくすため、1分前に起動 ※0時未対応)
if( setMinute == 0 ){
today.setHours(setHour-1);
today.setMinutes(59);
} else {
today.setHours(setHour);
today.setMinutes(setMinute-1);
}
ScriptApp.newTrigger("main").timeBased().at(today).create();
Logger.log('トリガー設定');
}
// その日のトリガーを削除する関数(消さないと残る)
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "main") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
// 実行したいスクリプト本体
function main() {
deleteTrigger();
// 秒の誤差をなくす
var today = new Date();
Utilities.sleep((60-today.getSeconds())*1000);
// IFTTT の Webhook URL
var url = "https://maker.ifttt.com/trigger/Holiday/with/key/~";
var response = UrlFetchApp.fetch(url);
var content = response.getContentText("UTF-8");
Logger.log('電気オン');
}
function setTrigger() {
var today = new Date();
//スプレットシートを呼び出して、指定時間を取得
var spreadsheet = SpreadsheetApp.openById('Google スプレットシートのURLの黒塗り部分');
var sheet = spreadsheet.getActiveSheet();
//var setTime = sheet.getRange('B3').getDisplayValue();
var value = sheet.getRange('B3:D3').getValues();
var setTime = value[0][0];
var hitDate = value[0][1];
var delDate = value[0][2];
Logger.log('設定時間 %s', setTime);
if( delDate.getFullYear() == today.getFullYear() && delDate.getMonth() == today.getMonth() && delDate.getDate() == today.getDate() ){
Logger.log('解除日 %s', delDate);
//sheet.getRange("D3").setValue("");
return;
}
if( hitDate.getFullYear() == today.getFullYear() && hitDate.getMonth() == today.getMonth() && hitDate.getDate() == today.getDate() ){
Logger.log('実行日 %s', hitDate);
//sheet.getRange("C3").setValue("");
} else {
//土日か判定
var weekInt = today.getDay();
if(weekInt <= 0 || 6 <= weekInt){
Logger.log('土日');
return;
}
//祝日か判定
var calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
var calendar = CalendarApp.getCalendarById(calendarId);
var todayEvents = calendar.getEventsForDay(today);
if(todayEvents.length > 0){
Logger.log('祝日');
return;
}
}
var setHour = 6;
var setMinute = 0;
var offset = setTime.indexOf('時');
if( offset != -1 ){
setHour = setTime.substr(0, offset).replace(/[^\d]/g, '');
setMinute = setTime.substr(offset+1).replace(/半/, '30').replace(/[^\d]/g, '');
}
Logger.log('設定時間 [%s] 時 [%s] 分', setHour, setMinute);
// 7時~18時は、指定があっても電気をつけない
if( setHour > 7 && setHour < 18 ){
Logger.log('電気オン不要');
return;
}
//時間の判定
var hour = today.getHours();
var min = today.getMinutes();
if( hour*60+min > setHour*60+setMinute ){
Logger.log('時間過ぎ');
return;
}
//新しいトリガーを作成(秒の誤差をなくすため、1分前に起動 ※0時未対応)
if( setMinute == 0 ){
today.setHours(setHour-1);
today.setMinutes(59);
} else {
today.setHours(setHour);
today.setMinutes(setMinute-1);
}
ScriptApp.newTrigger("main").timeBased().at(today).create();
Logger.log('トリガー設定');
}
// その日のトリガーを削除する関数(消さないと残る)
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "main") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
// 実行したいスクリプト本体
function main() {
deleteTrigger();
// 秒の誤差をなくす
var today = new Date();
Utilities.sleep((60-today.getSeconds())*1000);
// IFTTT の Webhook URL
var url = "https://maker.ifttt.com/trigger/Holiday/with/key/~";
var response = UrlFetchApp.fetch(url);
var content = response.getContentText("UTF-8");
Logger.log('電気オン');
}