Sesame と Nature Remo を使って帰宅時に自動でリビングの電気をつける
概要
鍵の解錠 (or 施錠) をトリガーに、Sesame Webhook と Nature Remo を使って帰宅時にリビングの電気を自動でつける仕組みを実現しました。
実現するにあたって、Sesame Webhook では「デバイス ID」 と 「鍵の状態 (locked
or unlocked
)」しか取得できないため(2019/10/28 現在)、鍵の状態が変わったのが 帰宅時 なのか 外出時 なのかを別途判定させる必要があります。
そこで、Nature Remo を使って部屋の照度を Google スプレッドシート に毎分記録しておき、 鍵の状態が変わる 5 分前の照度が低いなら帰宅時である と判定させるようにしました。
構成
部屋の照度の記録
必要なもの
- Nature Remo
- GAS
- Google スプレッドシート
フロー
- 時間ベースのマイトリガーで 1 分おきに GAS を起動
- (GAS) Nature Remo API を叩き、部屋の照度を取得
- (GAS) 取得した照度を Google スプレッドシートに記録
Nature Remo API のリクエスト制限
サーバは 5分以内に30回 以上のリクエストを受けるとその後ステータスコード 429 を返す。
https://developer.nature.global/
解錠 (or 施錠) → リビング ON
必要なもの
- Sesame Webhook
- GAS
- Google スプレッドシート
- IFTTT
フロー
- (Sesame Webhook) 解錠 or 施錠をトリガーに GAS へリクエスト
- (GAS) 5 分前の部屋の照度が低ければ、IFTTT へリクエスト
- (IFTTT) Nature Remo でリビングの電気をつける (or 帰宅時用のシーンを起動)
各種設定など
IFTTT
-
Applet 作成ページ へアクセス
-
This
> Webhooks
> Receive a web request
を選択
-
Event Name
に適当なイベント名を設定して (ここでは arrived_home
とします) Create trigger
を選択
-
That
> Execute scene
または Control light
を選択して、帰宅時の状態を設定 (リビングの電気をつける等)
-
Create Action
を選択して Applet を作成
This
> Webhooks
> Receive a web request
を選択Event Name
に適当なイベント名を設定して (ここでは arrived_home
とします) Create trigger
を選択That
> Execute scene
または Control light
を選択して、帰宅時の状態を設定 (リビングの電気をつける等)Create Action
を選択して Applet を作成その後、My services
> Webhooks
> Documentation
から Webhook URL を確認します。
具体的には、https://maker.ifttt.com/trigger/arrived_home/with/key/{YOUR_KEY}
になります。
{YOUR_KEY}
はご自身のものと置き換えてください
GAS
Remo API を叩いてセンサー情報を取得する部分は、リビングの環境監視ダッシュボードを60分で作る方法(Nature Remo Cloud APIとGoogleサービス連携) を参考にしています。
スプレッドシートの用意
- https://docs.google.com/spreadsheets/u/0/ から新しいスプレッドシートを作成
- ワークブックの名前は任意に、シートの名前は
log
に変更 - A1に
日時
、B1に気温
、C1に湿度
、D1に照度
を入力してヘッダー行を作成
こんな感じになります。 (もちろん実際にはまだデータは入らないです)
コード
スプレッドシートの用意ができたら、ツール
> スクリプトエディタ
を選択して、以下をおこなうコードを作成します。
- Nature Remo API を叩いてスプレッドシートにデータを記録
- (Sesame Webhook からの) POST リクエストを受け付けて、5 分前の部屋の照度が低ければ IFTTT へリクエストを送信
var spreadsheetId = 'xxx'; // 書き換える
// データを取得してシートへ書き込む
function remo() {
var data = getDevicesData();
writeNewestEvents(
{
te: data[0].newest_events.te.val, // 気温
hu: data[0].newest_events.hu.val, // 湿度
il: data[0].newest_events.il.val, // 照度
},
// 最下行
SpreadsheetApp.openById(spreadsheetId).getSheetByName('log').getDataRange().getValues().length + 1
);
}
// Nature Remo API からデータを取得する
function getDevicesData() {
var remo_url = "https://api.nature.global/1/devices";
var remo_access_token = 'xxx'; // 書き換える
"Content-Type" : "application/json;",
'Authorization': 'Bearer ' + remo_access_token
};
var params = {
"method": "get",
"headers": headers
};
return JSON.parse(UrlFetchApp.fetch(remo_url, params));
}
// シートへ書き込む
function writeNewestEvents(events, row) {
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName('log');
sheet.getRange(row, 1).setValue(new Date());
sheet.getRange(row, 2).setValue(events.te);
sheet.getRange(row, 3).setValue(events.hu);
sheet.getRange(row, 4).setValue(events.il);
}
function doPost(e) {
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName('log');
var row_num = sheet.getDataRange().getValues().length;
var il_5_minutes_ago = sheet.getRange(row_num - 5, 4).getValue();
// 5 分前の部屋の照度が低いなら帰宅時
if (il_5_minutes_ago < 50) {
var ifttt_url = "https://maker.ifttt.com/trigger/arrived_home/with/key/xxx"; // 書き換える
var params = {
"method": "post",
};
UrlFetchApp.fetch(ifttt_url, params);
}
}
以下はそれぞれご自身のものに書き換えてください。
-
spreadsheetId
- スプレッドシートの URL の
https://docs.google.com/spreadsheets/d/
この部分の文字列/edit#gid=0
- スプレッドシートの URL の
-
remo_access_token
- Nature Remo のアクセストークン
- また取得していなければ、公式ページ から取得してください
-
ifttt_url
- 上で作成した IFTTT の URL (
https://maker.ifttt.com/trigger/arrived_home/with/key/{YOUR_KEY}
)
- 上で作成した IFTTT の URL (
Note:
このコードでは Sesame Webhook から受け取ったリクエストが解錠時のものなのか施錠時のものなのかを判別していません。
現状 Sesame Webhook は不安定で動作したりしなかったりするので、あえて状態を絞らない実装としています。
Web アプリとして公開
- スクリプトエディタの
公開
>Webアプリケーションとして導入...
を選択 -
Who has access to the app:
をAnyone, even anonymous
に設定して公開
表示された URL が Sesame Webhook でのリクエスト送信先になります。
マイトリガー
上で作成した remo()
関数を 1 分おきに実行する設定をおこないます。
- スクリプトエディタの
編集
>現在のプロジェクトのトリガー
を選択 -
トリガーを作成
から以下のとおり設定して保存
を選択
Sesame Webhook
リクエストの送信先 URL を設定します。
- Sesame Dashboard の API 設定ページ へアクセス
-
Webhook
>Edit
から、メソッドはPOST
を URL は 先ほど GAS を Web アプリとして公開したときに取得した URL を設定してSave
を選択
おわりに
Sesame の「手ぶらで解錠」とあわせて、帰宅時にドアの前に来るだけで自動で解錠されてリビングの電気がつくようになりました。
電気をつけるところは Sesame Webhook から取得できる情報が少ないので諦めかけていましたが照度を利用して実現することができました。
みなさんの参考になれば幸いです!
Author And Source
この問題について(Sesame と Nature Remo を使って帰宅時に自動でリビングの電気をつける), 我々は、より多くの情報をここで見つけました https://qiita.com/otuhs_d/items/039a77d4edbc542348ee著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .