IoTツールのGravioでセンサーからのデータをGoogleスプレッドシートに連携させる


# 手順の概要
1. 送信先フォームをGoogleフォームで作成
1. Gravio側で送信先を設定
1. センサーデータと連携


# 送信先フォームをGoogleフォームで作成


- Googleフォーム にアクセス
https://www.google.com/intl/ja_jp/forms/about/

- ＋マークをクリックして、新規にフォームを作成
    - 回答形式を「記述式」に変更して、フォーム名を「Gravio連携テスト１」にして、「送信」
    - フォーム送信画面で、真ん中の「リンク」を選択し、フォームのURLをメモしておく

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/0fe6d43c-336b-8564-4cd1-bf0b12944568.png">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/dec30ecb-aea9-bb45-8f8a-6e3f2dcf96ea.png">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/e06754d0-be96-6b23-5e42-62905d55a451.jpeg">


- フォームのURLを加工して、ブラウザで開く
    - 加工前：https://docs.google.com/forms/d/e/XXXXXXXX/viewform?usp=sf_link
    - 加工後：https://docs.google.com/forms/d/e/XXXXXXXX/formResponse
        - 末尾の `viewform?usp=sf_link` を　`formResponse`に変更して、ブラウザで開く

- Chromeの場合、F12キーで開発者画面に入り、質問IDを探す
    - Elementsタブでページのソースコードを表示し、`entry.`で検索する
    - `entry.`の後ろの数字(質問ID)をメモしておく(後で使う)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/90a818ed-b0c6-32c4-df97-6f5775b2eea8.jpeg">


# Gravio側で送信先を設定

- Gravio Studio 4を起動し、登録済みのHubを開く
- 「トリガー」タブを開く
- 左から２番めの四角のボタンを押す(マウスカーソルを乗せてもツールチップが出ないので分かりづらい)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/eacbb0d5-5193-99f1-b84c-8bbf3d382d91.png">

- Actions画面が開くので、右上の「＋」マークをクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/c62c05c4-1b07-e271-4241-e73200275e8d.png">

- アクションファイル名(例:postToSpreadSheet-1)を入力して、OKをクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/8ee7d5cb-ef31-2b1d-9c60-23b3197af4ee.png">



- 指定した名前でアクションファイルが作成されるので、左下の四角いボタンをダブルクリックして、アクション設定画面(アクションエディタ)を開く
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/77021d49-e875-a2f7-8dda-2524a327f1a9.png">


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/17f6f578-28af-73bc-eb15-d4721eed924e.png">


- 「＋」ボタンをクリックし、表示されるアクションのうち「HTTP Request」を選択して、「追加」をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/9b3bc25e-8874-bbd2-a65b-a67f0d753a4f.png">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/ee19d2d9-4a3e-24ef-80f4-48e3c3091333.png">

- アクション(プロパティ)を以下のように設定する
    - HTTPメソッド: `POST`
    - URL: 上記でメモしたURL(末尾は`formResponse`)
    - Content-Type: `application/x-www-form-urlencoded`

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/047601c0-0a57-24dd-d9ce-bff03cfed059.jpeg">

- ゴミ箱ボタンの左側をクリックし、アクション(Pre Mappings)を以下のように設定する

`cv.Payload = {"entry.NNNNNN": tv.Data}`

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/fa94bd08-a935-259b-ebb9-3d1e3029866a.jpeg">






- 右上の三角マークをクリックし、動作確認する
    - 下側に動作ログが表示される

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/8f04911e-7c0c-aa14-ec67-10c1f0ac7bd7.png">

- Googleフォームの回答を確認し、「0」という回答が追加されたことを確認する
    - `tv.*` はトリガーからのデータが入るという意味なので、Gravio Studio 4から送信した場合は0になる

# 実際のセンサーデータと連携させる

- トリガータブを開き、右上のボタンを押して、トリガー追加ウィンドウを表示する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/47c07889-4679-9027-78a4-3425a1ceef59.png">



- イベントトリガー名を設定し、条件タブに、エリア、キーレイヤー、物理デバイスIDを設定する
    - 物理デバイスIDは、選択後にチェックボックスにチェックを入れる
    - インターバルは、短時間で値が変わった時に複数送信しない時間を指定するもので、変更不要(1度受信した後に「インターバル」で設定した間はアクションを実行しない)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/b80022ed-3b8c-e641-4ff7-412d5b32a867.jpeg">

- アクションタブに、アクション名を指定して、「追加」をクリックする

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/cee03a7f-43d1-fc68-a043-e4eb5cce80f8.png">

- トリガー一覧で右はじのチェックボックスにチェックを入れて有効化する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/29a21a91-cbd9-0854-3786-9bd61465462b.png">



# Googleフォームの結果をGoogleスプレッドシートに入れるように設定する

- Gravio Studio 4側のデータタブで新たにデータが受信できたのを確認し、Googleフォームの結果に数値が入ったのを確認する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/125b043e-6d73-4500-95d5-e6d8c3772c8b.png">

- Googleフォームの回答ページの右上のマークをクリックし、回答先を新しいスプレッドシートに変更する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/d48ee6b8-37d0-b3ac-21c9-8637a6c22a27.png">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/fc77b0ec-9a6f-f32b-c191-023252022c6e.png">

- 以降は、指定したスプレッドシートにセンサーからの値がタイムスタンプ付きで入るようになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/36aa6e50-1edd-ae8a-04f5-b7cf2a386217.png">

- グラフをつけると視覚的に分かりやすくなります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/ee8f1e0b-05df-519e-1379-b596d61b2201.png">

# 温度センサーの場合の補足
- 温度センサーは温度が変わらないとデータを送信しないので、送信間隔は不定期です(バッテリー持続時間を考慮した仕様)

# 参考記事
- [Googleスプレッドシート上でGravioが収集したセンサーデータを表示！グラフの共有も簡単・外出先からもリアルタイムデータを確認可能（クラウド表計算サービス連携　　その２◇Googleスプレッドシート編）](https://www.gravio.com/jp-blog-article/2020-06-22-write-to-gsheet)

https://www.gravio.com/jp-blog-article/2020-06-22-write-to-gsheet

- [Gravio 4とPower BIでCO2を可視化する](https://qiita.com/zrock/items/08148659ebf523f5c160)


- アクション
    - [アクション内で利用できる変数と変数型](https://doc.gravio.com/manuals/gravio4/1/ja/topic/available-variables-in-action)


- トリガーの説明
    - [デバイストリガー](https://doc.gravio.com/manuals/gravio4/1/ja/topic/event-trigger)
- センサーの挙動
    - [Gravioセンサーのデータっていつ送られてくるの？](https://qiita.com/zrock/items/61541efb188204f97695)