温度データに合わせて様々なメッセージをGravioで作成しSlackへ通知する(CreateRecordコンポーネントを活用したアクション内の条件分岐）

2019年2月21日にGravioがバージョンアップしました。（Version2.1.2301.0）
CreateRecordコンポーネントが新たに追加され、アクション変数を使用したBranchコンポーネントの分岐条件が設定できるようになりました。
今回は、CreateRecordコンポーネントを使用して、温度データが20℃未満の場合と、20℃以上の場合で異なるメッセージをSlackに投稿してみます。
条件分岐はトリガーの設定でも可能ですが、CreateRecodeとBranchコンポーネントを利用するメリットもあわせて記載していきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/ce998498-9dcd-ad12-e504-d92d734481a9.png)


類似内容のシステム　→　[**温度データSlack投稿システムを「５分」で作ってみた！**](https://qiita.com/mikawan/items/8184cdcc64642aa3729e)

#使用したもの
###ハードウェア
・Windows 10 PC（バージョン1809）
・Gravioレンタルデバイス
　-Gravioクライメートセンサー

###ソフトウェア・サービス
・Gravio
　-Gravio Studio Ver.2.0.2098.0
　-Gravio Server Ver.2.1.2301.0
・Slack

#Gravioの設定
##センサーの設定
センサーの設定については、下記記事をご参照ください。
[温度センサーのデータをエクセルで簡単に表示](https://qiita.com/mikawan/items/3d93543566680afda868#step1%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC%E3%81%AE%E8%A8%AD%E5%AE%9A)

##動作（アクション）の設定
アクションカードを作成し、温度が20℃以上と20℃未満で異なるメッセージをSlackへ投稿するアクションを設定します。

具体的な動作設定の流れは、以下のとおりです。

1. CreateRecordコンポーネントで分岐に使用するレコードデータを作成
2. Branchコンポーネント内で分岐に関する設定。分岐条件はBranchコンポーネント内に作成できるBranchCaseコンポーネントで指定。
3. レコードデータが分岐条件に一致する場合のSlackへの投稿動作を、BranchCase内にSlackPostMessageコンポーネントを追加し設定。

まずは、レコードデータを作成するために、CreateRecordコンポーネントの設定をします。

###CreateRecordコンポーネントの設定

ステップを追加し、CreateRecordコンポーネントを選択します。
追加したCreateRecordコンポーネントをクリックし、ステップ出力を選択します。
右下のウィンドウの右上に表示される、'+'をクリックし、フィルターに使用するステップ出力変数を追加します。
ステップ出力変数は、実行された結果を次のコンポーネントへ送信、またはファイルやデータ送信先へ出力する変数です。
今回はBranchコンポーネントで条件分岐に使用するセンサーデータを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/57e75ee1-ee0e-5994-0abb-5a74f5fb8168.png)

追加された変数をダブルクリックし、それぞれに下記内容を設定します。

|出力フィールド名|タイプ|式|
|:---|:---|:---|
|data（任意）|Double|av.Data|

`av.～～`はアクション変数と呼ばれ、センサーデータをもとに動作した際の時刻やデータをアクション内で使用することができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/7ab8671f-5f8f-013c-38cb-449c9d67cbfc.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/0804cb0e-af00-8d6b-23b0-c82efc852bba.png)
ここまでで分岐条件に使用するレコードデータの設定が完了しました。

###Branchコンポーネント
次にBranchコンポーネントを追加します。ステップを追加をクリックし、Branchコンポーネントを選択します。
追加後、コンポーネントをダブルクリックし、Branch内容の設定画面を表示します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/88a1d4bd-5e56-010c-a52a-543b04012ab7.png)

###BranchCaseコンポーネントの設定
次に、BranchCaseコンポーネントの設定で、分岐条件を設定します。
BranchCaseコンポーネント＞プロパティの順にクリックし、条件に分岐条件を設定します。
今回は20℃未満の時に動作するよう、`sin.data<20` と設定します。
`sin.`は、一つ前のコンポーネントに設定されているステップ出力変数を指定する際に使用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/8e05eb27-9679-bdd0-5ec7-931a81d9abba.png)
次に、BranchCaseコンポーネントをダブルクリックします。
遷移後の画面で、条件が一致した際のアクションを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/0484c9a5-fc3c-4e0b-7c4e-594206a35f87.png)
###SlackPostMessageコンポーネントの設定
遷移後の画面で、SlackPostMessageコンポーネントを追加し設定をします。
SlackPostMessageコンポーネントのプロパティには、下記内容を設定します。

