TENKitとGoogle Apps Scriptの連携（家電操作編）

**本記事は、[TENKit](https://tenkit.jp/) の応用的な利用について説明いたします。
事前に基礎編「 [TENKitとGoogleスプレッドシートの連携（簡単記録編）](https://qiita.com/tetotetote/items/bbacc6671b7b9f5846b3)」をご確認いただきますようお願いします。**

[TENKit](https://tenkit.jp/) （テンキット）は「テンキー」を「IoT」化するキットです。
[TENKit](https://tenkit.jp/) では、テンキーで入力された「数字」と、Googleスプレッドシートなどクラウド上のサービスを簡単に結びつけることができます。

ここでは、[TENKit](https://tenkit.jp/) の応用的な利用として、スマートリモコン機能を提供する [Nature Remo](https://nature.global) と連携し、家電を操作する方法について説明します。
具体的には、テンキーで「0」を入力すると、テレビがオン/オフする例について記載します。
![スクリーンショット 2019-09-12 15.23.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/ceaa992b-5ccb-7182-49bf-5192d61363d3.png)
[Nature Remo](https://nature.global) は、スマートフォンやスマートスピーカーを通じて家電を操作可能にするスマートリモコンです。
Nature Remo では、[Nature Remo Cloud API](https://developer.nature.global) を提供しており、このAPIを利用することで、外部から Nature Remo が提供するサービスの一部が利用できるようになります。

本手順では、[TENKit](https://tenkit.jp/) からの入力をGoogle Apps Scriptを通じて取得し、そこから Nature Remo Cloud API を通じてテレビを操作します。

本手順をマスターすると、Nature Remo Cloud API を通じて多様な Nature Remo のサービスを利用でき、様々な家電連携を実現することができます。

# 設定前の準備

Nature Remo との連携を設定する前に、以下の項目を確認してください。

**1. 基礎編をマスター**

**事前に基礎編「 [TENKitとGoogleスプレッドシートの連携（簡単記録編）](https://qiita.com/tetotetote/items/bbacc6671b7b9f5846b3)」をご確認いただき、TENKitの基本的な利用方法についてマスターしていただくようお願いします。**

**2. Nature Remo のセットアップ**

Nature Remo をセットアップし、利用できるようにしてください。
また、テレビと連携させ、スマートフォン等からテレビのオン/オフが行えるようにしておいてください。
その際、以下のように、ボタンの一括登録に加えて、「電源」ボタンを個別に追加してください。
（一括登録の場合、APIを通じて外部から操作するためのシグナルが発行されないため）
![スクリーンショット 2019-09-12 17.14.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/1b281bee-a80d-78ed-1458-853e86f40e74.png)

**3. Curlコマンドのインストール**

設定の途中でCurlコマンドを利用します。
Windowsの方は、下記を参考にインストールをお願いします。

https://qiita.com/sugasaki/items/ba9737d13db33d2cd71f

**4. Googleスレプッドシートを開く**

[Googleスレプッドシート](https://www.google.com/intl/ja_jp/sheets/about/ "Googleスレプッドシート") にアクセスし、新しいスプレッドシートを作成して、名前を「TENKit家電」として保存します。
![スクリーンショット 2019-09-12 15.56.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/29861b6f-f0a5-0e92-3122-586e452fdb39.png)
このスプレッドシートを通じて、Google Apps Scriptを記載します。

# 連携の設定

連携の設定は、大きく以下の手順で行います。

1. Nature Remo Cloud API にアクセスするためのアクセストークンの発行
2. 電源ボタンを操作するためのシグナルの取得
3. Google Apps Script から Nature Remo Cloud API にアクセス

## アクセストークンの発行

まず最初に、Nature Remo Cloud API にアクセスするためのアクセストークンを発行します。
下記のサイトにアクセスし「Login」ボタンを押してください。

https://home.nature.global/

ログイン画面が表示されるので、Googleアカウントもしくはメールアドレスを指定してログインします。
注意点として、**必ず Nature Remo で使用しているメールアドレスと同じものを使用してください。**
（Nature Remo のスマホアプリで、使用しているメールアドレスを確認することができます。）
![スクリーンショット 2019-09-12 15.42.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/6ca4a478-91a1-2f5b-75d9-128e63c182a9.png)
ログインが成功するとアクセストークンを発行するページが表示されます。
![スクリーンショット 2019-09-12 15.49.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/c853764a-6b2c-6859-8f88-bae26900a7ac.png)
「Generate access token」ボタンを押すと、以下のようにアクセストークンが発行されます。
![スクリーンショット 2019-09-12 15.51.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/349ee092-b946-4942-b286-36ab6c43d22d.png)
このアクセストークンは一度しか発行されず後から確認できないので、コピーして保管してください。

## シグナルの取得

次に、APIを通じて電源ボタンを操作するためのシグナルを取得します。

Curlコマンドを利用して、下記のコマンドを実行してください。
「ここにアクセストークンを記載」部分を、先ほどコピーして保管したアクセストークンに置き換えてください。

```
$ curl -H "Authorization: Bearer ここにアクセストークンを記載" "https://api.nature.global/1/appliances"
```

成功すると、以下のような「id」から始まるJSONデータが取得できます。
その中に「電源」ボタンを外部から操作するためのシグナルが記載されています。
（整形されていないため大変見にくいですが、メモ帳に貼り付けて「signals」を検索するなどして、該当部分を抜き出してください）

```
[{"id":"24892add-aacd-410e-9358-46d...
...
"signals":[{"id":"0e22c2c6-43db-4be8-b5d9-eacca57d16be","name":"電源","image":"ico_io"}]
...
}]
```
上記の例では「0e22c2c6-43db-4be8-b5d9-eacca57d16be」が電源ボタンを操作するためのシグナルになるので、コピーして保管してください。

## Google Apps Script

最後に、Google Apps ScriptにNature Remo Cloud APIにアクセスするコードを記載します。

Googleスプレッドシート「TENKit家電」を開き、上部の「ツール」メニューより「スクリプトエディタ」を選択し、Google Apps Scriptの編集画面を開きます。
スプレッドシートと同じく、名前（プロジェクト名）を「TENKit家電」に設定します。
![スクリーンショット 2019-09-12 16.00.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/9a14761c-d65d-94a2-21b3-1923d5e73f14.png)
元のコードを全て削除し、「コード.gs」に下記のコードを記載します。
「ここにアクセストークンを記載」部分を保管したアクセストークンに、「ここにシグナルを記載」部分を保管したシグナルに置き換えてください。

テンキーからの入力が「0」の時に、HTTPリクエストを作成してNature Remo Cloud APIにアクセスしています。

```javascript
// POSTリクエストに対する処理
function doPost(e) {
  // 送信された情報の取得
  var contents = JSON.parse(e.postData.contents);
  var message = contents.message;
  var created_at = contents.created_at;

  // 「0」が押された場合  
  if(message == "0"){
    // Nature Remo Cloud APIへアクセス  
    try {
      var url = "https://api.nature.global/1/signals/ここにシグナルを記載/send";
      var options = {
        'method': 'post',
        'headers': {
          'Authorization': 'Bearer ここにアクセストークンを記載'
        }
      };        
      // HTTPリクエスト（POST/JSON形式）を実行
      var response = UrlFetchApp.fetch(url, options);
      // POST結果の取得
      var content = response.getContentText("UTF-8");
      
    } catch(err){
      // エラーが発生した際は、エラーの内容をスプレッドシートに書き込み
      var ss = SpreadsheetApp.getActive()
      var sheet = ss.getActiveSheet();
      sheet.appendRow([message, created_at, "error", err]);    
    }
  }
}
```

ここで、一旦、実行ボタン ![スクリーンショット 2019-04-10 11.42.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/20cf2ca4-1e25-cba8-bbb1-cf8a7ccb0064.png) を押してコードの承認手続きを行ってください。
「このアプリは確認されていません」というアラートが表示された場合は、左下の「詳細」をクリックし、次に「TENKit家電（安全でないページ）に移動」をクリックして承認手続きを実行してください。

承認手順実行後に、「postDataを読み取れません」というエラーが発生しますが、問題ありませんので、そのまま公開手続きに進みます。

## コードの公開

コードを公開し、Webhook用のURLを作成します。
Google Apps Scriptの編集画面の「公開」メニューより「ウェブアプリケーションとして導入」を選択します。
![スクリーンショット 2019-09-12 17.42.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/8e09e7e4-5308-e81b-6717-b1865fd25393.png)
以下の画面が表示されるので、「アプリケーションにアクセスできるユーザー」に「全員（匿名ユーザー含む）」を選択して「導入」ボタンを押してください。
![スクリーンショット 2019-09-10 17.25.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/0a9bac5b-7eae-0b79-c3cc-e64c0e955e0d.png)
その後、以下の画面が表示されれば成功です。
![スクリーンショット 2019-09-10 17.26.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/df37f878-b60a-455f-5f44-c749b2be48a7.png)
最後に「ウェブアプリケーションのURL」を以下専用の設定ページで登録します。
[![スクリーンショット 2019-09-10 17.45.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/0ec1a3af-ba00-8eec-a628-547b848d6dea.png)](https://tenkit.jp/webhook/register)
テンキーで「0」を入力すると、テレビの電源が点いたり消えたりすれば成功です。

# 最後に
本手順では、[TENKit](https://tenkit.jp/) の応用的な利用として、スマートリモコン機能を提供する [Nature Remo](https://nature.global) と連携し、家電を操作する方法について説明しました。

これにより、Nature Remo Cloud API を通じて多様な Nature Remo のサービスを利用でき、様々な家電連携を実現することができます。

どのように利用するはかアイデア次第です。面白い使い方を是非発見してください。