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


はじめに

赤ちゃんを育てる環境としては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に通知される。

※デバッグのため閾値をいじっています。

その他

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