Xamarin と AllJoyn の将来を考える

Xamarin Advent Calendar 2014 の 22日目の記事です。

Xamarin Advent Calendar 2014 – Qiita
http://qiita.com/advent-calendar/2014/xamarin

もともとの予定は、Xamarin.iOS/Android に AllJoyn を乗せてみて通信させてみようかな、と思っていたのですが、ちょっと時間が取れなかったので入り口の部分だけ紹介します。私自身 AllJoyn に詳しいわけではないけれど、今後は詳しくありたいな(つーか、やらんとあかんやろう自分)ってことで書き進めます。

そもそも AllJoyn とは何か?

端的に言えば、デバイス同士を相互通信させる規格です。デバイスとは行っても、ゲームデバイスからデスクトップPCや、ルータや家電なども対象になります。ともかく、ネットワークにつながっているものが対象ですね。

Open Source IoT to advance the Internet of Everything – AllSeen Alliance
https://allseenalliance.org/

クアルコムが主導になって、各種ソースはオープンソースで配布されています。実は AllJoyn モジュール自体は Windows 7 の頃から対応になっていて、夏ごろに Microsoft が AllSeen Alliance に加入しています。

MS、IoTを推進するAllSeen Allianceに加入–クアルコムが主導 – CNET Japan
http://japan.cnet.com/news/business/35050321/

メンバーには、Panasonic、Sharp、Sony、他にも Cisco なども入っているので、ネットワーク機器を問わずということがわかります。

ネットワーク機器(電力線通信や赤外線通信、短距離通信も含む)で機器同士がデータのやり取りをするときに何の規格に則ってデータ通信をするか、ってのが問題です。古い?ところでいえば、ルータなどの機器を MIB で動作チェックしたり、簡易的な WEB サーバーを乗せて本体のデバイスを操作したりします。他にもコンソール接続してコマンド送信ってのもあれば、独自のスイッチングってのもあります。これらは、機器のメモリの問題もあり、内部で動くコード(大抵の場合は C、最近は組み込み Linux でスクリプトを動かすってのもある)の制限もあり、ばらばらでも仕方がないところなのですが、今後、LAN だけでなく、WiFi、Bee なども含めると通信形式自体も多様になれば、機器自体も多様になる(携帯ゲーム端末、冷蔵庫、オーディオ機器、インターネット対応テレビなども含めて)わけで、何かが何かを制御するときに、どう対応すればよいか?ってのは大変なのは目に見えてきています。

そこで、それらのプロトコルを XML 形式といくつかのコマンド(GET/SET)に絞って使うように統一してしまおうというのが AllJoyn の目的です。勿論、通信形式だけでなくて、Push/Pull を実現するためにネットワーク的に Hub があったりする訳ですが、そのあたりは多機能化≒肥大化とシンプルさ≒単機能で貧弱、とのせめぎあいです。ある意味で、Raspberry Pi でよく使われる webiopi に似ています。AllJoyn のほうはデータ自体が XML で流れるのでおそらく HTTP プロトコルが使われるのでしょうが、個々の機器に Web api を作ってサービスを定義するよりは、ある程度コマンドが決めてあって内部データの形式(必須データと推奨データなど)が決まっているほうが、今後の拡張がしやすいでしょう(実際、かつての MIB はそんな形で拡張されてきています)。

AllJoyn はオープンソースである

各種の機器に広くインストールされないといけないので、オープンソースになっています。対応する OS も Android, iOS, Windows そして当然 Lunux もあります。そもそも、ソースの管理自体は、前年ごろから Linux foundation に移管されて、オープンソースとしての権利関係の地盤固めをしているようです(おそらく、クアルコムも含めて将来的に特定の企業が権利を主張しないように、という縛りだと思います)。

Download – AllSeen Alliance
https://allseenalliance.org/developers/download

バージョンが ver14 になっていますが、すごく完成されている訳ではなくて、Firefox のようがんがんバージョンを上げているだけでしょう。

image

ソースをダウンロードして展開すると、java や javascript のコードもあります。ちなみに、WinRT からは C モジュールを使うようになるそうです。Core のコードは、OS 自体に組み込まれるそうで、Window 10 からは AllJoyn のモジュールが入ることが決まっています。

