myThingsとIDCFチャンネルでできること

##myThingsでできること

[myThings](http://mythings.yahoo.co.jp/)は、Yahoo JAPANが開発したWebサービスやガジェットの機能を組み合わせて利用ができるサービスです。
一般には特集というかたちで、組み合わせのおすすめが毎月配信され、これを選ぶことが多いですが、自分で組み合わせをつくることも可能です。
組み合わせの単位は、**チャンネル**という単位で定義され、myThingsアプリ上で組み合わせを行うことができます。

チャンネルの種類と内容については、こちらの[サイト](http://wepli-dot2.hatenablog.com/entry/myThings-all-Channe)が詳しく説明をしています。

チャンネルには動作を実行する条件になる**トリガー**と、トリガーが発生した場合に実行される**アクション**になるものがあります。
トリガーとアクションをmyThingsアプリで設定することで、組み合わせが実行されます。
トリガーの条件を満たした状態でアクションが実行されることを、**発火**と表現していることがあります。
また、アクションは複数選択することが可能です。

![スクリーンショット 2015-09-18 19.19.44.png](https://qiita-image-store.s3.amazonaws.com/0/51786/d6eb977f-5dfe-fafe-2eea-1e69547a26d9.png)


組み合わせの実行タイミングは、現在のところ、”15分単位”で行うか”曜日と時刻の指定”で行うことができます。
逆に言うと、トリガーが発生してすぐにアクションを発生させるような、”リアルタイム”な処理はできません。
検証やデモ用に、**手動実行**という機能があり、myThingsアプリから強制的にトリガーを実施することができます。

##IDCFチャンネルでできること

myThingsでは、自作のデバイスを**IDCFチャンネル**として他のチャンネルと組み合わせすることができます。
自作のデバイスにセンサーやモーター、LEDなどを接続することで、センサー情報をもとに他チャンネルでアクションを実行したり、他チャンネルのトリガーをもとにモーターを駆動させたり、LEDを点灯させたりすることができます。
現在のところ、IDCFチャンネルをトリガーにした場合、他チャンネルへは発火の通知だけ行え、デバイスのデータをmyThingsサーバに渡すことはできません。
IDCFチャンネルをアクションにした場合、トリガーを設定したチャンネルから所定のデータを受け取ることはできます。（例えばある場所の天気情報や画像のURLなど）

##IDCFチャンネルの概要

自作デバイスとmyThingsの連携ですが、実際には以下のような構成になっています。自作デバイスとのやりとりは、いったんIDCFチャンネルサーバがうけて、IDCFチャンネルサーバがmyThingsサーバとのやりとりをおこないます。
myThingsアプリをつかって、myThingsサーバからIDCFチャンネルサーバの認証をとることになります。

![スクリーンショット 2015-09-18 19.39.02.png](https://qiita-image-store.s3.amazonaws.com/0/51786/38428c3b-f3e0-9f80-0c4b-85df51ecc0bb.png)


myThingsと自作デバイスを連携させるには、電子工作、サーバ構築、プログラムなどの知識が必要になります。
なるべく簡単にmyThingsを楽しめるよう、["myThingsをはじめようキット"](https://www.switch-science.com/catalog/2366/)があるので、こちらを前提に[masatoさん](http://qiita.com/masato)が情報をまとめてくれています。

順をおってやることで、気温が一定の高さになったときに、指定した宛先にメール通知がいく仕組みをつくることができます。

IDCFチャンネルサーバは、[meshblu-compose](https://github.com/IDCFChannel/meshblu-compose)という環境をインストールし構築します。
meshblu-composeは、[meshblu](https://developer.octoblu.com)というオープンソースソフトウェアを中心に[docker](https://ja.wikipedia.org/wiki/Docker)上で構成されています。
**docker-compose**という仕組みをつかい、サーバ上でインストールするだけで、IDCFチャンネルサーバを構成できます。

##実際に使ってみる

普段電子工作やサーバをやっているわけではない人を前提に、各パートで何をやっているのかを書いてみました。

![image](https://qiita-image-store.s3.amazonaws.com/0/51786/0c3172b6-7cd2-c8ea-3205-968e2b641dd2.png)


[Part1](http://qiita.com/masato/items/16bf8b17ee4881179462)
Raspberry Piでの**電子工作のパート**です。
Raspberry Piのセットアップとして、OSのアップデートやWifiへの接続などを行います。環境はmac osからUSB経由でシリアルコンソールからRaspberry Piの設定を行っています。
その後、Lチカと温湿度気圧センサーからのデータ取得をやっています。

[Part2](http://qiita.com/masato/items/f9be4a15216fe29de7fb)
**サーバ構築**のパートです。
IDCFクラウド上でIDCFチャンネルサーバの構築をします。
IDCFクラウドのサインアップ方法は記載していないので、よくわからない方は[こちら](http://www.idcf.jp/cloud/order.html)を参考にしてみてください。
内容は、IDCFクラウドサービスにSignUpし、サーバを構築、myThingsサーバや自作デバイスと通信するためのネットワークの設定をします。
その後、IDCFチャンネルサーバをたてるため、meshblu-composeをインストールします。
meshblu-composeの中の話は、サーバ系の方には気になる内容なので、別途投稿したいとおもいます。

[Part4](http://qiita.com/masato/items/3d958b4b427020b83b94)
IDCFチャンネルサーバのmyThingsへの認証を行います。

[Part6](http://qiita.com/masato/items/152870ff7fd2f5d96cf1)
温湿度気圧センサーで取得したデータをもとに、気温が27度以上になったら、メールで通知する組み合わせをつくります。
おもにRaspberry Pi上でのプログラムの実行とmyThingsアプリでの組み合わせの設定になります。
Raspberry PiでPythonのサンプルプログラムを実行し、気温が27度以上になったさいに、IDCFチャンネルサーバにhttpで通知します。
通知をもとにトリガーが発行され、指定のメールアドレスにメールが送信されるよう、myThingsアプリで組み合わせの設定を行います。


##質問や参考情報
　meshblu-composeは、オープンソースソフトウェアです。
　githubやFacebookを通じて情報のやりとりをしています。
　質問は[github](https://github.com/IDCFChannel/meshblu-compose/issues)上でissueをあげるか、[Facebookの公開ページ](https://www.facebook.com/groups/iotmythings/?fref=ts)を使うことをおすすめします。
　また、関連情報が[qiita](http://qiita.com/tags/mythings)上にあがっています、ぜひ参考にしてみてください。
　

##用語集
myThingsアプリ ：  Yahoo! JAPANから提供されているmyThingsのスマホアプリ
myThingsサーバ ：  Yahoo! JAPANで運営しているmyThingsのシステム　実際の組み合わせの処理や認証が行われている
チャンネル：　myThingsで組み合わせができる、Webサービスやガジェットのこと
トリガー：　組み合わせ動作が実行されるための条件のこと
アクション：　トリガーが発動されたばあいに、実行される内容のこと
発火：　アクションが実行されること、トリガーの条件を満たすこと
IDCFチャンネルサーバ：　 メッセージブローカー、自作デバイスや他チャンネルからの情報の仲介や蓄積をしている