LoginSignup
4
5

More than 3 years have passed since last update.

赤ちゃんのために部屋の状況をNature Remoで監視する

Posted at

はじめに

赤ちゃんを育てる環境としては20~25℃、湿度50~60%あたりが適するようです。
いつの間にか寒くなっていたり、乾燥していたりすると困るので、
Nature Remoに入っているセンサー情報を使って気づけるようにします。

温度/湿度計を見ればいい話ですが、せっかくNature Remoがあるので活用してみよう!という感じです。

処理フロー

  1. Nature RemoのAPIを使い、温度・湿度・照度・人感センサーの情報を取得します。
  2. 経過も確認しておきたいので、スプレッドシートに記録していきます。
  3. 関数は15分おきにGASのトリガーを使い発火させます。
  4. 温度や湿度が一定範囲外であることを判断したら、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;

}

結果

こんな感じでLINEに通知される。
image.png
※デバッグのため閾値をいじっています。

その他

IFTTTやGAS経由で本情報をトリガに自動制御できるっちゃできるが、今回はやめておきます。
そもそもNature Remoにそういう機能あるし。

4
5
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
5