はじめに
家の鍵を閉め忘れる ということがちょいちょいあります。
防犯面でよろしくないので、閉め忘れを防止するのが目的です。
我が家はオートロック付きマンションですが、それでも玄関の鍵はいわゆるサムターン式です。
なぜ鍵を閉め忘れるのか
理由は単純明快で、鍵を閉めなければならないことを忘れるから。
まずやったこと
鍵の状態を把握するために、セサミのスマートロックを導入しました。

これにより、現在鍵がOpen/Closeのどちらの状態にあるのかを、スマホから確認できるようになりました。
セサミのスマートロックでできること
付属のオートロック機能を使えば、鍵の閉め忘れに対する対策になるとは思う。
しかし、閉め出されるリスクがあるため、あくまでも鍵があいていることを気づかせ、その人の手で閉めさせることを目的にした。
閉め出されてしまうととても大変なようである。
対策
つまり対策は鍵を操作した人に対して、以下のことをする必要がある。
- 今鍵が開いていることを気づかせる
- 閉めるように促す
- 鍵が閉まったことを確認する
動作フロー
-
スプレッドシートが更新されたら、Open/Closeの状態をGAS(Google Apps Script)で取得する。
-
Openの状態が5分以上続く場合、家庭内Slackへ鍵が開きっぱなしであることを通知する。
(ゆくゆくはLINEやNest Hubにも通知したい)

関連箇所のコード
//スプレッドシートが更新されたらトリガーがかかる
function myHomekey() {
//listシートを指定
var url = "https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXX/gid=0";
var SpreadSheet_Input = SpreadsheetApp.openByUrl(url);
var Sheet_Input = SpreadSheet_Input.getSheetByName("key");
//タイマー設定(5min)
var timer = 5;
//最新の鍵の状態を取得
var keystatus = getKeystatus(Sheet_Input);
//OpenならSlackへ投稿
if(keystatus == 1){
for(var minute = 0; minute <= timer; minute++){
waitSecond(60); //60秒Wait
keystatus = getKeystatus(Sheet_Input); //鍵の状態を更新
if(keystatus == 1 && minute == timer){
//timerで設定した時間が経ったら警告
postSlack("鍵が開いています。" + "\n" + "すぐに閉めてください!" + "\n");
}
}
}else if(keystatus == 0){
//鍵が閉まったので何もしない
//postSlack("鍵がしまりました");
}else{
postSlack("myHomekey error!!" + "\n" + keystatus);
}
}
//〇秒のSleep
function waitSecond(sec){
Utilities.sleep(sec * 1000);
}
//OpenかCloseかチェックする
function checkStatus(status){
var ret = 0;
if(status == "Locked"){
ret = 0;
}else if(status == "Unlocked"){
ret = 1;
}else{
ret = -1;
}
return ret;
}
function getKeystatus(Sheet_Input){
var lastrow = Sheet_Input.getLastRow(); //最終行取得
var status = Sheet_Input.getRange(lastrow, 2).getValue(); //最終行のステータスを取得
var ret = checkStatus(status); //最終行の状態がOpenかCloseか判断
return ret;
}
function postSlack(word){
var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
var slackApp = SlackApp.create(token);
var options = {
channelId: "#notice", //チャンネル名
userName: "家の鍵を守るマン", //投稿するbotの名前
message: word //投稿するメッセージ
};
slackApp.postMessage(options.channelId, options.message, {username: options.userName});
}
学んだこと
GASでのWaitは以下でできる。(msなので*1000する)
Utilities.sleep(sec * 1000);
その他
今回実装したのは、鍵が開いていたら、それを検知して、閉めるように促す機能まで。
次回は閉まったのかどうかを確認するように機能改善を図ろうと思う。

