Gravio 4のHTTP Requestでセンサーからの情報をhttpbinに送って確認してみる

Gravio 4は**HTTP Request**コンポーネントを使ってクラウドのサービスなどにセンサーデータを送ることができる。
その際、うまくデータが送れているのかを確認する方法はいくつかあるが、httpbin.orgというサービスにリクエストを投げてみるとうまく送れているのかどうかがわりと簡単に確認できるのでやってみる。

# 使用環境

* 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

# 手順
アクションを作成し、**HTTP Request**コンポーネントを追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/37d6b866-1f8f-f77e-f4b4-dda6715c7865.png)

プロパティには以下の値を設定する。URLなどはいろいろ試したい内容によって変わるので、[本家のサイト](https://httpbin.org/)を見てみてください。

| プロパティ | 値 |
|:-----------|:------------|
|HTTPメソッド|POST|
|URL|https://httpbin.org/post|
|Content-Type|(デフォルト)|

Pre Mappingsでは、ボディにJSON形式でセンサー情報を送るために、`cv.Payload`に次の値を設定してみます。

```
{"AreaId": tv.AreaId, "AreaName": tv.AreaName, "LayerId": tv.LayerId, "LayerName": tv.LayerName, "KindId": tv.KindId, "KindName": tv.KindName, "PhysicalDeviceId": tv.PhysicalDeviceId, "PhysicalDeviceName": tv.PhysicalDeviceName, "Timestamp": tv.Timestamp, "DataId": tv.DataId, "Data": tv.Data, "KeyAreaName": tp.KeyAreaName, "KeyLayerName": tp.KeyLayerName, "TriggerName": tp.TriggerName}
```

センサー情報はトリガー変数とトリガープロパティから取得します。`tv.`で始まるのがトリガー変数、`tp.`で始まるのがトリガープロパティです。トリガープロパティではトリガーの情報が定義されていますが、トリガー内で宣言しないと使えませんのであとで説明します。
トリガー変数は以下のようになっています。詳しくは「[アクション内で利用できる変数と変数型][Gravio-Variables]」を参考にしてください。

|トリガー変数名|	説明|
|:----|:----|
|tv.AreaId|	エリアID|
|tv.AreaName|	エリア名|
|tv.LayerId|	レイヤーID|
|tv.LayerName|	レイヤー名|
|tv.KindId|	データ種別ID|
|tv.KindName|	データ種別名|
|tv.PhysicalDeviceId|	センサーの物理デバイスID|
|tv.PhysicalDeviceName|	センサーの物理デバイス名|
|tv.Timestamp|	センサーからデータが出力されたときの時刻。フォーマットはRFC3339Nano|
|tv.DataId|	このセンサーデータ固有ID|
|tv.Data|	センサーデータの値。tv.Dataは最初のコンポーネントのcv.Payloadと同じになります|

|トリガープロパティ名|	説明|
|:----|:----|
|tp.KeyAreaName|エリア名。`tv.AreaName`と同じです|
|tp.KeyLayerName|キーレイヤー名。`tv.LayerName`と同じです|
|tp.TriggerName|トリガー名|

実行してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/1692b1c6-9a33-4966-5354-67a475685db1.png)


httpbin.orgからのレスポンスがログに表示されます。jsonの値が送った内容ですね。Studioから実行したので、各データにはダミーのデータが入ってます。トリガープロパティは宣言されてないので`null`ですね。

試しにCO2の値をキーにトリガーを設定してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/3df8ff9b-eadc-08a1-65e1-185a64f81ff1.png)

今度はアクションのコンソールがないので**HTTP Request**の設定でダンプをログに出力しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/db5b2810-9886-9558-20bd-4f6c78561c0a.png)

ログビューアーを見るとちゃんとした値が設定されてます。ログビューアーだと逆順に表示されるので少し見づらいですが、もし必要ならログファイルを直接確認してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/ee850b15-e166-7bbf-eb49-ad0c464f046e.png)


# 参考
* [Gravio][]
* [HTTP Requestコンポーネント][Gravio-HTTPRequest]
* [アクション内で利用できる変数と変数型][Gravio-Variables]
* [Pre Mappings / Post Mappingsでの式の記述の仕方][Gravio-Mappings]
* [httpbin.org](https://httpbin.org)

 (2021/2/10修正)
いくつかのトリガー変数が漏れていたので追加しました

[Gravio]:https://www.gravio.com/jp
[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