リビングが暑くなるとアラートメールを受信する（Nature Remo Cloud APIとGoogleサービス連携）

# はじめに
Googleデータポータルでリビングの照度、温度、湿度を監視し、1時間おきのログを目視的に確認できるようにしたので、今回は一定の温度になったらメール通知を受け取れるようにしてみました。
これで、リビングの食材を守ることができます。

## 今回のゴール
監視している環境が、一定温度以上になれば**現在の温度**と**環境監視ダッシュボードのリンク情報**の入ったメールを送る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/0584dd68-d605-287f-af5e-80964e48d207.png)
**Nature Remo、Googleスプレッドシート、Gメールの順を現した写真**

## 準備
2019/02/11に投稿した記事を参照ください。
[リビングの環境監視ダッシュボードを６０分で作る方法（Nature Remo Cloud APIとGoogleサービス連携）](https://qiita.com/t-chi/items/01b9a9b98fbccef880c3)

[GASでNatureRemo Cloud APIを呼び出す](https://qiita.com/t-chi/items/01b9a9b98fbccef880c3#gas%E3%81%A7natureremo-cloud-api%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99)までの作業を完了させてください。

### スプレッドシートに設定項目追加
setシートに次の項目を追加します。
E1に**アラート温度**、E2に設定する温度を入力します。例えば、20℃以上になるとアラートメールを飛ばしたい場合は、E2に**20**を入力しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/8fcc72ff-0356-277b-9c1e-134199e05c90.png)

### gas編集
ソースコードにアラートを飛ばすためのコードを追加します。
ツール、スクリプトエディタの順にエディタを起動させます。
function setLaremoData(data, row)にメールを送るコードを追加します。

```js

var alert = SpreadsheetApp.openById(spreadsheetId).getSheetByName('set').getRange("E2").getValue()//アラート設定温度
  var ondo = SpreadsheetApp.openById(spreadsheetId).getSheetByName('set').getRange("A2").getValue() //現在の温度
  if(alert <= ondo){//アラート設定温度を現在の温度が超えた場合の条件式
GmailApp.sendEmail('***************@gmail.com',//アラートを知らせるメールアドレス
                         '【環境監視アラート】',
                         '■現在の温度:' + ondo+ '\n■url:https://datastudio.google.com/reporting/***************');//ダッシュボードのURL
    }//現在の温度と、環境監視ダッシュボードのurlを通知する
```

次の通り修正しました。
setシートのE2の設定温度以上になれば、現在の温度と、前回作成したダッシュボードのURLをメールする内容にしています。

### ソースコード
```js
var access_token = '***************'//←トークンを入れる
var spreadsheetId = '*****************'//←スプレッドシートのIDを入れる
function remo() {
  var data = getNatureRemoData();　　　　//data取得
  var lastData = getLastData();　　　　　//最終date取得
  setLaremoData(
  {
    te:data[0].newest_events.te.val,　　//温度
    hu:data[0].newest_events.hu.val,　　//湿度
    il:data[0].newest_events.il.val,　　//照度
  },
  lastData.row + 1//最終data追加作業
  );
}
 
function getNatureRemoData() {　　　　　　//Remoのapiをお借りします
  var url = "https://api.nature.global/1/devices";
  var headers = {
    "Content-Type" : "application/json;",
    'Authorization': 'Bearer ' + access_token,
  };
 
  var postData = {
 
  };
 
  var options = {
    "method" : "get",
    "headers" : headers,
  };
 
  var data = JSON.parse(UrlFetchApp.fetch(url, options));
  Logger.log(data[0].newest_events)
  Logger.log(data[0].newest_events.te.val)
  Logger.log(data[0].newest_events.hu.val)
  Logger.log(data[0].newest_events.il.val)
 
  return data;
  
}
 
function getLastData() {
  var datas = SpreadsheetApp.openById(spreadsheetId).getSheetByName('log').getDataRange().getValues()　　//logシートをゲットする
  var data = datas[datas.length - 1]
 
  return {
    totalpoint:data[1],
    coupon:data[2],
    row:datas.length,
  }
}
 
function setLaremoData(data, row) {
  SpreadsheetApp.openById(spreadsheetId).getSheetByName('log').getRange(row, 1).setValue(new Date())//A2にゲットした日時ほりこむ
  SpreadsheetApp.openById(spreadsheetId).getSheetByName('log').getRange(row, 2).setValue(data.te)　　//B2に温度追加
  SpreadsheetApp.openById(spreadsheetId).getSheetByName('log').getRange(row, 3).setValue(data.hu)　　//C2湿度追加(幅があるけど気にしない)
  SpreadsheetApp.openById(spreadsheetId).getSheetByName('log').getRange(row, 4).setValue(data.il)　　//D2照度追加
  
  var alert = SpreadsheetApp.openById(spreadsheetId).getSheetByName('set').getRange("E2").getValue()//アラート設定温度
  var ondo = SpreadsheetApp.openById(spreadsheetId).getSheetByName('set').getRange("A2").getValue() //現在の温度
  if(alert <= ondo){//アラート設定温度を現在の温度が超えた場合の条件式
GmailApp.sendEmail('***************@gmail.com',//アラートを知らせるメールアドレス
                         '【環境監視アラート】',
                         '■現在の温度:' + ondo+ '\n■url:https://datastudio.google.com/reporting/***************');//ダッシュボードのURL
    }//現在の温度と、環境監視ダッシュボードのurlを通知する
  
}
```
## メール
リビングが設定した20℃以上になれば、自動でメールが飛んできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/97d3bb4f-7b22-a303-8c62-00f155e516e3.png)

## 最後に
これで、**リビングの温度が熱くなって食べ物が腐る**なんてことを防ぐことができます。
そう、**[Nature Remo](https://nature.global/)**の本領発揮です。世界中どこにいても、インターネット接続さえ確保できれば、スマホから遠隔でリビングのエアコンを操作して室温を下げることができるのです。
実は、[Nature Remo](https://nature.global/)のapiをさらに掘り下げると、一定温度以上で、指定したリモコンをONにするといったコード作成をしてオートメーション化を図ることも可能なのですが、あえて手動で遠隔操作してる感を味わいたいのでシンプルにしてみました。（本当は技術不足ですw）
gas改良するとSlackとかMicrosoft Teamsへの通知も可能です。
また、別記事で紹介させていただいた、[Gmailから始める自動化生活](https://qiita.com/t-chi/items/928f9666d79ce24b5f50)を応用すれば、全く別のGoogleアカウントでデータベース化が可能になりますので、個人的な利用からグループ利用への展開も可能になります。（メールを複数発信すればOK）
新型コロナウイルスの湿度対策（温度を湿度にして、加湿器を遠隔操作）にも利用できると思いますので、色々いじってみてください。

## 参考と関連リンク
参考：[【GAS】Googleスプレッドシートから期日アラートメールを送る方法](https://design-remarks.com/gas-spred-mailalert/)
関連：[リビングの環境監視ダッシュボードを６０分で作る方法（Nature Remo Cloud APIとGoogleサービス連携）](https://qiita.com/t-chi/items/01b9a9b98fbccef880c3)