ごった煮

色々な事を書いてます

Azure IoT HubのREST APIを叩いてみる

例に漏れずIoT HubにもREST APIが提供されているのでこれを使う方法についてです。

 

今回は、指定したIoT Hubに登録されているデバイス一覧を取得してみます。

 

手順

手順としては、

  1. SASトークンの作成
  2. HTTPヘッダのAuthorizationにSASトークンをセット
  3. URLに対してGET

という流れです。

これによってJSONでデバイス一覧が返ってきます。

 

SASトークンを作る

認証用のSASトークンを作るのに必要なものは、

  • IoT Hubの認証キー
  • キーの名前
  • ターゲットとするホスト名
  • 設定するTTL

の4つです。

キーの場所などはここ参照ということで

 

SASトークンの作成

とりあえずc#でコンソールアプリケーションを作りましょう。

わざわざ計算するのも面倒な話なので、ライブラリを使います。

 

NuGetでMicrosoft.Azure.Device で検索すると一番上に出てくるライブラリをインストールします。

 

これをインストールしたら

using Microsoft.Azure.Devices.Common.Security;

をProgram.csに追加します。

SASトークンの作成は、以下のような感じです。

static string CreateToken()
        {
            var sas = new SharedAccessSignatureBuilder()
            {
                Key = "{IoT Hub Key}",
                KeyName = "{IoT Hub KeyName}",
                Target = "{IoT Hub HostName}",
                TimeToLive = TimeSpan.FromDays(Convert.ToDouble("365"))
            }.ToSignature();
            return sas;
        }

TimeToLiveはいったん365日で設定してありますが好きな値に変更しましょう。

 

これでSASトークンが作成できたので、このトークンをメモっておきましょう。

 

データを取得してみる

トークンが作れたので、IoT Hubに対してリクエストを投げてみます。

今回は、Chrome拡張のDHCを使用します。

 

リクエストを投げるURLは、

https://{IoT Hub HostName}/devices?api-version={api version}

となります。

現在のapiのバージョンは、

2015-08-15-preview

になります。

これでリクエストを投げてみると、以下のようにJSONが返ってきます。

[
    {
        "deviceId": "myFirstDevices",
        "generationId": "635800069888725153",
        "etag": "MA==",
        "connectionState": "Disconnected",
        "status": "enabled",
        "statusReason": null,
        "connectionStateUpdatedTime": "2015-10-10T01:17:18.6287321",
        "statusUpdatedTime": "0001-01-01T00:00:00",
        "lastActivityTime": "2015-10-10T01:18:24.0558432",
        "cloudToDeviceMessageCount": 0,
        "authentication": {
            "symmetricKey": {
                "primaryKey": "{PrimaryKey}",
                "secondaryKey": "{SecondaryKey}"
            }
        }
    }
]

 

まとめ

こんな感じで簡単にRESTを叩けるのでアプリケーションに組み込む時も楽になってありがたいですね