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コンポーネントを追加する。

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

プロパティ
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.で始まるのがトリガープロパティです。トリガープロパティではトリガーの情報が定義されていますが、トリガー内で宣言しないと使えませんのであとで説明します。
トリガー変数は以下のようになっています。詳しくは「アクション内で利用できる変数と変数型」を参考にしてください。

トリガー変数名 説明
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 トリガー名

実行してみます。

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

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

今度はアクションのコンソールがないのでHTTP Requestの設定でダンプをログに出力しておきます。

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

参考

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