Gravio 4からCO2データをUnidotsに送って可視化する

少し時間が立ってしまいましたが、GravioでCO2データを可視化シリーズの第4弾でございます。
今回はUnidots社が提供するサービス「[Ubidots]」です。
このサービスは結構おすすめで、比較的安価な割にダッシュボードの表現力が優れていることです。海外サイトですが、そんなに難しくないのでトライしてみることをおすすめします。
個人利用はUnidots STEMといい、3デバイスまで、各デバイス10種類までのデータを無料で保存できます。4デバイス目から10デバイスまでは1デバイスあたり月額 \$4.5 で追加できます。それ以上、もしくは商用利用であれば、月額 \$49から使えます。(2021/4/2現在)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/68bd251d-b09a-8bb4-5a94-a3e65c76a4ad.png)

過去3回はこちらをどうぞ。

* [Gravio 4とPower BIでCO2を可視化する][CO2-PowerBI]
* [Gravio 4からCO2データをAmbientに送って可視化する](https://qiita.com/zrock/items/8b78ad085025bf5e760a)
* [Gravio 4からCO2データをMachinistに送って可視化する](https://qiita.com/zrock/items/ab09c8a7a43d24e96596)

# 使用環境

今回からGravioは4.2です。

* Raspberry Pi 4 Model B w/4GB RAM
* Ubuntu Server 20.04.2 LTS
* Gravio HubKit v4.2.0-6524
* Gravio Studio v4.2.4091.0
* Gracio CO2センサー (Gravio Standardの契約が必要)
* Ubidots STEM

# 事前準備
* https://ubidots.com/ から「[Ubidots][]」にサインアップしておいてください
* 「[Gravio 4とPower BIでCO2を可視化する][CO2-PowerBI]」を参考にCO2データを取得できるようにしておいてください。

# 手順
## デバイスの作成
まずデバイスを作成します。上のメニューからデバイス画面に移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/abe6b5fe-e844-8440-48fd-960ecb3f5219.png)

右上のアイコンをクリックして、 **Add new Device**をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/d8534bce-09e7-3f0e-bd7c-9cdcade6515a.png)

テンプレートにはないので、**Blank Device**をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/8b5f1639-96aa-3aeb-62b1-21e4da0cdfb9.png)

**Device name**に「CO2」、**Device label**を「co2」として、左下のボタンをクリックし、デバイスを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/067d4d8e-2a48-145d-5bcf-66a705a2a735.png)

デバイスができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/ceba8ad2-e977-0a95-d8aa-c2ef80d29df0.png)

## アクションを作成する
Ubidotsにデータを送信するアクションを作成します。詳しくは、以下の公式ドキュメントを読んでください。
https://ubidots.com/docs/hw/#send-data

内容をザクっと書いておきます。

* データは `https://industrial.api.ubidots.com/api/v1.6/devices/{DEVICE_LABEL}` にPOSTで送る
* フォーマットは `{"{variable-label}": VALUE}` で送ります
* 認証情報は、`X-Auth-Token`ヘッダーにトークンを渡します。

さて、Gravio StudioでHubKitへログインします。
新しいアクションを作成し、[HTTP Request][Gravio-HTTPRequest] コンポーネントを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/f83d3d4d-f534-167e-9c14-e6bf965eee0e.png)

**HTTPメソッド**には`POST`を選び、**URL**には`https://industrial.api.ubidots.com/api/v1.6/devices/co2`を指定します。`co2`はデバイスの**API Label**を指定します。
Pre Mappingsでは次のように指定します。

```
cv.Payload = {"co2": tv.Data}
cp.Headers = {"X-Auth-Token": "<トークン>"}
```

