fog computingのサンプル実装
それでは手元にある機材を用いて、fog computingの概念を意識したサンプル実装を行ってみましょう。プロダクトレベルでfog computingを実現する場合、fogとcloudの対障害性の確保や通信が不安定な場合への対応、fogとcloudおよび通信経路のセキュリティの担保など、解決すべき課題がたくさんあります。しかしそれらすべてを考慮するのは大変なので、このサンプル実装ではまず、fogとcloudの役割分担にのみ着目して実装を行います。
サンプルアプリの概要
サンプルアプリとして、ヒトとテレビの関係を少し幸せにする「Wasted energy of TV」というサービスを考えてみましょう。
Wasted energy of TVは、日常生活において「点いているけれど見ていないテレビ」に費やされている時間を可視化します。赤色に近ければ集中してテレビを見ていますが、青色に近ければテレビが点いているけれど見ていないという状態を表します(灰色はテレビが点いていない時間です)。

またfogから送られたデータをcloudで分析し、「テレビは点いているけれど誰も集中して見ていない状態」であれば、自動的にテレビを消すという機能も実装しましょう。

Wasted energy of TVにより、テレビを見ていたつもりでもテレビに集中しておらず、無駄に費やしてしまった時間に気づくことで、生活にメリハリがつくようになります。また集中してテレビを見ていないならばテレビが消えてしまうため、無駄な電力消費も削減できるでしょう。
「今テレビを見ているか?」をfogで、「集中して見ているか?」をcloudで判断し、結果を現実世界にフィードバックすることで、ヒトとテレビの関係性が少し幸せになるのではないでしょうか。
サンプルアプリのアーキテクチャ
このWasted energy of TVは、Intel EdisonとRaspberry Piが中心となって構成するfogと、IBM Bluemixが中心となるcloud、およびGUIとしてWebブラウザが連携して動作します。

fogを構成するデバイスとプログラム
fogは次のデバイスで構成しました。
- Intel Edison Kit for Arduino(Yocto Linux 3.10.17-yocto-standardカスタム)x 3台
- Raspberry Pi Model B+(Raspbian 3.18.11+)x 1台
- 赤外線センサー: PL-IRM0101
- 赤外線LED: OSI5FU5111C
- USBカメラ: LOGICOOL C270
- 単極双投ON-OFF-ON型トグルスイッチ
- カラーLEDやカーボン抵抗など
Edison 1号機はRaspberry Piとクロスケーブルで直結されており、Raspberry Pi経由で赤外線センサーと赤外線LEDがつながっています。Edison 2号機にはUSBカメラがつながっており、Edison 3号機はInternetに接続されています。これら3台のEdisonはad-hocなWi-Fiネットワークで連結されており、そのWi-Fiネットワーク上にConsulクラスタが立ち上がっています。
fogの環境構築
fogの環境構築に関する詳細は、Githubで公開している環境構築手順書(PDF)を参照ください。
Consul
Consulは、Hashicorp社が提供するオーケストレーションツールです。単一障害点がないマルチマスタークラスタを構成することができ、運用自動化に有用なさまざまな機能を提供します。
- ノードやサービスの死活管理
- 障害や環境構成の変化、外部から発火させたイベントなどに応じた処理の自動実行
- 分散KVSや分散DNS
また、これらのEdisonやRaspberry Piでは、赤外線センサーや赤外線LED、USBカメラを制御するためのPythonプログラムが動作しています。プログラムの詳細は、Githubのwasted_energy_of_tv_iotをご確認ください。
cloudを構成するサービスとプログラム
cloudは次のサービスで構成しました。
- MQTT Broker: IBM Internet of Things Foundation
- Key-Value DBサービス: IBM Bluemix MongoLab
- IBM Bluemix Node-RED
MQTT BrokerのマネージドサービスであるInternet of Things Foundationを利用して、fogとcloudを接続しデータを送受信します(MQTTの詳細に関しては、IoT時代を支えるプロトコル「MQTT」などをご参照ください)。
Bluemix上に構築したNode-REDアプリが、MQTT BrokerやKey-Value DBサービスと連携し、fogから得たデータの蓄積や分析を行います。Wasted enegy of TVのBluemix Node-REDアプリをexportしたjsonファイルは、Githubのwasted_energy_of_tv_noderedをご確認ください。
Node-RED
Node-REDは、IBM Emerging Technologyチームが作成しOSS公開しているブラウザ上でビジュアルプログラミングを行うツールです。「ノード」をマウスで接続することで、データが入力されてから出力されるまでの一連の処理フローをGUIでプログラミングできます。
GUIのプログラム
GUIはHTML5と次のJavaScriptライブラリで構成しました。これらのHTMLやJavaScriptは、BluemixにNginxやApacheなどのhttpdを立ててホストすると良いでしょう。
- Bootstrap 3.3
- RequireJS
- jQuery 1.11
- jCanvas
Webブラウザ上で動作するJavaScriptが、cloudのBluemix Node-REDアプリが提供するREST APIにAjaxを用いてアクセスし、Key-Value DBサービスに蓄積されたテレビの視聴状況データをGETして可視化します。また、Node-REDアプリが提供するREST APIに対して、テレビの自動消灯の指示をPOSTすることもできます。
GUIプログラムのソースコードは、Githubのwasted_energy_of_tv_guiで公開しています。詳細はソースコードをご確認ください。
