Gravio 4で2つの部屋のCO2濃度をPowerBIで可視化する

「[Gravio 4とPower BIでCO2を可視化する][Prev]」ではとりあえず一つの部屋のCO2濃度をPower BIで可視化してみた。
実は、Power BIのストリーミングデータセットの定義で、`Location`というフィールドを追加してありました。HTTP Requestコンポーネントで固定値を送っていたのですが、これを自動で設定して2つの部屋のCO2濃度を一つのグラフに表示してみます。

# 使用環境

* 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
* Gravio CO2センサー×2

※Gravio CO2センサーはStandardプランを契約するとレンタルすることができます。

# 事前準備
「[Gravio 4とPower BIでCO2を可視化する][Prev]」まで準備しておきます。

# 手順
## CO2センサーをもう一つペアリング
まずはもう一つの部屋のためのCO2センサーをペアリングします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/bd0ba22f-a586-e5f1-4a10-22427a4e9808.png)


## エリアをもう一つ追加し、センサーを登録
もともとあったエリアに加えて、もう一つエリアを追加します。元からあったエリアにはわかりやすいように部屋の名前をつけておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/cd88efb2-7fdc-116c-0ad2-57df29ac22ef.png)

新しく作ったエリアにも同じようにGravio-CO2レイヤーを追加し、先程ペアリングしたCO2センサーを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/0548e28a-c126-f4dd-1008-278c62b49e2a.png)

## データの確認
2つの部屋のCO2濃度が取得できるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/abac7eae-1e83-6fcf-acb3-daefc050a1fc.png)

## トリガープロパティを追加
前回作ったトリガーを開いて、「アクション」タブを開きます。
ここで、トリガープロパティの「追加」ボタンをクリックして、トリガープロパティを追加します。
追加したら、トリガープロパティ名のところのドロップダウンを開くと、いくつか候補が出てきます。ここでは、一つは`KeyAreaName`を選択、もう一つは`KeyLayerName`を選択してください。右側の「値」のところにエリア名とレイヤー名が自動で入ったと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/da399643-46ef-80a8-e5e5-b13539a46c4a.png)



このトリガープロパティの値は、アクションで`tv.`のプレフィックスで参照できます。つまり、この値をアクションの中で使えるので、これを`Location`に渡せばいいのです。

## アクションでエリア名をPower BIのAPIに渡す
というわけで、アクションを開きます。HTTP Requestコンポーネントのcv.Payloadの`Location`の値を`tv.KeyAreaName`に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/ef099779-3b4d-4a4e-669a-ce7cdfbaf50d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/3b27c6c3-60bb-84bc-7119-0a5508399aec.png)

## 実行

では実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/64a1cbd8-1303-4bdb-0741-a4df7689d735.png)

一瞬Locationが空白で、値が0のデータが表示された後、エリア名である「仕事部屋」がLocationのグラフが表示され始めました。これで一つはできあがりですね。

## トリガーをもう一つ作成
あとはもう一つのセンサー用にトリガーをもう一つ作ります。
作成済みのトリガーとほぼ同じで、エリアとキーレイヤーだけ新しいセンサー用のエリア、レイヤーを指定します。
アクションには同じアクション、トリガープロパティには同じように`KeyAreaName`と`KeyLayerName`を追加しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/eeba4fb4-45d4-756f-5dba-792b604fc4fb.png)


## 結果
トリガーを保存して有効化するとしばらくしてどんどん新しいグラフが描画され始めると思います。
この仕組みを使うと、新しいエリアとレイヤーを追加してセンサーを登録し、トリガーを作るだけでいろんなところのCO2濃度が比較できるようになります。簡単ですねー。しかし、CO2が高い。1000ppm行かないように換気しましょうね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/314988f5-ee79-04dd-cc28-8fae11032f34.png)

# ポイント
* エリア名やキーレイヤー名をアクションから使うにはトリガーにトリガープロパティを追加して使う
* アクションでトリガープロパティを参照するには `tv.`を使う
* それぞれのセンサーを別エリアに配置して、それをアクションからPower BIにわたすことで、複数のセンサーのデータをグラフ化するのが簡単になる

# 参考
* [Gravio][]
* [CO2センサーのセットアップ][Gravio-CO2]
* [HTTP Requestコンポーネント][Gravio-HTTPRequest]
* [トリガー変数とトリガープロパティー](https://doc.gravio.com/manuals/gravio4/1/ja/topic/triggervalandtriggerprop)
* [アクション内で利用できる変数と変数型][Gravio-Variables]
* [Pre Mappings / Post Mappingsでの式の記述の仕方][Gravio-Mappings]
* [Power BI](https://powerbi.microsoft.com/ja-jp/)



[Prev]:https://qiita.com/zrock/items/08148659ebf523f5c160
[Gravio]:https://www.gravio.com/jp
[Gravio-CO2]:https://www.gravio.com/jp/sensor-setup-guide#Gravio-CO2
[Gravio-HTTPRequest]:https://doc.gravio.com/manuals/gravio4/1/ja/topic/http-post-action-component
[Gravio-Variables]:https://doc.gravio.com/manuals/gravio4/1/ja/topic/available-variables-in-action
[Gravio-Mappings]:https://doc.gravio.com/manuals/gravio4/1/ja/topic/premappings-postmappings