enebularとmyThingsを連携してデバイスの動きや可視化をやってみた

この記事は、<a href="http://qiita.com/advent-calendar/2016/enebular" target="_blank">enebular Advent Calendar 2016</a>の23日目の記事です。前日は @k-harada413 さんによる、<a href="http://qiita.com/k-harada413/items/ee65ca6d97d8bba5f008" target="_blank">enebularのflow変数を使って、コーヒータイムにアイドルを</a>の記事でした！

Wio Nodeハンズオンを参考に試していただいてありがとうございます！

最近、イベントごとでenebularとmyThingsとデバイスを連携させまして、無事連携できたので知見を残しておきます。

## 準備したもの

<a href="http://qiita.com/moyaidcf/items/63e5b07ffe272bdbd803" target="_blank">myThingsのIDCFチャンネルサーバを簡単につくる</a>記事を参考にmyThingsとIDCFクラウドを連携させた上で、enebularのフローで連携させました。

ここに至るまでには、以下の記事をとても参考にさせていただきました。

* <a href="http://deferloader.blog.uhuru.co.jp/?p=5930" target="_blank">[IoT][enebular][Node-RED][myThings] enebular/Node-REDとmyThingsの連携 – deferloader</a>
* <a href="http://qiita.com/joeartsea/items/2680b94108c49cbca6b2" target="_blank">myThingsとNode-REDを使ってnetatmo Welcomeで認識した知らない人の顔を関連付けるタスクを自動登録 - Qiita</a>

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/a4d1c0fd-b256-8e45-e9be-6aec37fd5c59.png)

## littleBitsをMilkcocoaとつなぐCocoaBitを使ってenebularとつなぎこみ

littleBitsをMilkcocoaとつなぐCocoaBitを使ってenebularとつなぎこみます。enebularはMilkcocoaでINFOMATION可視化ができるので、これでIoT的なアクションも、可視化へのステップも両立することができます。

プロトタイプが進んでいくときに、常にそのパスが持てるというのは、作業しやすいですね。

![2016-12-23_11h22_02.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/560a52ca-4606-75d0-4046-9cacd939d441.jpeg)

こちらはミニマムに動かした動画です。

![cocoabit.gif](https://qiita-image-store.s3.amazonaws.com/0/56170/66b118f4-bb53-b72c-b0e6-cea771ce2b52.gif)


<a href="http://www.1ft-seabass.jp/memo/2016/12/11/strawbees-littlebits-servo-memo/" target="_blank">StrawbeesにlittleBitsサーボをうまく取り付けるメモ</a>をベースに本番デモ時には大きな<a href="https://strawbees.com/" target="_blank">Strawbees</a>の造形物と接続して動かしました。

## myThingsアプリとのアクションの流れ

押したときの連携をざっくりお伝えすると、

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/2962af71-3ea3-73b5-c64e-4cc524825007.png)

このようにボタン連携を用意した上で、

![2016-12-23_11h14_24.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/75b0c143-2fcd-1e7a-d9e0-f1edd87cc933.jpeg)

押してみます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/869347cb-5a6d-d209-edbe-8af32d9b1452.png)

アクション受取り→CocoaBit動作部分につながっていきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/6c5b6fff-93db-633e-bf74-eebb4214a3bc.png) については以下のように設定しました。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/a332149c-ff35-457e-988c-4c06d55ab130.png)

Topicにはaction-1のuuidを設定。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/acd8ed0e-eb1b-e98d-caf8-17dde6a9f27d.png)

MQTTの接続設定では、今回作成されたIDCFクラウドのIPアドレスおよびポートは1883に設定しました。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/79a46e8c-4621-92c8-aa5f-00cbd6de4e5e.png)

Securityでは、Usernameにaction-1のuuid、Passwordにaction-1のトークンを設定しました。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/7e7acfdc-c1a4-a2cd-32a9-7ce748ce85f6.png) 押すたびに振り回される動きです。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/9218de1d-1bb2-28da-56a7-09326de57fb2.png)

