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

Gravioでデータが取れるようになったので、今、いろいろ可視化サービスとの連携を試してみています。

以前、「[Gravio 4とPower BIでCO2を可視化する][CO2-PowerBI]」でPower BIとの連携は書きましたが、今回は「[Ambient][]」というサービスです。IoTデータを可視化するためのサービスだそうでGravioにぴったりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/5d3951af-2dce-82dc-1b0d-988d72e78ad5.png)

ある程度までは無料で使うことができますので試してみました。

# 使用環境

* Raspberry Pi 4 Model B w/4GB RAM
* Ubuntu Server 20.04.1 LTS
* Gravio HubKit v4.1.0-6380
* Gravio Studio v4.1.5432.0
* Gracio CO2センサー
* Ambient


# 事前準備
* https://ambidata.io/ からユーザー登録しておいてください
* 「[Gravio 4とPower BIでCO2を可視化する][CO2-PowerBI]」を参考にCO2データを取得できるようにしておいてください。

# 手順
## チャネルの作成
「チャネル一覧」の画面で「チャネルを作る」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/68582dcd-992e-f1f1-692d-abf854b4847a.png)

新しいチャネルが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/3a37a202-bc46-3bda-7768-24c688523b91.png)

「設定」のドロップダウンから「設定変更」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/8d74b8d3-402e-6c58-1d27-81a6481b6564.png)

CO2を可視化するので、「チャネル名」、「説明」、「データー1」に適当な名前をつけておきます。
「チャネル属性を設定する」をクリックして保存します。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f34313630332f61633466396632312d333262612d666236332d316265372d6163626232326262326562612e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/08d003b4-a026-26c0-046a-6f6ce7a22356.png)


チャネル名が変わりました。変わらないときはページを更新してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/0c247543-9bb4-c9d7-36f8-55832963d3c8.png)

## アクションの作成
Gravio Studioでアクションを作成します。いつものHTTP Requestコンポーネントです。

ここで、先程のチャネル一覧のところから「チャネルID」と「ライトキー」を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/e58c60a3-6052-299b-85a4-7866ea096fe6.png)

URLに `http://ambidata.io/api/v2/channels/<チャネルID>/data` を指定します。
今回の場合、`http://ambidata.io/api/v2/channels/32659/data`となります。

Pre Mappingsでは、データ1(d1)にCO2データを送信しますので、ライトキーを使って、`cv.Payload`に以下のようなJSONを構築して渡します。

```:cv.Payload
{"writeKey": "28cdcd053c010cbf", "d1": tv.Data}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/9eedb048-aba9-2bfa-dd87-d32d39e7f420.png)

実行すると、`200 Success`と出てアクションが成功すると思います。

## 結果の確認
Ambientに戻って、チャネル一覧からチャネル名をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/50c7d0ed-abee-0062-c335-d9cd365f8bb6.png)

このようにデータ`0`が送られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/7b2167aa-3220-5df0-f6bf-b0062d0b36a8.png)

ボード名がデフォルトのままなので、あとで名前を変えておきましょう。

## トリガーで連携
最後にセンサーと連携するためのトリガーを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/0a3ce631-5461-9e5a-a7a7-69ae1ec7298f.png)

保存して、有効化すると、どんどんAmbientにデータが溜まっていきますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/f8afdd28-d221-e135-c68c-af98f37db2c7.png)

# 注意点
Ambientの「[諸元/制限](https://ambidata.io/refs/spec/)」にあるとおり、チャネルごとに最低5秒開ける必要があります。5秒以内に送信しても受信されないので注意してください。今回、CO2データは10秒毎に受信するので問題ありませんが、同一チャネルの別のデータに送信する際などは、一つのHTTP Request内で送るなど注意が必要です。

# ポイント
* Ambientにデータを送るときにはチャネルを作成し、チャネルIDとライトキーを使ってデータを送る
* 送信間隔に注意する

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


[CO2-PowerBI]:https://qiita.com/zrock/items/08148659ebf523f5c160
[Ambient]:https://ambidata.io/
[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