4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

家の鍵の閉め忘れを防止する Part1

4
Last updated at Posted at 2020-01-03

はじめに

家の鍵を閉め忘れる ということがちょいちょいあります。
防犯面でよろしくないので、閉め忘れを防止するのが目的です。
我が家はオートロック付きマンションですが、それでも玄関の鍵はいわゆるサムターン式です。

なぜ鍵を閉め忘れるのか

理由は単純明快で、鍵を閉めなければならないことを忘れるから。

まずやったこと

鍵の状態を把握するために、セサミのスマートロックを導入しました。
コメント 2020-01-03 112231.png

これにより、現在鍵がOpen/Closeのどちらの状態にあるのかを、スマホから確認できるようになりました。

セサミのスマートロックでできること

  • 鍵のOpen/Close状態の把握
  • IFTTTとの連携
  • 遠隔からOpen/Close制御
  • オートロック
  • 詳細は公式サイトレビューを参照

付属のオートロック機能を使えば、鍵の閉め忘れに対する対策になるとは思う。

しかし、閉め出されるリスクがあるため、あくまでも鍵があいていることを気づかせ、その人の手で閉めさせることを目的にした。
閉め出されてしまうととても大変なようである。

対策

つまり対策は鍵を操作した人に対して、以下のことをする必要がある。

  1. 今鍵が開いていることを気づかせる
  2. 閉めるように促す
  3. 鍵が閉まったことを確認する

動作フロー

  1. IFTTTでスマートロックがOpen/Closeしたら、スプレッドシートへ記録する。こんな感じ。
    図1.png

  2. スプレッドシートが更新されたら、Open/Closeの状態をGAS(Google Apps Script)で取得する。

  3. Openの状態が5分以上続く場合、家庭内Slackへ鍵が開きっぱなしであることを通知する。
    (ゆくゆくはLINEやNest Hubにも通知したい)
    おうちハック.jpg

こんな感じ。
コメント 2020-01-03 152919.png

関連箇所のコード

MyHome.gs
//スプレッドシートが更新されたらトリガーがかかる
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);

その他

今回実装したのは、鍵が開いていたら、それを検知して、閉めるように促す機能まで。
次回は閉まったのかどうかを確認するように機能改善を図ろうと思う。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?