いままで知らなかったのですが、AllJoyn という通信フレームワークがあります。IoT の中で中核を成す…というか、どうやってモノ同士で通信させるんだろうか?ってのは、C/S でも問題だし、P2P でも問題になるわけですが。
MS、IoTを推進するAllSeen Allianceに加入–クアルコムが主導 – CNET Japan
http://japan.cnet.com/news/business/35050321/
Open Source IoT to advance the Internet of Everything – AllSeen Alliance
https://allseenalliance.org/
実は AllJoyn というオープンソースな規格があって、Qualcomm が推進していることを先日のグロサミで知りました。PC から Raspberry Pi への通信とか、Raspberry Pi から BrickPi を通じて Logo のモータを動かしている訳ですが、自前の BrickPiNet では、REST で通信するようにしています。Raspberry pi の場合は、Linux が動いているので REST を Apache 上に作るか、HttpListener で作ってしまいます。動的にアセンブリをロードするわけではないので、HttpListener のほうでも楽に作れます。モーターを動かすとかセンサーを起動させるとか、そういう REST を送る訳ですが、このぐらいのものであれば、何か規格があっても不思議ではないよな…とは思っていたのですが。
それが、AllJoyn という規格です。規格自体は 2008年頃?で、SDK 自体は 2011年ぐらいです。現在は ver.14 で https://allseenalliance.org/source-code にアクセスすると各種環境の SDK がダウンロードできます。Qualcommが発起人で、現在は Linux 財団がオープンソースとして管理、ってな感じなんですかね。
何ができるのか?
各種 OS 間でデータ通信を行います。データ通信自体ならば TCP/IP をそのまま使ったり(特には IP だけ使ったり)、最近の機器では組み込み系の Linux が入っているから Apache を入れて応答を返すってのが普通に行われますが、Android や Phone やら、TV やオーディオ、冷蔵庫などまで範囲を広げます。相互に通信をできるようにする訳ですから、なんらかの規格を決めないといけません。
- データ自体は、XML で送受信
- データ内容は Get/Set などシンプルなメソッドを使う
途中に AllJoyn のルータなどが挟まるのでネットワーク的には複雑なのですが、EndToEnd 視点ならば非常に単純です。Pull と Push の両方の機能を備えるので、端末機器からの Event 通知を受けることができます。このあたり、SNMP の MIB に近いのかなと思ったりするのですが、どうでしょう? MIB 自体はバイナリと IP を扱わなくて結構大変なのですが、現在の端末機器の CPU とメモリを考えれば XML データを流してエンコード/デコードしてもパワー的に十分ですよね。
https://allseenalliance.org/developer-resources/alljoyn-open-source-project にあるメニューリストを見ると、Unity や Windows 7 が入っています。ゲームの双方向通信にも使われているらしく、Unity + AllJoyn で作っておけば、WiFi/Bluetooth 環境にあるゲーム機器が、機種に関係なく相互通信ができるのでは?と思ったりするのですがどうなんでしょう。
また、先に書いた通り、シンプルな XML をデコードする機能さえあればいいので、.Net Micro Framework のような非力な機器でも使えそうです。データの内容を見ると SOAP のように名前空間を使っていません。
プログラム言語は、Java, Objective-C, C++, C#, C で扱えます。https://allseenalliance.org/alljoyn-framework-tutorial C# で扱えるんだから、F# とか VB でも扱えるでしょう。
具体的にどうやるのかは、これからチュートリアルなどを読んでいくわけですが、クラス名もこんな感じでそう多くありません。
BusLitener と SessionListener が肝な感じがします。
ひとまず、自分用のメモまで。