**cv.Payload**には送信するデータのボディをJSONで指定します。キーの`co2`は同じくデバイスのAPI Labelですね。値はセンサー値の`tv.Data`を指定しておきます。
**cv.Headers**は、HTTPリクエストのヘッダを指定するときに使います。JSONというか、仮想配列のそれぞれのキーがヘッダ名となります。`X-Auth-Token`というHTTPヘッダにトークンを指定して渡します。トークンは、デバイスの情報の中でTokenとして書かれているのでコピーしてください。
API Label、Tokenは、Ubidotsで作成したデバイスをダブルクリックすると画面の左側に下のような情報が表示されます。
Tokenは右側のアイコンを使って表示させたりコピーしたりしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/2030ad8b-84f7-a660-ce44-c09d358274a0.png)

最後にアクションを実行すると、ダミーデータ `0` としてデータが送られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/677e4ddf-839b-ec6c-2a2b-f2aef24352d3.png)

Ubidotsの方に戻り、データ画面を更新すると、変数が作成され、`0.00`という値が表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/c2e9a252-81e8-b841-e2b8-bfdffac7eecb.png)

## トリガーで連携

トリガーを作成し、有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/38c46590-2999-0d69-8198-5d2eb2ff8e7f.png)

## 結果の確認

Ubidotsの画面で、新しく追加されたco2という変数をダブルクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/87922ca4-e878-33d6-0d70-3c6e31711aab.png)

ちゃんとデータが連携されてますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/5f9910d4-2cc5-6b4d-8c55-07a0cce16c88.png)

# ダッシュボードを使ってみる

## ダッシュボードの作成
データが連携できたのでダッシュボードも使ってみます。

左上のロゴをクリックしてトップに戻り、ダッシュボードを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/26a6be86-81d0-3b63-70d3-cdf535b4244b.png)

**Name** は「仕事部屋」とでもしておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/cfcac2e1-7795-d6c1-9c86-636b1bcacd58.png)

**Add new Widget**でウィジットを追加していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/25db4b8d-36b9-61b8-9d29-288e8fca9043.png)

ひとまず **Line chart**を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/9bd1508b-e4e3-7c37-7d44-20db5780954a.png)

**Data**に`co2`を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/c6407eec-57a1-94f1-599d-42f4396789f2.png)

できましたので、右下のつまみを引っ張って大きくします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/ae25cf87-30c6-98d5-6d8f-17e8ba2dc46e.png)

あとは適当に表示できるように編集したり、他のいろんなウィジェットを追加するとこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/f75e2027-ecd5-2714-51db-45128f348a61.png)

## ダッシュボードを公開

ダッシュボード名をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/658e34a8-c01c-2e60-b121-5f1f55f1cb30.png)

ダッシュボード名右にあるシェアボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/16656b10-8308-de7b-ef9c-27b2b6b291dc.png)

**Create new link**をクリックしてリンクURLを生成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/49adf575-4655-b74d-49e2-7740bc1bdecd.png)

URLをコピーして利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/379dbe5d-4852-8f17-e3e6-c485193847dc.png)

ダッシュボードを共有できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/c4acc35b-6a8a-606f-3d41-1444ebd11f07.png)


# ポイント
* Unidotsはデバイスを作成、その変数としてデータを送る
* 表示系はウィジェットを使うと便利
* ダッシュボードは他の人と共有できる

# 参考
* [Ubidots][]
* [Ubidots STEM][]
* [Ubidots API docs/Send Data][Ubidots Send Data]
* [Gravio][]
* [HTTP Requestコンポーネント][Gravio-HTTPRequest]
* [Pre Mappings / Post Mappingsでの式の記述の仕方][Gravio-Mappings]
* [Gravio 4とPower BIでCO2を可視化する][CO2-PowerBI]


[Ubidots]:https://ubidots.com/
[Ubidots STEM]:https://ubidots.com/stem/
[Ubidots Send Data]:https://ubidots.com/docs/hw/#send-data
[Gravio]:https://www.gravio.com/jp
[Gravio-HTTPRequest]:https://doc.gravio.com/manuals/gravio4/1/ja/topic/http-post-action-component
[Gravio-Mappings]:https://doc.gravio.com/manuals/gravio4/1/ja/topic/premappings-postmappings
[CO2-PowerBI]:https://qiita.com/zrock/items/08148659ebf523f5c160