「グレンジ Advent Calendar 2018」 10日目を担当の"ito_shin_2017"です
はじめに
この前、家の鍵をスマホで操作できるセサミスマートロックを衝動買いしました
GoogleHome、Alexa、IFTTTとも連携出来るので色々出来そうです
僕は社会人3年目になりますが、二度寝してしまって会社に遅刻した経験が何回かあります
なので、遅刻ギリギリの時間になっても自宅にまだいるときにだけアラートを鳴らしてくれる機能をセサミスマートロックを使用して作ってみました
ざっくり構成
開発環境
-
サーバー
arukasのクラウドサービスを使用しました
DockerHubに上げたImageを指定するだけでサーバーを立ち上げてくれます(※無料で利用可能です) -
言語
golang 1.9(最近勉強中)
IFTTTについて
IFTTTの名前の由来である、「もし(IF)『This(入力)』ならば(Then)『That(出力)』する」の「This」と「That」を対応サービスから選択すれば、新しいサービスが作成できるのだ。
例えば、スマートフォンの位置情報サービス(ロケーションサービス)とメールを組み合わせれば、乗換駅に着いたら、自動的に家族にメールを送るといったことが簡単に実現できる。
↑「さまざまなサービスが連携できる「IFTTT(イフト)」の使い方 (1/3)」から引用
①家の鍵を解錠したら通知
IFTTTの"This"に、セサミのスマートロックの解錠時と施錠時が指定できます
解錠したら通知したいので、「Sesame unlocked」を指定します
IFTTTの"That"には「Webhooks」でサーバーにPOSTして解錠したことを伝えてあげます
②遅刻ギリギリの時間になったら通知
IFTTTの"This"には「Date & Time」の「Every day of the week at」で平日9時45分に指定します
僕の場合、9時45分が"遅刻ギリギリの時間"となります
先ほどと同じように、IFTTTの"That"には「Webhooks」でサーバーにPOSTして遅刻ギリギリの時間になったことを通知させます
(サーバー側でcronを設定しても良いと思うのですがIFTTTの方が設定が簡単で分かりやすいので)
③その日の解錠記録がない場合通知
「②遅刻ギリギリの時間になったら通知」がサーバーに来た時に、サーバーにその日解錠された記録がなければ、
IFTTTにPOSTして通知を送ります
もしその日解錠された記録があれば、無事に起床して家を出ているはずなので何もしないです
④アラートを鳴らす
"This"は「Webhooks」を指定して、「③その日の解錠記録がない場合通知」が来たときに"That"をするようにします
"That"は「VoIP」を指定します
VoIPはIFTTTのアプリを入れた自分のiPhoneに通話をかけてくれます
課題点
- 0時以降家から出た場合は二度寝判定されない
- データベース使っていないので、サーバーのプログラム終了させたら鍵の解錠記録が消えちゃう
#さいごに
実装している最中に気がつきましたが、GoogleAppsScriptを使えばサーバー自体いらなくなりそうな気がしました
起きる時間になったら部屋の明かりをつけて音楽流すとかやられている方もいるので、そういうのも今後真似してやっていきたいと思いました
参考書籍
「Go言語によるWebアプリケーション」
第6章の「REST形式でデータや機能を公開する」を参考にサーバー側を実装しました