IoT Gatewayに関するいくつかの考察

## IoT Gatewayの要件

　IoT Gatewayとはここでは以下のような定義をして、いくつか市場にあるプロダクトを考察したいと思います。

* IoTの3階層アーキテクチャの中でIoT Deviceを集約し、EdgeのGatewayとしてDatacenterと通信を行うハードウェアやソフトウェアのこと。
* IoTの3階層アーキテクチャとは、IoT Device (Edge Device)、Iot Gateway (Edge Gateway / Smart Gateway)、IoT Service (Datacenter / Backend Service)のこと。

* 主な要件
 * リモートからIoT Gatewayにアクセスできる
 * アプリの更新、ファームウェアの更新、監視や診断ができる
 * センサーやマイコンなどEdge DeviceをGPIOや様々な無線規格で接続してインターネットにつなげることができる

## Eclipse Kura

　[OSGi](https://www.osgi.org/)という歴史のあるコンテナをベースにしたJavaのソフトウェアです。いまさらOSGi?という感じはしますが、[Eclipse IoT](https://www.osgi.org/)でも中核を担い、現時点では本命だと思います。[Eurotech](http://www.eurotech.com/)や[Red Hat](https://www.redhat.com)が中心になり開発を進めています。最近では[Apache Camel](http://camel.apache.org/)の統合や、Backendの[Eclipse Kapua](https://eclipse.org/kapua/)との連携など非常に開発が活発になっています。

## DeviceHive

　[DeviceHive](http://devicehive.com/)は[DataArt](http://www.dataart.com/)が[OSS](https://github.com/devicehive/)で開発をしているソフトウェアです。[AllJoyn](https://allseenalliance.org/)に準拠しD-BusにBackendのサービスを接続できる興味深いアーキテクチャだったのですが、いろいろあったみたいでAllJoynの開発は止まっています。現在ではIoT GatewayはシンプルなPythonやJavaのクライアントになっています。

## Resin.io

　[Resin.io](https://resin.io/)は、[Etcher](https://etcher.io/)というSDカードやUSBメモリにイメージを焼くツールの開発元としても有名です。次にご紹介する[AGILE IoT](http://agile-iot.eu/)にも参加していますが、Raspberry Pi 2などARMv7で動作するDockerイメージを開発しています。[How it works](https://resin.io/how-it-works/)がわかりやすいですが、Dockerをインストールしたカスタムの[Yocto](https://www.yoctoproject.org/)ベースのOSをクラウド上でビルドして手元のSDカードに焼くことができます。アプリのインストールはDockerを使うので、[Ubuntu Core](https://www.ubuntu.com/core)の[snaps](http://snapcraft.io/)に近い感じです。

## AGILE IoT

　[AGILE IoT](http://agile-iot.eu/)はユーロの[Horizon2020](https://ec.europa.eu/programmes/horizon2020/)プログラムに参加しています。開発が始まったばかりですがロードマップが提示され2018年末頃にはBackendの実装も予定されています。KuraのOSGiと違い言語非依存で、 D-BusとDocker/Snappyをプラガマブルなアーキテクチャが特徴です。[Eclipse IoT](https://www.osgi.org/)にも[Eclipse Agilis IoT Gateway](https://projects.eclipse.org/proposals/eclipse-agilis-iot-gateway)としてproposalを提出しています。

## IoTivity
　[Thread Group](https://www.threadgroup.org/)と[提携](https://www.infoq.com/jp/news/2016/08/ocf-thread)、[AllSeen](https://allseenalliance.org/)を[統合](http://monoist.atmarkit.co.jp/mn/articles/1610/24/news022.html)した[OCF](https://openconnectivity.org/)が前身のOICから継続して[IoTivity](https://www.iotivity.org/)を採用しています。IoT規格がOCFに統一された形となり、おそらくIoT標準になるのだと思いますが、仕様が大きすぎて追いつけません。

## Linaro LITE
　Linaro IoT and Embedded ([LITE](https://www.linaro.org/groups/lite/)) Segment Groupです。ARM陣営の[Linaro](http://www.linaro.org/)がIoTの3階層アーキテクチャのリファレンスを2016年12月を目標に策定しようとしています。Edge Deviceは[Zephyr](https://www.zephyrproject.org/)、IoT GatewayはUbuntu Core、BackendはRHELベース[らしい](https://dzone.com/articles/can-lite-bring-arms-magic-to-iot)です。

## Ubuntu Core

　[snaps](http://snapcraft.io/)は新しいパッケージフォーマットとしてUbuntu Coreの他にArch Linux やDebianなどでも利用できます。Dockerコンテナのようにアプリを配布できます。[Dell Edge Gateway 5000](http://www.dell.com/us/business/p/dell-edge-gateway-5000/pd)、[DeviceHive](http://devicehive.com/)、[IoTivity](https://www.iotivity.org)、[Kaa](https://www.kaaproject.org/)、[LITE](https://www.linaro.org/groups/lite/)、[AGILE IoT](http://agile-iot.eu/)などのIoT Gatewayで採用しています。だだしUbuntu 16.04ではsnappyコマンドではsnapパッケージをビルドできなくなり、[snapcraft](http://snapcraft.io/)のsnapコマンドを使います。そのためまだ古いコマンドを使っているIoT Gatewayのソフトウェアは対応OSのバージョンの確認が必要になります。