ちなみに Xamarin は AllJoyn に対応していないのですが、Android/iOS のモジュールがあるので、それを使えば ok とのことです。

Does AllJoyn work with Xamarin? – Allseen Q&A Forum
https://ask.allseenalliance.org/question/677/does-alljoyn-work-with-xamarin/

AllJoyn で何ができるのか?

具体的に何ができるのか?ってのは、下記の showcase から見ていくとわかりますが、今よく使われているのは、ゲームアプリの相互通信や、スマートフォンからテレビやオーディオ機器を操作するアプリです。

Showcase of Products using AllJoyn – AllSeen Alliance
https://allseenalliance.org/showcase

スマートフォンからテレビを操作する、という方法自体は決して新しいものではありません。赤外線通信をエミュレートしても良いし、適当なリモコンアプリをテレビとスマートフォンの相互に入れれば操作ができるようになるでしょう。ただし、それらのアプリは専用のアプリになります。もちろん、これらの通信をオープンで公開すればいいのでしょうが、それを呼び出すプロトコルはいちいち異なる可能性が高くなります。それは、公開されている WEB サービスのように独自な形式になるでしょう。

そこで、相互に接続する機器を一旦切り離します。テレビ側のアプリは受信アプリとして独立して、スマートフォンのアプリは操作するアプリとして独立させます。その間のプロトコルは、ごく単純な XML 形式で流して、それぞれで解釈をします。実は、この XML 形式なり公開されたプロトコルなりが一般に認知されれば、AllJoyn である必要はありません。と同時に、この通信するプロトコルが AllJoyn が定義するプロトコルというだけです。End-to-End だけ見れば、それぞれに公開された XML 形式のフォーマットは、同時に切り替えが可能というわけで、テレビの受信データ形式が同じであれば、スマートフォンのアプリは何であっても構いません。新しく作ることも可能です。同時に、スマートフォンアプリから送るデータ形式さえあわせておけば、テレビを新調することも可能です。

同じことは、相互通信のゲームアプリにも言えて、基本的なデータ形式だけ同じであれば、別なアプリで拡張することも可能です。ピアツーピアの接続自体は、AllJoyn のネットワークが賄ってくれる(ハズ)なので、そのあたりの手間も省けます…と、どこまでできるか分かりませんが(データ量的に、バイナリ通信を併用しないと無理、っていうパターンもあるでしょうし)、いくつかそういう試みがされています。実際、先のサンプルコードに Unity が入っているので、そのあたりも範疇にはいっています。

で、Xamarin と AllJoyn はどうなのか?

現在のところ、Xamarin.iOS/Android からネイティブの AllJoyn ライブラリを使う方法は用意されていませんが、iOS/Android モジュール自体があるので、そのうち使えるようになるでしょう(どちらが対応するかわかりませんが、オープンソースなのだから自分でバインドしてもよいし)。そこで、使えることを前提にして考えると、Xamarin の使いどころとしては、

  • スマートフォン/タブレットの相互通信に使う
  • スマートフォンから、AllJoyn 対応の機器を操作するために使う

の2種類ですね。スマートフォン同士は、ゲームアプリとかチャットアプリを作って試すことができるでしょう(ハブは必要なのかな?)。Azure の Mobile Service を使う方法もあるけど、まあ、お試しとして。もちろん、普通の PC からも操作できるはずです。

別の機器を操作するものとして、AllJoyn 対応の機器を用意する…ことはできないので(販売されているものはあるのかな?)、Raspberry Pi を使うと良いかも、と思っています。C 言語ベースなので、Arduiono か netduiono で動く感じもするんですが、 Using Arduino+Alljoyn to control blinds – YouTube こんなのもあるし。ひとまず、Raspberry Pi に AllJoyn を入れて meArm を操作させたいところです。手元で作っている meArm ライブラリの .NET 版は、 REST で動かしているのですが、これを AllJoyn に対応させればいいですよね。このあたり、スマートフォン/タブレットと、IoT な機器とをつなげるのに、Xamarin+AllJoyn は結構有力かなと思ってます。

カテゴリー: AllJoyn, Xamarin パーマリンク