GHKit ZeroとAWS IoT エンタープライズボタンの連携

「[GHKit Zero](https://ghkit.jp/ "GHKit Zero")」は、Google Homeに、プッシュ通知機能を追加することを目的に開発されたキットです。

ここでは、「[GHKit Zero](https://ghkit.jp/ "GHKit Zero")」と、[AWS IoT エンタープライズボタン](https://aws.amazon.com/jp/iotbutton/ "AWS IoT エンタープライズボタン")（以後、AWS IoT ボタン）との連携手順を説明します。

具体的には、AWS IoT ボタンを押した時に「ボタンを押したよ」という音声再生リクエストをGoogle Homeに送信する手順について記載します。
![スクリーンショット 2019-04-10 13.43.05.png](https://qiita-image-store.s3.amazonaws.com/0/160696/58e66a5c-23da-5010-010c-473e5dad14e5.png)
AWS IoT ボタンはとても使いやすく、汎用性のあるIoTボタンです。受付などでの呼び出しやナースコールのような使い方、記録と連動した音声再生など、様々な利用シーンでの活用が期待できます。

本記事では、AWS（Lambda）の詳細や連携プログラムの文法等については説明しませんが、本記事を参考に、是非とも様々な使い方を試してみてください。

# 設定前の準備

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

**1. 「Google Home」と「GHKit」のセットアップ**

最初に、Google Homeをセットアップし、利用できる状態にしておいてください。

次に、HP上の手順を参考に「[GHKit Zero](https://ghkit.jp/ "GHKit Zero")」をセットアップし、Google Homeとの接続を確認してください。

**2. AWS アカウントの作成**

AWSアカウントをお持ちでない場合は、[AWSのサイトに掲載されている作成手順](https://aws.amazon.com/jp/register-flow/) を参考に作成してください。

AWS アカウントの作成にはクレジットカード情報の登録が必要となりますのでご注意ください。

また、AWS IoT ボタン１つにつき、月額0.25ドルの利用料が必要となります。あわせてご確認ください。

**3. AWS IoT ボタンを購入**

[Amazon](https://www.amazon.co.jp/dp/B075FPHHGG "Amazon") を通じて、AWS IoT ボタンを購入することができます。

**4. AWS IoT ボタンのセットアップ**

AWS IoT ボタンのセットアップは、AWSが提供するスマホアプリ「AWS IoT 1-Click」で行います。

Google Playストア または App Store で、「AWS IoT 1-Click」を検索しインストールしてください。

インストール後、上記で準備したAWSアカウントを用いてログインします。

AWSリージョンに「アジアパシフィック（東京）」が選択されていることを確認し、「デバイスIDで登録」ボタンより購入したAWS IoTボタンを登録します。
![Screenshot_20190410-142338.png](https://qiita-image-store.s3.amazonaws.com/0/160696/e0ce9e7a-6949-0ecf-d9b6-7c3755f550a7.png) ![Screenshot_20190410-142350.png](https://qiita-image-store.s3.amazonaws.com/0/160696/6ce1003d-071c-7c29-3875-38f1dbc07292.png)
「スキャン」ボタンを押し、AWS IoT ボタンの箱についているバーコードをスキャンします。

スキャン後、下記を参考に画面の指示に従って、AWS IoT ボタンのWifi設定と登録手続きを実行します。

- 1. 青い光が点滅するまでボタンを6秒間押す
- 2. ボタンにWifi情報を送信する
- 3. 最後にボタンを１回クリックし、登録を完了する（緑色の光が点灯すると成功です）

上部の「デバイス」メニューより、登録されたデバイス情報を確認できます。

**5. 連携情報の用意**

「[GHKit Zero](https://ghkit.jp/ "GHKit Zero")」同梱の書類より「GHKit ID」と「Code」をご準備ください。

* GHKit ID：ここでは例として「abcde12345」を用います。
* Code：ここでは例として「123456」を用います。

# 連携の設定

連携の設定は、AWSマネジメントコンソールより、大きく以下の2ステップで行います。

- 1. Lambda関数の作成
- 2. 作成した関数と登録したAWS IoTボタンの紐付け

## Lambda関数の作成

AWS Lambda は、AWSのサーバー上で登録したプログラムを実行することができるサービスです。
サーバーはAWSが必要に応じて自動で用意してくれるため、利用者が用意する必要はありません。

Lambda関数を作成するために、まず [AWS](https://aws.amazon.com/jp/) にアクセスし、コンソールへログインします。

「東京（アジアパシフィック）」リージョンが選択されていることを確認し、サービスの検索ボックスに「Lambda」と入力して、AWS Lambdaの管理ページに移動します。

「関数の作成」ボタンを押して、Lambda関数の作成手続きに進みます。
![スクリーンショット 2019-04-10 15.09.01.png](https://qiita-image-store.s3.amazonaws.com/0/160696/54e1f044-7c5d-2dc8-7689-f120e5bdc0ef.png)
関数名に「GHKit」と入力して、「関数の作成」ボタンを押し関数を作成します。
![スクリーンショット 2019-04-10 15.38.08.png](https://qiita-image-store.s3.amazonaws.com/0/160696/dea779a3-d051-757d-e6b3-bc8bf3eabb1d.png)
「関数コード」部分に以下のプログラムを記載します。

「ghkit」「code」を上記で準備した情報に置き換えてください。また「message」を任意のメッセージに変更してもらっても構いません。

```javascript
'use strict'
const https = require('https');
exports.handler = function(event, context) {

  let options = {
    protocol: 'https:',
    hostname: 'zero.ghkit.jp',
    path: '/',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    }
  };
  
  let data = {
    "ghkit" : "abcde12345", // ご自身のGHKit IDに置き換え
    "code" : "123456", // ご自身のCodeに置き換え
    "message" : "ボタンを押したよ"
  }
  
  const req = https.request(options, (res) => {
    res.on('data', (chunk) => {
        console.log(`BODY: ${chunk}`);
    });
    res.on('end', () => {
        console.log('No more data in response.');
    });
  })
  
  req.on('error', (e) => {
    console.error(`Error on post request: ${e.message}`);
  });
  
  req.write(JSON.stringify(data));
  req.end();
}
```

保存をクリックします。

Lambda関数の作成は以上で終了ですが、ページ上部の「モニタリング」タブより、関数の実行状況を確認することができます。

特に「CloudWatchのログを表示」ボタンより実行ログを確認できるため、以降の手順でうまく実行できない場合は確認してみてください。

## Lambda関数とAWS IoT ボタンの紐付け

次に、作成したLambda関数と登録したAWS IoTボタンを紐付けます。

AWSマネジメントコンソールのトップ画面に戻り、サービスの検索ボックスに「IoT 1-Click」と入力します。

![スクリーンショット 2019-04-10 15.51.30.png](https://qiita-image-store.s3.amazonaws.com/0/160696/78cf0a0b-2bfd-4fab-c135-f982876fb228.png)

まず最初に「プロジェクトの作成」ボタンを押し、プロジェクトを作成します。
プロジェクト名を「GHKit」とし「次へ」ボタンを押します。

![スクリーンショット 2019-04-10 15.55.22.png](https://qiita-image-store.s3.amazonaws.com/0/160696/c10abea9-5fca-ab2a-c66f-07ba292f6f18.png)

次にデバイステンプレートを設定します。
ここで、先ほど作成したLambda関数が実行されるように設定します。

「デバイステンプレート」横の「開始」をクリックし、「すべてのボタンタイプ」をクリックして下記のように入力します。

* デバイステンプレート名：GHKit_Lambda
* アクション：Lambda関数の選択
* AWSリージョン：アジアパシフィック（東京）
* Lambda関数：GHKit
![スクリーンショット 2019-04-10 16.01.13.png](https://qiita-image-store.s3.amazonaws.com/0/160696/4a1e34fe-ed76-c1b8-7be0-71b304fca189.png)

「プロジェクトの作成」ボタンを押して、プロジェクトの作成を完了します。

引き続き「プレースメントの作成」より、プレースメントを作成します。
プレースメントにより個別のAWS IoT ボタンを紐付け、作成したプロジェクトに登録します。

デバイスのプレイスメント名に「001_button」と入力し、「デバイスの選択」より先ほど登録したボタンを選択します。

![スクリーンショット 2019-04-10 16.13.14.png](https://qiita-image-store.s3.amazonaws.com/0/160696/e6bc5866-c9a5-5941-686c-2197a39763fd.png)

「プレースメントの作成」ボタンを押します。

![スクリーンショット 2019-04-10 16.20.21.png](https://qiita-image-store.s3.amazonaws.com/0/160696/34446ea3-d5f6-524c-0384-914517b4af77.png)

これにより、Lambda関数を実行するプロジェクト「GHKit」に、AWS IoT ボタンを紐付けたプレースメント「001_button」が登録されました。

最後に、ここでAWS IoT ボタンを押します。

Google Homeより「ボタンを押したよ」と再生されれば成功です。

# 参考

Lambdaで記述したプログラム中で、以下の変数を利用することができます。

「 event.deviceInfo.deviceId 」
「 event.deviceEvent.buttonClicked.clickType 」

前者の「deviceId」はAWS IoT ボタンごとに設定されたIDで、ボタンによりメッセージや処理を変更することが可能になります。

後者の「clickType」は、ボタンの押し方を識別するもので「クリック」「ダブルクリック」「長押し」を識別することができます。

これらを組み合わせることで、より複雑な連携を設定することができます。

よろしければ是非お試しください。