赤ちゃんのために部屋の状況をNature Remoで監視する
はじめに
赤ちゃんを育てる環境としては20~25℃、湿度50~60%あたりが適するようです。
いつの間にか寒くなっていたり、乾燥していたりすると困るので、
Nature Remoに入っているセンサー情報を使って気づけるようにします。
温度/湿度計を見ればいい話ですが、せっかくNature Remoがあるので活用してみよう!という感じです。
処理フロー
- Nature RemoのAPIを使い、温度・湿度・照度・人感センサーの情報を取得します。
- 経過も確認しておきたいので、スプレッドシートに記録していきます。
- 関数は15分おきにGASのトリガーを使い発火させます。
- 温度や湿度が一定範囲外であることを判断したら、LINEのAPIを使い、家族LINEにPOSTします。
MyHome.gs
//室温取得
function tempNatureRemo() {
//nature remo 温度データGET用変数
var remourl = "https://api.nature.global/1/devices";
var remotoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var remooptions = {
"method" : "GET",
"headers" : {"Authorization" : "Bearer "+ remotoken},
"contentType": "application/json",
};
//nature remoのセンサーデータをGETする
var Postdata = UrlFetchApp.fetch(remourl, remooptions);
//JSONパースして必要なデータのみを抜き取る
var Jsonp = JSON.parse(Postdata.getContentText());
var tempdata = Jsonp[0]["newest_events"]["te"]["val"]; //温度
var humidity = Jsonp[0]["newest_events"]["hu"]["val"]; //湿度
var illmination = Jsonp[0]["newest_events"]["il"]["val"]; //照度
var motion = Jsonp[0]["newest_events"]["mo"]["val"]; //人感センサー 0 or 1
var tempdata2 = Math.floor(tempdata);
var tempdatatxt = "現在の室温は" + tempdata2 + "℃です。" + "\n";
//スプレッドシート変数
var spreadsheetId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var sheetName = "XXXXXXXXXX";
var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
var sheet = spreadsheet.getSheetByName(sheetName);
//今日の日時
var year = Utilities.formatDate(new Date(), 'JST', 'yyyy');
var month = Utilities.formatDate(new Date(), 'JST', 'MM');
var day = Utilities.formatDate(new Date(), 'JST', 'dd');
var time = Utilities.formatDate(new Date(), 'JST', 'HH:mm:ss');
//スプレッドシートに日時と温度を追記
sheet.appendRow([year, month, day, time, tempdata, humidity, illmination, motion]);
//温度が適温以外ならLINEに通知
checktempdata(tempdata);
//湿度が適温以外ならLINEに通知
checkhumidity(humidity);
return tempdatatxt;
}
//一定の湿度以下ならLINEに通知する
function checkhumidity(humidity){
var ret; //戻り値
var upperlimit = 70; //換気の目安
var lowerlimit = 30; //加湿の目安
//25℃以上は熱すぎる
if(humidity >= upperlimit){
push("湿度が" + upperlimit + "%を超えました。\n" + "現在の湿度:" + humidity + "%\n" + "換気しましょう。");
}
//20℃以下は寒すぎる
else if(humidity <= lowerlimit){
push("湿度が" + lowerlimit + "%以下になりました。\n" + "現在の湿度:" + humidity + "%\n" + "加湿器をつけましょう。");
}
//適温なので何もしない
else{
ret = "";
}
return ret;
}
//一定の温度以外ならLINEに通知する
function checktempdata(tempdata){
var warmlimit = 25; //暑さの目安
var coldlimit = 20; //寒さの目安
//25℃以上は熱すぎる
if(tempdata >= warmlimit){
push("室温が" + warmlimit + "℃を超えました。\n" + "現在の室温:" + tempdata + "℃\n" + "換気しましょう。");
}
//20℃以下は寒すぎる
else if(tempdata <= coldlimit){
push("室温が" + coldlimit + "℃以下になりました。\n" + "現在の室温:" + tempdata + "℃\n" + "暖房をつけましょう。");
}
//適温なので何もしない
else{
}
return;
}
結果
MyHome.gs
//室温取得
function tempNatureRemo() {
//nature remo 温度データGET用変数
var remourl = "https://api.nature.global/1/devices";
var remotoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var remooptions = {
"method" : "GET",
"headers" : {"Authorization" : "Bearer "+ remotoken},
"contentType": "application/json",
};
//nature remoのセンサーデータをGETする
var Postdata = UrlFetchApp.fetch(remourl, remooptions);
//JSONパースして必要なデータのみを抜き取る
var Jsonp = JSON.parse(Postdata.getContentText());
var tempdata = Jsonp[0]["newest_events"]["te"]["val"]; //温度
var humidity = Jsonp[0]["newest_events"]["hu"]["val"]; //湿度
var illmination = Jsonp[0]["newest_events"]["il"]["val"]; //照度
var motion = Jsonp[0]["newest_events"]["mo"]["val"]; //人感センサー 0 or 1
var tempdata2 = Math.floor(tempdata);
var tempdatatxt = "現在の室温は" + tempdata2 + "℃です。" + "\n";
//スプレッドシート変数
var spreadsheetId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var sheetName = "XXXXXXXXXX";
var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
var sheet = spreadsheet.getSheetByName(sheetName);
//今日の日時
var year = Utilities.formatDate(new Date(), 'JST', 'yyyy');
var month = Utilities.formatDate(new Date(), 'JST', 'MM');
var day = Utilities.formatDate(new Date(), 'JST', 'dd');
var time = Utilities.formatDate(new Date(), 'JST', 'HH:mm:ss');
//スプレッドシートに日時と温度を追記
sheet.appendRow([year, month, day, time, tempdata, humidity, illmination, motion]);
//温度が適温以外ならLINEに通知
checktempdata(tempdata);
//湿度が適温以外ならLINEに通知
checkhumidity(humidity);
return tempdatatxt;
}
//一定の湿度以下ならLINEに通知する
function checkhumidity(humidity){
var ret; //戻り値
var upperlimit = 70; //換気の目安
var lowerlimit = 30; //加湿の目安
//25℃以上は熱すぎる
if(humidity >= upperlimit){
push("湿度が" + upperlimit + "%を超えました。\n" + "現在の湿度:" + humidity + "%\n" + "換気しましょう。");
}
//20℃以下は寒すぎる
else if(humidity <= lowerlimit){
push("湿度が" + lowerlimit + "%以下になりました。\n" + "現在の湿度:" + humidity + "%\n" + "加湿器をつけましょう。");
}
//適温なので何もしない
else{
ret = "";
}
return ret;
}
//一定の温度以外ならLINEに通知する
function checktempdata(tempdata){
var warmlimit = 25; //暑さの目安
var coldlimit = 20; //寒さの目安
//25℃以上は熱すぎる
if(tempdata >= warmlimit){
push("室温が" + warmlimit + "℃を超えました。\n" + "現在の室温:" + tempdata + "℃\n" + "換気しましょう。");
}
//20℃以下は寒すぎる
else if(tempdata <= coldlimit){
push("室温が" + coldlimit + "℃以下になりました。\n" + "現在の室温:" + tempdata + "℃\n" + "暖房をつけましょう。");
}
//適温なので何もしない
else{
}
return;
}
こんな感じでLINEに通知される。
※デバッグのため閾値をいじっています。
その他
IFTTTやGAS経由で本情報をトリガに自動制御できるっちゃできるが、今回はやめておきます。
そもそもNature Remoにそういう機能あるし。
Author And Source
この問題について(赤ちゃんのために部屋の状況をNature Remoで監視する), 我々は、より多くの情報をここで見つけました https://qiita.com/kaji-tan/items/b9caa5bad196c9510440著者帰属:元の著者の情報は、元の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 .