myThingsをはじめよう - Part5: 「天気・災害」のトリガーを「IDCF」のアクションがHTTPで受信する

[「IDCF」チャンネル](http://www.idcf.jp/cloud/iot/)は主に自作デバイスを[myThings](http://mythings.yahoo.co.jp/)と接続するためのチャンネルですが、HTTPクライアントが動作する環境ならどこでも使うことができます。例としてOSXのターミナル上でcurlコマンドを「IDCF」チャンネルのアクションとして使います。「天気・災害」チャンネルをトリガーにして、「IDCF」チャンネルのアクションを実行する組み合わせを書いてみます。

![スクリーンショット 2015-09-09 21.22.50.png](https://qiita-image-store.s3.amazonaws.com/0/51786/89df977e-1405-ac60-d8f9-0f2c9983d807.png)

## myThingsアプリ

### 「天気・災害」チャンネルの承認

トリガーに「天気・災害」チャンネルを使います。myThingsアプリを開きチャンネル一覧から選択して認証します。

![weather-channel.png](https://qiita-image-store.s3.amazonaws.com/0/43745/dbc90d34-2b9e-c7bf-5345-6944a83c021a.png)


### 組み合わせの作成

ホーム画面から右上のプラスボタンをタップします。

![mythings-home.png](https://qiita-image-store.s3.amazonaws.com/0/43745/11e1d7a1-22c0-f246-ab74-8697c46389f2.png)


組み合わせ作成画面ではトリガーとアクションのチャンネルをプラスボタンをタップして選択します。

![idcf-channel-recipe.png](https://qiita-image-store.s3.amazonaws.com/0/43745/89d8228c-e3f9-b8c7-ea69-3c564c8e7a04.png)


### 「天気・災害」トリガー

トリガーのプラスボタンをタップして、チャンネル一覧から「天気・災害」をトリガーに選択します。アクション詳細設定画面で「今日の天気予報」をタップします。


![weather-channel-today.png](https://qiita-image-store.s3.amazonaws.com/0/43745/fac4b6a1-8c10-46ca-7238-162a9ac09b07.png)


天気予報を知りたい「地域」を選択します。今回は「新宿」にしました。

![weather-channel-trigger-selected.png](https://qiita-image-store.s3.amazonaws.com/0/43745/57b2d3ba-f357-b7d1-de63-7d69f114567e.png)


OKボタンをタップすると組み合わせの作成画面に戻ります。


### 「IDCF」アクション

アクションのプラスボタンをタップして、チャンネル一覧から「IDCF」をアクションに選択します。アクション詳細設定画面で「通知する」をタップします。

![idcf-channel-notify.png](https://qiita-image-store.s3.amazonaws.com/0/43745/50df7f2a-ce54-2377-0c7b-de097fa66fe2.png)

「アクションを選択する」のリストボックスから、`action-1`を選択します。

![idcf-channel-action-1.png](https://qiita-image-store.s3.amazonaws.com/0/43745/f6556ed7-9521-9066-0559-27192b4a8c50.png)


「メッセージ」のテキストエリアをタップすると、予めセットされた「候補」を選ぶことができます。ここから以下のようにカンマ区切りでいくつか選択します。中括弧のプレイスホルダは実際の天気情報に置換されて、アクションがメッセージとして受信することができます。

```
{{地点名}},{{天候の状態}},{{最高気温}},{{天候状態の画像のURL}}
```

![idcf-channel-message.png](https://qiita-image-store.s3.amazonaws.com/0/43745/d6cb7c58-d3d3-e53f-6aae-0248923898c0.png)


アクションの詳細設定が終わったらOKボタンをタップすると、組み合わせの作成画面に戻ります。

![idcf-channel-action-selected.png](https://qiita-image-store.s3.amazonaws.com/0/43745/4affadb5-2865-e0bc-ff63-915316c6860f.png)

とりあえず「実行タイミング」と「曜日指定」はデフォルトのまま、作成ボタンをタップして終了します。

![idcf-channel-action-create.png](https://qiita-image-store.s3.amazonaws.com/0/43745/512d3fd9-0c39-ff43-a70c-2960c50bea2f.png)


組み合わせの作成が完了して一覧画面に戻ります。

![idcf-channel-recipe-created.png](https://qiita-image-store.s3.amazonaws.com/0/43745/234f13de-c2cb-7504-ce8b-cfc076e6ce48.png)


## 「IDCF」チャンネルサーバー

### action-1デバイスの確認

最初に「IDCF」チャンネルサーバーをインストールしたIDCFクラウドの仮想マシンにログインします。myThingsアプリのアクションに選択した`action-1`のuuidとtokenを確認します。

```bash
$ cd ~/iot_apps/meshblu-compose
$ docker-compose run --rm iotutil show -- -k action-1

> iotutil@0.0.1 start /app
> node app.js "show" "-k" "action-1"

┌──────────┬──────────┬──────────────────────────────────────┐
│ keyword  │ token    │ uuid                                 │
├──────────┼──────────┼──────────────────────────────────────┤
│ action-1 │ 8a781e76 │ 3a78814a-6879-4543-bacf-9a206cd951a6 │
└──────────┴──────────┴──────────────────────────────────────┘
```

### curlコマンドのアクション

確認したデバイス情報を使ってcurlコマンドを実行します。HTTPヘッダの認証情報にmyThingsアプリのアクションに指定した`action-1`のuuidとtokenを指定することで、myThingsのトリガーからのメッセージを`subscribe`します。Meshbluサーバーはセッションを閉じないのでcurlコマンドは待ち受け状態になります。

* URL: 「IDCF」チャンネルに割り当てたIPアドレス + '/subscribe'
* meshblu_auth_uuid: action-1のuuid
* meshblu_auth_token: action-1のtoken

```bash
$ curl -X GET \
  "http://210.140.162.58/subscribe" \
  --header "meshblu_auth_uuid: 3a78814a-6879-4543-bacf-9a206cd951a6" \
  --header "meshblu_auth_token: 8a781e76"
```

このcurlコマンドはしばらくするとタイムアウトします。タイムアウトする前にmyThingsアプリから「手動実行」でテストします。

## 手動実行でテスト

myThingsアプリから組み合わせ一覧を開きます。


![idcf-channel-recipe-list.png](https://qiita-image-store.s3.amazonaws.com/0/43745/6e3451ee-7155-1647-0652-cd89eca080df.png)


先ほど作成したばかりの組み合わせをタップして詳細画面に移動します。

![idcf-channel-recipe-detail.png](https://qiita-image-store.s3.amazonaws.com/0/43745/e13f97e7-252b-81cd-173d-4ebcec8a7dce.png)


「手動実行」ボタンをタップすると、デフォルトで15分間隔の実行タイミングを待たなくても、すぐに組み合わせを実行することができます。


![idcf-channel-recipe-executed.png](https://qiita-image-store.s3.amazonaws.com/0/43745/d6e885e9-69f6-d891-55de-a0148e47fd46.png)


### curlコマンドのアクション結果

curlコマンドで`action-1`をsubscribeしているシェルに戻ります。「IDCF」チャンネルのアクションの結果として以下のようなJSONメッセージを「天気・災害」チャンネルのトリガーから受信することができました。

```json
{"devices":["3a78814a-6879-4543-bacf-9a206cd951a6"],"payload":"東京（東京）,曇り,24,http://i.yimg.jp/images/weather/general/forecast/clouds.gif","fromUuid":"12a95246-f31e-4f0c-9678-2ae755e57b98"}
```

### MQTTでsubscribeもできています。
topicは、[Part3](http://qiita.com/masato/items/186c9d50eec76ada3d05)で記載したとおり、action-1のuuidになります。
[meshblu](https://developer.octoblu.com/)を利用することでHTTPやMQTT,CoAP,Websocketなど様々な通信でsubscribeできます。

```
$ mosquitto_sub \
    -h 210.140.162.58  \
    -p 1883  \
    -t 3a78814a-6879-4543-bacf-9a206cd951a6  \
    -u 3a78814a-6879-4543-bacf-9a206cd951a6  \
    -P 8a781e76 \
    -d
```