Azure IoT

**Azure IoT**（アジュール・アイオーティー）とは、Microsoft Azureに新しく追加されたIoT向けのクラウド機能の総称である。これまでのWebブラウザやモバイルデバイスに対するクラウドサービスとは異なり、いわゆるM2Mのソリューションとして利用可能である。マイクロソフトではAzure IoTをWindows 10 IoTに対抗するものとして位置づけている。

## Azure IoT Hub

IoTデバイスとの接続に適したエンドポイント機能をAzureサービスとして実装した物で、Azure IoTの中心となる。

通常のAzureサービスで利用されるWebAppによるエンドポイントとは異なり、AMQPやMQTTなどのIoT向けプロトコルもサポートしている。
またスケーラビリティに留意し、10万デバイスまでの接続を想定している。(1台1台に異なるアクセスキーが設定される)

Azureに以前より提供されているEvent HUBの拡張とも考えられる。Event Hub互換のインターフェースもサポートしている

2015年 10月のプレビューリリースにより一般利用可能となった。

### Azure IoT SDK

Azure IoT Hub に接続するためのデバイス側およびクラウド側プログラムを開発するために使用するSDKで、GitHubに公開されている。

* サポート言語: C (C++) / C# / Java / JavaScript (node.js)
* サポートOS:　Desktop Windows / Windows 10 IoT Core (UWP) / Linux (Ubuntu / Rasbian / Intel Edison 等) / ARM mbed (Freescale K64F 等)

C#を利用する場合は、NuGet経由で必要アセンブリを単体で入手することができる。そのためAzure IoT SDK が無くてもプログラムからの利用が可能になっている。

この場合Visual Studio 2015 を利用することが想定されているが、Linux向け/mbed向け/Javaコードなどはこの限りではない。

* SDKリリース一覧 (DeviceExploreインストーラも入手可能)
* 開発環境のセットアップ
* サポートOSとテスト済みデバイス

### Device Explorer

Azure IoT HuBに使用デバイスを登録したり、接続時に使用するアクセスキーを入手または登録する際に利用することができるツール。
モニタ機能を使用して、特定のデバイスにコマンドを送出したり、デバイスから送られてきたデータを表示することもできる。
Azure IoT SDKにてソースコード公開されているが、Windows PCにすぐにインストール可能な.msi形式でも入手可能となっている。

* 使用方法
* ソースコード

### Client API　と Service API

Azure IoT Hub を利用する主体は、
* IoT デバイス(デバイス側)
* マネージメントUI(主にクラウド側)
の2通りが想定される。

これをサポートする2系統のAPI(またはC#アセンブリ)が 用意され、Azure IoT SDK内にClient用 および Service用としてサンプルコードがコード公開されている。

* Microsoft.Azure.Devices Namespace (C#アセンブリ)
* IoT HUB REST API 

### メッセージ形式

Azure IoT HUBでは、テキスト形式/バイナリ形式の任意のメッセージ形式が利用できる。(設定等は存在しない)

メッセージの解釈は、IoT Hubを利用するデバイス側とサービス側の対応がとれていればよい。
たとえば、IoT HuBの後段でStream Analyticsを利用したJSONメッセージ処理を接続する場合には、デバイスはJSON形式のテキストでメッセージ送出するよう実装する。

### セキュリティ

#### アクセス制御

あらかじめ定義されたアクセス制御ポリシーとして、
* RegistryRead
* RegistryReadWrite
* ServiceConnect
* DeviceConnext
の4つが定義されている。エンドポイントに対するアクセスはデバイスIDとアクセスキーにより制御されるが、ポリシーごとに異なるキーを利用するようになっている。

#### 伝送路の暗号化

標準で使用される HTTPSおよび AMQPでは本文メッセージに暗号化が施される。
オプションで使用可能な MQTTの場合プロトコルレベルでの暗号化は行われないので、外部のゲートウエイ機器を利用してMQTTメッセージをほかのプロトコルに変換する方法が提案されている。

* IoT Hub に対するその他のプロトコルのサポート

### 課金

2015年12月現在、IoT Hub はユニットごとに1日の処理メッセージ量の上限のみが制限された形で使用可能になっている。

S1およびS2プランでは4KBを超えるメッセージは4KBに分割した場合のメッセージ数としてカウントされる(実際の1メッセージの最大サイズは256KB)

IoT HUBにつながるIoTデバイスが頻度高くメッセージを出す場合、メッセージ数上限の関係で1ユニットでサポート可能デバイス数が少なくなることになる。
各デバイスが4KB以内のメッセージを1分間に一つのみ送出する場合、低頻度プランでは277台、高頻度プランでは 4166台のサポートが可能なことになる。(実際には余裕が必要)

「10万台のデバイスが接続可能」という記述は、500台のデバイスを1ユニットに接続し、このようなユニットを200ユニット契約することで実現可能となる。

## Azure IoT Suite

Azure IoT hub をはじめとする複数のAzureサービスを組み合わせ、IoTシステムを構成するデモシステムである。2015年12月現在以下の2つのデモが提供されている。
それぞれGitHub にてクラウド側プロジェクトのコードが公開されている

* Azure IoT Suite の概要

### Remote monitoring (リモート監視)

外気温/内部温度/湿度 をクラウドにあげてモニターするサンプル
湿度の平均値に対して任意のしきい値を設定しアラームを上げることができる。

* リモート監視の事前構成済みソリューションのチュートリアル
* azure-iot-remote-monitoring (GitHub)

### Predictive Maintenance (予兆保全)

航空機エンジンの4つのセンサーデータ入力を元に Azure ML (Machine Learning) を利用して特性値(RUL = Remaining Useful Life)を算出してUI表示することができる。

* Predictive maintenance preconfigured solution overview (英語)
* Predictive maintenance preconfigured solution walkthrough (英語)
* azure-iot-predictive-maintenance (GitHub)

## 競合サービス
IoT関連サービスやプラットフォームは多数の大手ITベンダーや電機メーカーから提供されており、激しい競争の時期を迎えている。主な競合サービスにはパブリッククラウド最大手の米Amazon Web Servicesから「AWS IoT」、ERPソフトウェア最大手の独SAPの「SAP Leonardo」、電機メーカー最大手の米ゼネラル・エレクトリックの「Predix」などがある。

## 脚注


## 外部リンク
* 
* Azure IoT Hub とは
* Azure IoT Hub 開発者ガイド