コードは以下の通りで、mythingsValueをグローバルに保持しつつ、action-1がくるたびに切り替わるようにしています。

```js
var flag = global.get("mythingsValue") || 0;

if(flag == 1){
    flag = 0;
    msg.payload = { v:0 };
} else {
    flag = 1;
    msg.payload = { v:1023 };
}

global.set("mythingsValue" , flag)


return msg;
```

こちらで設定された動力が ![image](https://qiita-image-store.s3.amazonaws.com/0/56170/5b7a2338-be63-07fd-5215-17f2da2d3952.png) に伝わります。

## myThingsアプリとのトリガー連携の流れ

実はこのアクション。トリガーとも連携します。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/0e48a7ef-050e-c3b1-b87a-e2931c18fa99.png)

15分ほど待っていると通知が来ます。

こちらは、この部分のフローでできていて、

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/b3c5495e-3d4a-8287-ef1a-bad682f80b30.png)

このようにトリガーに送られるようになっています。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/b853b767-2db2-aefa-8656-05f6488c01ac.png) の設定はこのとおりです。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/de1f5290-edc2-7abb-ba3f-709b779b6826.png)

* msg.headers.meshblu_auth_uuid
    * ヘッダー meshblu_auth_uuid の設定（http request時にヘッダー付与）
        * trigger-1のuuidを設定
* msg.headers.meshblu_auth_token
    * ヘッダー meshblu_auth_token の設定（http request時にヘッダー付与）
        * trigger-1のtokenを設定
* msg.url
    * http://[IPアドレス]/data/[trigger-1のuuid] で設定。
        * 例えば、IPアドレスが 192.168.0.1 で trigger-1のuuid が 000000000000000000000000 の場合
            * ```http://192.168.0.1/data/000000000000000000000000```
* msg.payload
    * myThingsに送信する値。text1だけ設定。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/bba6d879-8499-5686-81d0-9f8b56a10991.png) の部分は以下のように空でOK。changeノードで設定された値に準じる形です。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/2665fa46-bd02-13f2-2d08-a87066c80f4f.png)

このように設定してトリガーに通知を送りました。

## INFORMATIONで可視化

さて、当日はmyThingsアプリからのアクションとトリガーだけでなく、ほかの連携も行いました。

![2016-12-23_11h18_32.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/f7891eb4-42b2-2469-b4e0-2876c29d1f19.jpeg)

Raspberry Piとカードリーダーを連携して、10%・50%・100%とサーボにカード命令を出して操作するものや、さらに、littleBits BLEモジュールとネット連携するものといったデモも織り交ぜたものになりました。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/2640cfab-be10-2204-fc2c-8df72497e419.png)

このように、フローはだいぶカオスになっていますが、myThingsが使用された回数とサーボの出力量を常に可視化できるようにしていました。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/71459739-8d01-7d44-d8f2-043307ae91ba.png)

ちょっと日付が冗長にしすぎまして不格好ですが無事取れています。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/89a314a7-8edd-648a-f983-6a686b7e2bfe.png)

当日はとりあえず流しっぱなしにしてこのようなグラフができました。いろいろと動いていますね！このように、なにかしらのモノやデバイスと双方向に動くようなコンテンツに関しても、enebularで対応してみるのも楽しさがありました。

今回はmyThingsが使用された回数とサーボの出力量でしたが、さらに発展させて、たくさんデモをひとまずenebularとMilkcocoaにつないでデータ蓄積をさせておいて、おのおののデモごとの使用量からデモごとの人気を可視化といったこと。

はたまた、同時に使用されたときのパワーの集まり具合でさらなるアクションを起こしたりアイデアが広がります。また、myThingsの様々なトリガーと連携して、パワーが集まるとTwitterに投稿がされたりするといった、データ連携も面白そうです。