IoT ハッカソン クラウド環境 設定手順

# はじめに

本コンテンツは、IoT ハッカソンで使用する技術ハンズオンの資料です。
環境は参加者が自由選択できますので、参考としてご活用ください。

デバイスの環境は[IoT ハッカソン Wio LTE デバイス環境 設定手順](https://qiita.com/uhuru-hackathon/items/79ed370a4cd4899d4642)を参照してください。

## 概要

SORACOM Air サービスを使用して、センサーから取得したデータを可視化するまでの手順を説明します。
温度センサーのデータを可視化する方法として 2 つの手段を説明して行きます。

## 目次

<!-- TOC depthTo:3 -->

- [IoT ハッカソン クラウド環境 設定手順](#iot-ハッカソン-クラウド環境-設定手順)
  - [はじめに](#はじめに)
  - [概要](#概要)
  - [目次](#目次)
  - [事前準備](#事前準備)
      - [導入(Windows 向け)](#導入windows-向け)
      - [導入(macOS 向け)](#導入macos-向け)
      - [Windows/macOS 共通](#windowsmacos-共通)
  - [構成](#構成)
  - [enebular のサービスを使った可視化の手順](#enebular-のサービスを使った可視化の手順)
      - [Firebase](#firebase)
      - [enebular プロジェクト作成](#enebular-プロジェクト作成)
      - [Flow 作成](#flow-作成)
      - [DataSource 作成](#datasource-作成)
      - [InfoType 作成](#infotype-作成)
      - [InfoMotion 作成](#infomotion-作成)
      - [SORACOM Beam への設定](#soracom-beam-への設定)
  - [AWS のサービスを使った可視化の手順](#aws-のサービスを使った可視化の手順)
      - [AWS IoT ルール作成](#aws-iot-ルール作成)
      - [Amazon Athena テーブル作成](#amazon-athena-テーブル作成)
      - [QuickSight で可視化グラフ作成](#quicksight-で可視化グラフ作成)
      - [SORACOM Funnel の設定](#soracom-funnel-の設定)
   - [enebular リファレンス](#enebular-リファレンス)

<!-- /TOC -->

## 事前準備

- 本内容を進めるにあたり、事前に以下の準備/ツールを導入してください
  - Node.js

### 導入(Windows 向け)

#### Node 導入

[Node.js](https://nodejs.org/en/download/)のページから、インストーラーをダウンロードしてインストールしてください。
バージョンは、LTS(Version: 8)を導入します。

### 導入(macOS 向け)

#### Homebrew 導入

ターミナルを立ち上げ、以下の内容を貼り付け、Homebrew を導入します。

```bash
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

#### Node 導入

ターミナルから　nodebrew を利用して Node.js(Version 8) を導入します。
すでに、Homebrew で node をインストールしている場合は、削除してください。

アンインストール: 

```bash
brew uninstall --force node
```

インストール: 

```bash
brew install nodebrew
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
echo 'export NODEBREW_ROOT=/usr/local/var/nodebrew' >> ~/.bash_profile
source ~/.bash_profile
nodebrew install-binary v8
```

### Windows/macOS 共通

##### InfoMotion Tool 導入

端末を起動させ、以下コマンドで InfoMotion Tool を導入します。

```
npm install @uhuru/enebular-infomotion-tool-v2 -g
```

## 構成

- enebular のサービス を使った可視化
  - データ転送: SORACOM Beam
  - データ操作: enebular
  - データストア: firebase
  - 可視化: InfoType + InfoMotion

![setup_enebular.png](https://qiita-image-store.s3.amazonaws.com/0/281420/2dbbadbc-26b2-618b-9d7b-b6b61e111f90.png)

- AWS のサービスを使った可視化
  - データ転送: SORACOM Funnel
  - データ操作: AWS IoT Core、Amazon Athena
  - データストア: Amazon S3
  - 可視化: Amazon QuickSight

![setup_aws.png](https://qiita-image-store.s3.amazonaws.com/0/281420/49abf422-6cf4-fbd9-b215-afe4be88595c.png)

---

## enebular のサービスを使った可視化の手順

### デバイスのプログラム

[IoT ハッカソン Wio LTE デバイス環境 設定手順](https://qiita.com/uhuru-hackathon/items/79ed370a4cd4899d4642#%E9%80%81%E4%BF%A1%E5%87%A6%E7%90%86senddata)から、転送先をSORACOM Beamにして、ボードに書き込んでください。

### Firebase

enebular のページで"Firebase DataSource の作成" 〜 "DataBase のセットアップ"まで実施してください。

[https://docs.enebular.com/ja/InfoMotion/DatasourceFirebase.html]
(https://docs.enebular.com/ja/InfoMotion/DatasourceFirebase.html)

次に、Firebase の"ウェブアプリに Firebase を追加"の内容を控えてください。

![ウェブアプリに FireBase を追加1](https://qiita-image-store.s3.amazonaws.com/0/281420/1e2ad03d-ab92-da72-1089-1fc043468668.png)

![ウェブアプリに FireBase を追加2](https://qiita-image-store.s3.amazonaws.com/0/281420/fcdc292c-cbf7-b180-d81f-98ec63eb4c83.png)

### enebular プロジェクト作成

コンソールから[Create Projet]を選択し、プロジェクトを作成します。

![コンソール-プロジェクト作成](https://qiita-image-store.s3.amazonaws.com/0/281420/a514fdae-b0ff-13ca-1879-d8e7a3f681d2.png)

プロジェクト名には任意の名前をつけて、[Submit]を選択する(図では"iot-hackathon")

![プロジェクト名](https://qiita-image-store.s3.amazonaws.com/0/281420/7f203637-2464-fff9-858f-77aefb3857d8.png)

続いて作成したプロジェクトを選択し、フローを作成して行きます。

![プロジェクト選択](https://qiita-image-store.s3.amazonaws.com/0/281420/c2db0ce7-02cd-5ac6-130d-f6af2d587c8d.png)


enebular のプロジェクトの右下の +ボタンをクリックし、新しいフローを作成します。

![フロー作成](https://qiita-image-store.s3.amazonaws.com/0/281420/9ceac863-203f-d00e-6372-7a2cd64eb330.png)

フローに任意の名前を設定して、[Continue]を選択します。

![フロー設定](https://qiita-image-store.s3.amazonaws.com/0/281420/008bd1e9-71f4-a940-f919-5827cea93c22.png)

[Edit Flow]を選択して、フローを作成を開始します。

![フロー編集](https://qiita-image-store.s3.amazonaws.com/0/281420/0193a75f-08b8-3c98-69fa-d3a71e1ebda3.png)

### Flow 作成

enebular の Flow から NODE-RED を使用してフローを作成します。
設定は各ノードをダブルクリックすることで編集できます。

- "base64" ノードをインストール (後述の図を参照)
- [input] - [http]ノードを配置して以下内容を設定
  - Method: POST
  - URL: /test
  - Name: SORACOM Beam
- [function] - [base64]を配置
  - Actionで"Convert Base64 to String"を選択
- [function] - [function]ノードを 2 つ配置

  - 1 つ目に"get_payload"の名前をつけて、Function に以下内容を記載

  ```javascript
  msg.payload = msg.payload["payload"];
  return msg;
  ```

  - 2 つ目に"time_and_tmpr_c"の名前をつけて、Function に以下内容を記載

<!-- prettier-ignore-start -->

  ```javascript
  var timestamp = Date.now();
  var tmpr_c = JSON.parse(msg.payload)["tmpr_c"];

  var data = {
    timestamp: timestamp,
    value: {
      id: "1",
      tmpr_c: tmpr_c,
      created: timestamp
    }
  };

  msg.payload = data;
  return msg;
  ```

<!-- prettier-ignore-end -->

  - [firebase] - [firebase modify]を配置して以下内容を設定
    - Firebase:
      - Firebase: https://`<ウェブアプリに FireBase を追加で控えた projectId>`/firebaseio.com/
      - Auth Type: None
    - Child Path: test
    - Method: push
    - Value: msg.payload
    - Name: push_tmpr_c
  - [Output] - [debug]
  - [Input] - [inject] ... デバッグ用途で使用します
    - Payload 左側で`JSON({}のアイコン)`を選択(図を参照)
    - Payload: `{ "payload": "eyJ0bXByX2MiOjI4fQ==" }`
    - 他(Topic/Repeat/inject once at start?/Name)はそのまま変更しない
<img src="https://qiita-image-store.s3.amazonaws.com/0/281420/7ea80702-dda6-9d9c-4c96-0d8303474b8c.png" alt="Inject設定" width="70%"/>

最後に、以下の全体の接続にしたがって、ノード間を接続します。

#### base64 ノード追加

右側の[admin]タブから、検索欄に"base64"と入力し[install]ボタンを選択します。
※ 入力すると自動で"node-red-node-base64"と保管されます。

![base64ノード追加](https://qiita-image-store.s3.amazonaws.com/0/281420/2f3ba86b-2334-868b-0dd1-afba196ce02c.png)

#### 全体の接続

![フロー全体図](https://qiita-image-store.s3.amazonaws.com/0/281420/8cfad13e-3ee3-962d-55be-ed98ee3d1d29.png)

### DataSource 作成

ダッシュボードのプロジェクトまで戻ります。
左側の[Data Sources]を選択し、 右下の+ボタンをクリックし、新しいデータソースを作成します。

![データソースへ遷移](https://qiita-image-store.s3.amazonaws.com/0/281420/d3e9cb53-c335-b9d8-f8e0-00b736313f08.png)

名前には任意の名前をつけます(ここでは"firebase-ds"としています)  
"ウェブアプリに FireBase を追加"で控えた内容を入力して行きます。  
"Ref"には Firebase で作成したコレクション名を入れます(ここでは"/test"で、/(スラッシュ)が必要なので注意)  
入力が完了したら、[Update]ボタンを選択します。

![Firebase設定](https://qiita-image-store.s3.amazonaws.com/0/281420/fca4ff53-c2e6-441b-5cb2-3e231fcb18d8.png)

### InfoType 作成

事前に InfoMotion Tool を導入してから以下を進めてください。

次にグラフで可視化するための InfoType でグラフの種類の設定をします。
折れ線グラフのテンプレートを作成後、InfoType の依存するパッケージを導入します。

```console
eit create tmpr_c_chart -t linechart
cd tmpr_c_chart
npm install
cd ../
```

上記コマンドを実行すると、`tmpr_c_chart`フォルダが生成され、配下には以下ファイルが生成されます。
- datasource.json
- package.json
- plugin.css
- plugin.js
- plugin.json
- README.md

次に、tmpr_c_chartフォルダは以下の`plugin.json`と`plugin.js`を編集していきます。

`plugin.json`の defaultSettings を以下のように書き換える。

```json:plugin.json
{
  "defaultSettings": {
    "label" : "id",
    "value": "tmpr_c",
    "limit": "20"
  },
...(省略)...
```

`plugin.js`の LineChart.defaultSettings を以下のように書き換える

```javascript:plugin.js
LineChart.defaultSettings = {
    "label" : "id",
    "value": "tmpr_c",
    "limit": "20"
};
...(省略)...
```

編集が終わったら、端末からパッケージのコマンドを実行する

```console
eit package tmpr_c_chart
```

上記のコマンドを実行すると、`<作業フォルダ>/tmpr_c_chart/build/target`に以下の アップロードするために最適化された 4 ファイルが生成されます。

- datasource.json
- plugin.css
- plugin.js
- plugin.json

上記の`plugin.*`の 3 ファイルを enebular の infotype にアップロードします。

![InfoTypeのメニュー](https://qiita-image-store.s3.amazonaws.com/0/281420/480edf68-87ba-76d7-b728-412a7f16ab91.png)

以下画面で、plugin.js, plugin.css, plugin.json の 3 ファイルをドラッグ・アンド・ドロップし、[upload]ボタンを選択します。

![pluginのアップロード](https://qiita-image-store.s3.amazonaws.com/0/281420/ddc123b6-9712-375d-7a08-946764224784.png)

アップロードが完了したら、プレビューで以下内容を記載し、[Preview]ボタンを選択します。
実行結果として、線が表示されることを確認してください。

```
[{
  "id": "1",
  "tmpr_c": "20",
  "created": 1533703436128
}, {
  "id": "1",
  "tmpr_c": "30",
  "created": 1533703437128
}]
```

実行結果

![infotypeプレビュー結果](https://qiita-image-store.s3.amazonaws.com/0/281420/9e4d4fe3-9e6d-a451-06aa-e501e9e4b941.png)

> infotype 作成の参考ページ: [https://docs.enebular.com/ja/infomotion/InfoMotionTool.html](https://docs.enebular.com/ja/infomotion/InfoMotionTool.html)

### InfoMotion 作成

ダッシュボードのプロジェクトまで戻ります。
左側の[InfoMotions]を選択し、 右下の+ボタンをクリックし、新しい InfoMotion を作成します。

![InfoMotion メニュー](https://qiita-image-store.s3.amazonaws.com/0/281420/3d079f94-244f-feb6-c82a-99d3822ae19e.png)

以下の画面では、タイトルと概要(概要はなくても良い)を記載し、他は変更せず[continue]を選択します。

![InfoMotion概要設定](https://qiita-image-store.s3.amazonaws.com/0/281420/1f0a1ed7-15bc-53d1-33d9-da454f41e512.png)

InfoMotion の編集画面へ遷移したら、([+)Add Graph]を選択後、[New Graph]を選択します。

![グラフ追加](https://qiita-image-store.s3.amazonaws.com/0/281420/f77b6618-76f4-56e9-3193-2ca07165e7b9.png)
![新規グラフ作成](https://qiita-image-store.s3.amazonaws.com/0/281420/bc982216-aa31-7398-8bf7-b15b3cd6bcfa.png)

項目には以下を設定してください。

| 項目名     | 設定値                                                                |
| ---------- | --------------------------------------------------------------------- |
| NAME       | 任意のグラフの名前(ここでは温度表示)                                  |
| TYPE       | Info Type で作成した名前(ここでは linechart)                          |
| DATASOURCE | Data Source で作成した Firebase の Data Source(ここでは、firebase-ds) |
| Label      | plugin.js で設定したラベル名(ここでは id)                             |
| Value      | plugin.js で設定した値名(ここでは tmpr_c)                             |
| Limit      | 一度に同時表示するサンプル数(ここでは 20 個のデータ)                  |

![グラフ設定](https://qiita-image-store.s3.amazonaws.com/0/281420/8ebf8047-6632-51a0-6617-54f189c31257.png)

上記までの設定が完了したら[Create Graph]を選択、
作成が完了したら追加された、グラフ名の左側(+)ボタンを選択します。

![グラフをOverviewに追加](https://qiita-image-store.s3.amazonaws.com/0/281420/ee4e90ba-12b2-b484-5f0b-8a28950a4fbf.png)

データが Firebase に格納されていない状態では何も表示されませんが、温度データが格納されると以下の表に表示されます。

![温度表示](https://qiita-image-store.s3.amazonaws.com/0/281420/975a647f-acf2-7e76-00dd-84a08d50c789.png)

最後に下側のスライダーや右上の日付の範囲を選択して、表示したい範囲を設定できます。
設定した内容を保存するためには、(+)Add Graphe ボタンの右側にある[Save]ボタンを選択すると、上記までの設定が保存されます。

### SORACOM Beam への設定

上記までの設定が完了したら、デバイスからの送信されたデータが enebular まで転送されるよう、SORACOM Beam の設定を行います。
ここでは、デバイス から UDP のソケット通信を使ってデータを送る方法を説明します。

まず、enebular の Flow 編集画面から、URL を控えておいてください。

![enebularホスト](https://qiita-image-store.s3.amazonaws.com/0/281420/f149d736-fa08-1fa2-ce45-948e5be1825b.png)

ソラコムのコンソールへログインします。
[menu] - [SIM グループ]を選択して、設定をしたいグループを選択します。

![menu選択](https://qiita-image-store.s3.amazonaws.com/0/281420/bab77764-df80-a07e-f9be-b8a46827575d.png)
![SIMグループ設定選択](https://qiita-image-store.s3.amazonaws.com/0/281420/27275690-406c-43c6-f698-5229d86e4d72.png)

グループの[基本設定] - [SORACOM Beam 設定]のアコーディオンを開き、左下の[+]を選択、
[UDP→HTTP/HTTPS エントリーポイント]を選択します。

![Beam UDP設定開始](https://qiita-image-store.s3.amazonaws.com/0/281420/2cb70438-d7e5-7208-49d7-30cb4f02f2d5.png)

以下設定を行い[保存]を選択してください。

| 項目名                 | 設定値                                   |
| ---------------------- | ---------------------------------------- |
| 設定名                 | 任意の設定名(ここでは udp-test-enebular) |
| プロトコル             | HTTPS                                    |
| ホスト名               | 上記 enebular Flow で控えた URL          |
| ポート番号             | 443                                      |
| パス                   | /test                                    |
| IMSI ヘッダ            | OFF                                      |
| IMEI ヘッダ            | OFF                                      |
| 証明ヘッダ付与         | OFF                                      |
| 事前共有鍵             | なし                                     |
| カスタムヘッダ         | なし                                     |
| ステータスコードを省略 | OFF                                      |

![011_soracom_beam_config_item1.png](https://qiita-image-store.s3.amazonaws.com/0/281420/a7de8d2e-e0c5-2642-6bd6-8d70d3e45a4d.png)
![011_soracom_beam_config_item2.png](https://qiita-image-store.s3.amazonaws.com/0/281420/47bdf906-c35b-cc50-d4ba-52e986df3f95.png)

以上で、enebular + Firebase を使った温度センサーの値の可視化設定が完了です。

---

## AWS のサービスを使った可視化の手順

AWS のサービスを使用した可視化までの流れは、以下の流れになります。
デバイス で取得した温度センサーの情報を
SORACOM Funnel で AWS IoT Core へ転送 →
AWS IoT Core のルールで Amazon S3 にデータを格納 →
Amazon Athena のテーブルの定義にしたがって、Amazon QuickSight からクエリーで S3 に格納した情報を読み取り、画面にグラフを表示します。

### デバイスのプログラム

[IoT ハッカソン Wio LTE デバイス環境 設定手順](https://qiita.com/uhuru-hackathon/items/79ed370a4cd4899d4642#%E9%80%81%E4%BF%A1%E5%87%A6%E7%90%86senddata)から、転送先をSORACOM Funnelにして、ボードに書き込んでください。

### AWS IoT ルール作成

- AWS アカウントにサインイン
- [サービス] - [IoT] - [IoT Core]を選択

![サービスを選択](https://qiita-image-store.s3.amazonaws.com/0/281420/d31dd0ff-decc-4105-5b78-226c3a9e50a0.png)

![IoT Coreを選択](https://qiita-image-store.s3.amazonaws.com/0/281420/c03ab41d-7c16-33e6-60c6-16a001b8011e.png)

#### エンドポイントを控える

AWS IoT Core のコンソールへ移動したら、はじめに*エンドポイント*を控えてください。
SORACOM Funnel から AWS IoT へ転送先を指定する時に必要になります。

- 左側のメニューから、[設定]を選択肢

![エンドポイント](https://qiita-image-store.s3.amazonaws.com/0/281420/978a5ba1-8f39-c5fe-32e8-f797d71f686e.png)

次に AWS IoT で受けたデータを Amazon S3 へ保存するための"ルール"を作成します。

- 左側のメニューから、[ACT]を選択
- 右上の[作成]ボタンを選択

![ルール作成開始](https://qiita-image-store.s3.amazonaws.com/0/281420/da35b6fe-4b83-3b48-8342-42137f603f91.png)

ルールの作成画面では以下の設定をします。

#### ルールの作成

| 項目名 | 設定値 |
| ------ | ------ |
| 名前   | to_s3  |
| 説明   | (空欄) |

#### メッセージのリソース

| 項目名               | 設定値     |
| -------------------- | ---------- |
| SQL のバージョン使用 | 2016-03-23 |
| 属性                 | \*         |
| トピックフィルタ     | to_s3/#    |
| 条件                 | (空欄)     |

#### アクションを作成

- ”1 つ以上のアクションを設定する”で[アクションの追加]ボタンを選択
- [新しいリソースを作成する]を選択し、格納先新規で作成

![アクションを選択](https://qiita-image-store.s3.amazonaws.com/0/281420/c015c503-fb8d-936d-e088-8e8ba9f438db.png)

![S3を選択](https://qiita-image-store.s3.amazonaws.com/0/281420/31ff9dc5-e552-be17-6a1b-fa7d65c03604.png)

![新しい格納先を作成する](https://qiita-image-store.s3.amazonaws.com/0/281420/a2dbcaeb-d790-d2ab-8364-e8f8c30f50e6.png)

#### S3 バケット格納先を作成する

- S3 コンソールから、[バケットを作成する]を選択
- バケット名には、各参加者が自由につけてください  
  ※ リージョンによって命名規則がありますが、エラーが出なければ大丈夫です
- リージョンは「東京」を選択 
  ※ この後に説明する Athena、QuickSight と同じにする必要があります
- 名前とリージョンの設定が終わったら、[次へ]を選択
- "オプション設定"”アクセス許可設定"はそれぞれ設定を変更せず、[次へ]を選択
- "確認"で[バケット作成]を選択して、完了

![バケットを作成する](https://qiita-image-store.s3.amazonaws.com/0/281420/3cf2145f-1eb7-abff-375b-dd9203875adb.png)

![バケット名前とリージョン](https://qiita-image-store.s3.amazonaws.com/0/281420/1e6ab0da-b19b-bc5d-a5f9-a105cba5fde8.png)

![バケットオプション設定](https://qiita-image-store.s3.amazonaws.com/0/281420/48658f3f-1a4d-899e-f987-e3b867e792a0.png)

![バケットアクセス許可の設定](https://qiita-image-store.s3.amazonaws.com/0/281420/95ce8c53-03cf-abb3-280f-b1f412704986.png)

![バケットを作成](https://qiita-image-store.s3.amazonaws.com/0/281420/dfb633c9-f756-aa11-1ffb-ec6ea405b8ee.png)

#### S3 バケットを設定する

バケット作成が完了したら、元の画面に戻り次の値を設定します。

| 項目名      | 設定値                      |
| ----------- | --------------------------- |
| S3 バケット | (上記で作成したバケット名)  |
| キー        | iot-test/${timestamp()}.txt |

設定が完了したら次は"IAM"のロールを設定します。

- [新しいロールを作成]を選択
- 表示された"IAM ロール名"に`hackathon2018-role`を入力
- [新しいロールの作成]を選択し、ロールを作成

![S3バケット設定](https://qiita-image-store.s3.amazonaws.com/0/281420/ca068347-df84-3219-4f52-2149621a6282.png)

[アクションの追加]を選択して、アクションの設定は完了です。

最後に、[ルールの作成]を選択し、ルール作成の完了です。

![ルールの作成](https://qiita-image-store.s3.amazonaws.com/0/281420/f148741b-ed84-ed12-e8dd-1e2c609cb26b.png)

### Amazon Athena テーブル作成

次に、QuickSight に渡すためのテーブルを作成します。
サービスから[Athena]を選択し、Athena のコンソールを表示させます。

![Athena](https://qiita-image-store.s3.amazonaws.com/0/281420/51f49ef6-0d80-5ec8-6433-5672ccaf88ce.png)

#### 初回アクセス時

初めて表示すると以下のような画面が表示されるため、[Get Started]を選択します
続いて、チュートリアルが始まるので、右上の × ボタンを選択して終了します。

![Athena Getting Started](https://qiita-image-store.s3.amazonaws.com/0/281420/ef0812aa-0f31-28ef-c681-063e7850136f.png)

![チュートリアルをスキップ](https://qiita-image-store.s3.amazonaws.com/0/281420/1f39c615-f6c6-4c84-d1d9-c3da678d94bf.png)

#### テーブル作成

右側の Tables にある項目からテーブルを作成していきます

- [Create table]を選択
- 表示されたメニューから[Manually]を選択

  ![デーブル作成](https://qiita-image-store.s3.amazonaws.com/0/281420/dbbff241-9f20-5883-e117-c1b6443a6a87.png)

- Step1: Name & Location で以下の設定値を設定して、[Next]を選択

| 項目名                     | 設定値                                        |
| -------------------------- | --------------------------------------------- |
| Data Base                  | sampledb                                       |
| Table Name                 | iot_test                                      |
| Location of Input Data Set | s3://<上記で作成した S3 バケット名>/iot-test/ |
| Encrypted data set         | チェック無                                    |

  ![step1](https://qiita-image-store.s3.amazonaws.com/0/281420/e68738d0-b0c4-a9a3-12b8-f42575d0de60.png)

- Step2: Data Format で以下の設定値を設定して、[Next]を選択

| 項目名      | 設定値 |
| ----------- | ------ |
| Data Format | JSON   |

  ![step2](https://qiita-image-store.s3.amazonaws.com/0/281420/61963a79-c3c0-9dc3-7532-31bb726454aa.png)

- Step3: Columns で以下の設定値を設定して、[Next]を選択

| 項目名                | 設定値    |
| --------------------- | --------- |
| 1 つ目 Column Name    | timestamp |
| 1 つ目 Column type    | string    |
| 2 つ目 Column Name    | payloads  |
| 2 つ目 Column type    | map       |
| 2 つ目 Map Key type   | string    |
| 2 つ目 Map Value type | smallint |

  ![step3-1](https://qiita-image-store.s3.amazonaws.com/0/281420/53129684-0551-6dbc-9260-a34105006b81.png)
  ![step3-2](https://qiita-image-store.s3.amazonaws.com/0/281420/3a5cce4d-6fe4-1cb8-c6b1-f5aa731abdcb.png)

- Step4: Partitions では何 も設定せず[Create table]を選択
  ![step4](https://qiita-image-store.s3.amazonaws.com/0/281420/a359dc3d-8d07-788f-c0b4-81efec0b8969.png)

テーブルの作成が完了すると右側の、DataBase にテーブルが作成されます。
![作成テーブル](https://qiita-image-store.s3.amazonaws.com/0/281420/086981b4-1f51-2127-fee9-ed6ab4cce062.png)

### QuickSight で可視化グラフ作成

QickSight で可視化するための、ラインチャートの作成をして行きます。

#### アカウント作成

初回アクセス時に QuickSight のアカウント作成とプラン選択が必要になります。
ここでは、Standard プランを作成していきます。

![Signup QuickSight](https://qiita-image-store.s3.amazonaws.com/0/281420/03fc4ac8-7c07-fc98-87ca-d17c057b38be.png)

![プラン選択](https://qiita-image-store.s3.amazonaws.com/0/281420/1c02f0ac-4a12-3cca-cd4e-4304b2d875b8.png)

Create your QuickSight account では以下の内容を入力し、[Finish]を選択してください。

| 項目名                                                                                           | 設定値                                                         |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------- |
| QickSight account name                                                                           | (参加者が自由に決めてください)                                 |
| Notification email address                                                                       | (参加者自信のメールアドレスを入力してください)                 |
| QuickSight                                                                                       | Asia Pacific (Tokyo)                                           |
| Enable autodiscovery of data and users in your Amazon Redshift, Amazon RDS and AWS IAM services. | チェック有                                                     |
| Amazon Athena                                                                                    | チェック有                                                     |
| Amazon S3                                                                                        | チェック有(Choose S3 buckets から上記で作成したバケットを選択) |
| Amazon S3 Storage Analytics                                                                      | チェック無                                                     |
| Amazon IoT Analystics                                                                            | チェック無                                                     |

![アカウント作成](https://qiita-image-store.s3.amazonaws.com/0/281420/0ca260b6-92d2-7730-35cf-6a8b216743ca.png)

しばらくすると、作成完了の表示がされるので[Go to Amazon QuickSight]を選択してください。

![アカウント作成成功](https://qiita-image-store.s3.amazonaws.com/0/281420/0cc6fef9-3e97-ff73-3ef3-5526f98fbf31.png)

#### 分析グラフ作成

- コンソール左上の[New analysis]を選択
- [New data set]を選択
- データソースとして、[Athena]を選択

![分析新規作成](https://qiita-image-store.s3.amazonaws.com/0/281420/9b5f88d6-c35e-0b03-c970-bc6c5e3c63ff.png)
![データセット作成](https://qiita-image-store.s3.amazonaws.com/0/281420/8688fbfe-8452-ce51-d604-84989580478b.png)
![データソース選択](https://qiita-image-store.s3.amazonaws.com/0/281420/d3d2614c-87f4-06a1-d1c2-b0071a0bf905.png)

##### データソースの設定

- "Data source name" で`iot-test`を入力し、[Create data source]を選択

  ![データソース名設定](https://qiita-image-store.s3.amazonaws.com/0/281420/b8f68321-6a90-93c8-5d7d-4638b564cf38.png)

- "Choose your table" で[Use custom SQL]を選択

  ![テーブル選択](https://qiita-image-store.s3.amazonaws.com/0/281420/ca30ff9e-7819-5650-2b77-b84eeb4fa941.png)

- "Enter custom SQL query"で以下内容を入力して、[Confirm query]を選択

| 項目名            | 設定値           |
| ----------------- | ---------------|
| New custom SQL    | 温度表示        |
| Enter SQL here... | `SELECT from_unixtime(cast(substr(timestamp,1,10) as double), 'Asia/Tokyo') as datetime, payloads['tmpr_c'] AS tmpr_c FROM sampledb.iot_test LIMIT 10;` |

![カスタムクエリ](https://qiita-image-store.s3.amazonaws.com/0/281420/f69131c6-9089-0e28-e132-e1f4bbd5dbf8.png)

- "Finish data set creation"で、[Import to SPICE for quicker analytics]を選択して、[Visualize]を選択
  ![インポート選択](https://qiita-image-store.s3.amazonaws.com/0/281420/1b26900e-2888-a7bd-d461-3de16370a127.png)

#### Visual 作成

データセットを作成したら次は、可視化のグラフを作成していきます。
![Visual編集画面](https://qiita-image-store.s3.amazonaws.com/0/281420/4128d046-119e-14d4-ecba-93fd97451add.png)

- 左下の"Visual Type"から[Line Chart]を選択
- 左上の"Fields list"からそれぞれの項目をドラッグ・アンド・ドロップする

| Fields list | ドロップ先 |
| ----------- | ---------- |
| datetime    | X axis     |
| tmpr_c      | Value      |

  ![Line Chart作成](https://qiita-image-store.s3.amazonaws.com/0/281420/0656d2b7-6a76-d641-292e-e9d5f58b927c.gif)

### SORACOM Funnel の設定

[Menu] - [LoRa グループ]から作成済みのグループを選択

| Fields list           | ドロップ先                                              |
| --------------------- | ------------------------------------------------------- |
| 転送先サービス        | AWS IoT                                                 |
| 転送先 URL            | `https://<AWS IoTで控えたエンドポイント>/to_s3/#{imsi}` |
| 認証情報 ID           | 任意の ID(ここでは awsiot-dataaccess)                   |
| 概要                  | <任意の説明文>                                          |
| 種別                  | AWS 認証情報                                            |
| AWS Access Key ID     | <事前に作成したアクセスキー>                            |
| AWS Secret Access Key | <アクセスキーを作成した際に生成した秘密鍵>              |
| 送信データ形式        | JSON                                                    |

![SORACOM Funnel設定](https://qiita-image-store.s3.amazonaws.com/0/281420/b02cbf78-1e05-3812-7e99-44061473c521.png)

![AWS認証情報設定](https://qiita-image-store.s3.amazonaws.com/0/281420/4af1263e-ff44-8897-e167-6c782988f6df.png)

以上で、AWS を使った温度センサーの値の可視化設定が完了です。

> 補足: IAM からアクセスキー 生成

- [AWS コンソール] - [サービス] - [IAM] - [ユーザー]から対象のユーザーを選択
- ユーザーの概要画面から[認証情報]を選択。[アクセスーを作成]ボタンを押下する  
  (※アクセスキーは 2 つまでしか作成できない)

![アクセスキーを取得](https://qiita-image-store.s3.amazonaws.com/0/281420/2a819e6d-d8f9-965d-d9a7-d6663ebadb31.png)

---

## enebular リファレンス

[https://docs.enebular.com/ja/](https://docs.enebular.com/ja/)