|項目|内容|
|:---|:---|:---|
|Token|"取得したトークン"　　（""が必須です）|
|Channel|#general（Default値、任意で設定可能）|
|Text|任意のメッセージ（今回は”寒いので暖房をつけましょう”と設定）|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/ed5ace11-d421-464c-7859-df2ed5a01c80.png)

以上で、20℃未満となった場合の動作設定が完了しました。

上部に表示されているBranchコンポーネントをクリックし、Branch内容の設定画面に戻ると、先程のBranchCaseコンポーネントの下部にSlackPostMessegeコンポーネントアイコンが追加されていることが確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/5d7d4eaf-6207-c013-b2b7-fe92aac925e1.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/5112c46a-db27-282e-24f7-b445f8d91347.png)

###BranchCaseコンポーネントの追加と、20℃以上を検知した際の動作設定
次に、先程の条件と対になる20℃以上を検知した際の動作を設定します。

ステップを追加し、BranchCaseコンポーネントを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/eebf45ac-78ed-ad61-05a5-57dc37af6ad6.png)
追加されたBranchCaseコンポーネントに20℃未満になった場合と同様に設定していきます。
先ほどと異なる部分は、以下の2点です。

BranchCaseの条件：`sin.data>=20` 　（20℃以上の場合に動作する設定）
SlackPostMessageコンポーネントのtext：`適温です。`

設定後のBranch内容の設定画面は以下のようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/31e130e0-79f2-4c3a-60d6-6db062884ca1.png)

ここまでで、アクションの設定が完了しました。
##動作タイミング（トリガー）の設定
センサーデータ受信時のトリガーを設定します。
トリガーの設定内容は、以下のとおりです。

|項目|設定値|
|:---|:---|
|エリア|温度データのエリア|
|レイヤー|温度データのレイヤー|
|アクション名|設定したアクション（今回はAction5）|
|Interval|5（Default値、任意）|
|Classic/Threshold Triger|Classic Trigger（Default）|
|温度|任意の値 （数値入力は必須、今回は0を使用）|

Intervalはトリガーの動作間隔です。5に設定した場合、動作後5秒以内にデータが入力された場合もアクションを実行しません。
設定後の画面は以下になります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/6709f101-4a8b-e813-9fe0-c5731057190a.png)

以上がトリガーの設定です。
トリガーを有効にすると、温度データを受信した際に咲くほど設定したアクションを実行し、アクション内の分岐で温度に応じて異なるメッセージをSlackへ投稿します。

#動作確認
20℃未満になると「寒いので暖房を入れましょう」というメッセージが投稿されることを確認しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/a3b87f41-16aa-b47c-8826-e18e513788ea.png)

#トリガー分岐との使い分け
今回は、トリガーで分岐させずに、アクションカード内で分岐条件を設定しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/564c65ca-62f5-b0f5-ca39-16f570c20843.png)

トリガーで条件分岐した場合は、以下の動作フロー図になります。【参考記事】→[**温度データSlack投稿システムを「５分」で作ってみた！**](https://qiita.com/mikawan/items/8184cdcc64642aa3729e)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/9a67f20b-ca60-ce55-4dc8-8358580b32bb.png)

今回の温度データの通知は、どちらで設定した場合も同様の動作を実現できます。
しかしながら、例えば午前中と午後とか、業務時間中とそれ以外とで処理を別にしたい場合など、データの受信時間を利用した分岐条件を設定する場合などはトリガーでは設定ができません。

以下にトリガーでの条件設定、BranchCaseでのアクションによる条件設定の違いをまとめました。
実現したい動作によって、使い分けをしていただければと思います。

|項目|トリガーで条件設定|アクションで条件設定|
|:---|:---|:----|
|データを受信した日時を使用した条件分岐|☓|○|
|センサーごとの条件分岐設定<br>（Aセンサーは18℃、Bセンサーは20℃で動作といった設定）|○<br>トリガー一覧画面でわかりやすく設定可能|△<br>Branchコンポーネントの設定が複雑になるが設定可能|
|センサーごとにトリガーを設定している場合のしきい値の変更|△<br>トリガー内容を1つずつ変更|○<br>アクション内にしきい値変更のみで設定可能|

#あとがき
次回は、時間ごとでアクションを設定できるTimeBranchコンポーネントについて掲載いたします。