Soracom

Users

ドキュメント
Home ドキュメント SORACOM Krypton Getting Started

Azure IoT Hub Device Provisioning Service を利用してデバイスを登録する

Azure IoT Hub Device Provisioning Service を利用して、デバイスを自動的にプロビジョニングし、証明書を発行してデバイス登録できます。

ステップ 1~4 は、デバイスに関わらず 1 回だけ行う設定です。この設定が完了したら、IoT SIM および Krypton を利用するデバイスごとに、ステップ 5: IoT SIM が所属するグループを切り替える 以降を実行するだけで、Azure IoT Hub Device Provisioning Service でプロビジョニングができます。プロビジョニングしたデバイスは、MQTTS で Azure IoT Hub とデータを送受信できます。

操作を始める前に準備が必要です (クリックして確認してください)

(1) IoT SIM およびデバイスを購入する

MQTT を使用できるデバイスと、そのデバイスで利用できる IoT SIM を用意します。

例:

IoT SIM およびデバイスの購入方法について詳しくは、STEP 2-1: IoT SIM およびデバイスを購入する を参照してください。

(2) Microsoft Azure アカウントを用意する

Microsoft Azure Portal にアクセスして、Microsoft Azure アカウントを作成します。

準備完了

ステップ 1: IoT Hub と Azure IoT Hub Device Provisioning Service を作成する

Microsoft Azure Portal に必要なリソースを準備します。詳しくは、クイック スタート:Azure Portal で IoT Hub Device Provisioning Service を設定する を参照してください。

  1. リソースグループを作成し、IoT Hub (IoT ハブ) を作成します。

    詳しくは、IoT Hub の作成 を参照してください。

    リソースグループの名前と IoT Hub の名前をメモしてください

    作成したリソースグループの名前と、IoT Hub の名前は、MQTT を使用して IoT Hub にデータを送信する 操作で必要です。

    • リソースグループの名前は、これ以降、${resource_group_name} と表記します。例: resource-group
    • IoT Hub の名前は、これ以降、${iot_hub_name} と表記します。例: iot-hub
  2. 手順 1 で作成したリソースグループに、Azure IoT Hub Device Provisioning Service (IoT Hub デバイスプロビジョニングサービス) を作成します。

    詳しくは、新しい IoT Hub Device Provisioning Service インスタンスを作成する を参照してください。

  3. 手順 2 で作成した Azure IoT Hub Device Provisioning Service の設定画面を表示して、手順 1 で作成した IoT Hub をリンクします。

    詳しくは、IoT ハブと Device Provisioning Service インスタンスとをリンクする を参照してください。

X.509 CA 証明書を準備する

公的なルート証明機関から、X.509 CA 証明書を購入してください。 X.509 CA 証明書を公的なルート証明機関から購入した場合は、その指示に従って設定してください。

なお、動作確認用に限り、独自の X.509 CA 証明書を利用できます。独自の X.509 CA 証明書を発行する手順については、Microsoft の チュートリアル: OpenSSL を使用してテスト証明書を作成する を参照してください。このページで紹介されている Bash スクリプトで作成したテスト証明書は、固定のパスワード ("1234") が設定されており、30 日後に期限が切れます。

独自の X.509 CA 証明書は動作確認用にのみ利用してください

動作確認後、本番環境で利用する場合は、速やかに公的なルート証明機関から X.509 CA 証明書を購入してください。 詳しくは、公的なルート証明機関にお問い合わせください。

  • Microsoft のチュートリアルのとおりに作成した 中間 CA 証明書の秘密鍵は Krypton では使用できません。Microsoft が提供する Bash スクリプトを利用した場合は、手順内で作成された ./private/azure-iot-test-only.intermediate.key.pem からパスワードを削除してください。

    1. 以下のコマンドを実行します。

      $ openssl rsa -in ./private/azure-iot-test-only.intermediate.key.pem \
      -out ./private/azure-iot-test-only.intermediate.nopass.key.pem
      

      以下のように表示されます。

      Enter pass phrase for ./private/azure-iot-test-only.intermediate.key.pem:
      
    2. 「1234」を入力して、Enter キーを押します。

      writing RSA key
      

      ./private/azure-iot-test-only.intermediate.nopass.key.pem が保存されます。

  • チュートリアルの手順とは異なり、IoT Hub にはアップロードしません。

証明書説明
ルート CA 証明書

デバイス証明書に署名するルート認証局の X.509 CA 証明書です。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.root.ca.cert.pem です。

  • このあとの手順で、Azure IoT Hub Device Provisioning Service (*1) および SORACOM ユーザーコンソールの認証情報ストア (*2) にアップロードします。
中間 CA 証明書

デバイス証明書に署名する中間認証局の X.509 CA 証明書です。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.intermediate.cert.pem です。

  • このあとの手順で、Azure IoT Hub Device Provisioning Service の登録グループ (*3) および SORACOM ユーザーコンソールの認証情報ストア (*2) にアップロードします。
中間 CA 証明書の秘密鍵

デバイス証明書に署名する中間認証局の X.509 CA 証明書の秘密鍵です。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、パスワードを削除した ./private/azure-iot-test-only.intermediate.nopass.key.pem です。

  • このあとの手順で、SORACOM ユーザーコンソールの認証情報ストア (*2) にアップロードします。

ステップ 2: Azure IoT Hub Device Provisioning Service を設定する

Azure IoT Hub Device Provisioning Service を設定し、Krypton を利用するために必要な情報を集めます。

Azure IoT Hub Device Provisioning Service にルート CA 証明書を登録する

  1. Microsoft Azure Portal にアクセスし、[Azure IoT Hub Device Provisioning Service] → ステップ 1 で作成した Azure IoT Hub Device Provisioning Service をクリックします。

  2. [設定][証明書][+ 追加] の順にクリックします。

  3. 以下の項目を設定します。

    項目説明
    [証明書名]ルート CA 証明書を識別するために任意の文字列を入力します。例: Azure-IoT-Hub-CA-Cert-Test-Only-Root
    [.pem または .cer の証明書ファイルです。]ルート CA 証明書を選択します。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.root.ca.cert.pem です。
    [アップロード時に証明書の状態を確認済みに設定する]チェックを入れます。
  4. [保存] をクリックします。

Azure IoT Hub Device Provisioning Service に登録グループを追加する

登録グループを追加して、中間 CA 証明書を登録します。Azure IoT Hub Device Provisioning Service を利用して複数のデバイスを登録するときに、「登録グループに登録した中間 CA 証明書」で署名したデバイス証明書が発行されます。

  1. Microsoft Azure Portal にアクセスし、[Azure IoT Hub Device Provisioning Service] → ステップ 1 で作成した Azure IoT Hub Device Provisioning Service をクリックします。

  2. [設定][登録を管理します][+ 登録グループの追加] の順にクリックします。

  3. 以下の項目を設定します。

    項目設定
    [グループ名]登録グループを識別するために任意の名前を入力します。例: enrollment-group
    [構成証明の種類]「証明書」を選択します。
    [IoT Edge デバイス]「False」を選択します。ただし、登録するデバイスが Azure IoT Edge 対応デバイスであることを IoT Hub に通知する場合は、「True」を選択します。
    [証明書の種類]「中間証明書」を選択します。
    [プライマリ証明書の .pem ファイルまたは .cer ファイル]中間 CA 証明書を選択します。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.intermediate.cert.pem です。
  4. [保存] をクリックします。

Azure IoT Hub Device Provisioning Service の共有アクセスポリシーを追加する

デバイスをプロビジョニングする際、Krypton はここで作成する共有アクセスポリシーを使用してデバイスを登録します。このポリシーの情報は、この後の手順で Azure IoT 認証情報として SORACOM ユーザーコンソールの認証情報ストアに登録します。

  1. Microsoft Azure Portal にアクセスし、[Azure IoT Hub Device Provisioning Service] → ステップ 1 で作成した Azure IoT Hub Device Provisioning Service をクリックします。

  2. [設定][共有アクセスポリシー][+追加] の順にクリックします。

  3. 以下の項目を設定します。

    項目説明
    [名前]共有アクセスポリシーを識別するために任意の名前を入力します。ここに指定した共有アクセスポリシー名は、これ以降、${shared_access_policy_name} と表記します。例: shared-access-policy
    [アクセス許可][登録の書き込み] にチェックを入れます。チェックを入れると、[登録の読み取り][登録状態の読み取り][登録状態の書き込み] にもチェックが入ります。
  4. [保存] をクリックします。

    共有アクセスポリシーが作成されます。

  5. 作成された共有アクセスポリシーをクリックします。

  6. [主キー][クリップボードにコピー] をクリックして、主キーをコピーします。

    主キーは、これ以降、${primary_key} と表記します。

Krypton を利用してデータを送受信するためのそのほかの情報を確認する

Krypton を利用するには、Azure IoT Hub Device Provisioning Service の以下の情報も必要です。

  • グローバルデバイスエンドポイント
  • ID スコープ
  1. Microsoft Azure Portal にアクセスし、[Azure IoT Hub Device Provisioning Service] → ステップ 1 で作成した Azure IoT Hub Device Provisioning Service をクリックします。

  2. [概要] をクリックして、以下の項目をコピーします。

    項目説明
    [グローバルデバイスエンドポイント]グローバルデバイスエンドポイントは、これ以降、${global_device_endpoint} と表記します。例: global.azure-devices-provisioning.net
    [ID スコープ]ID スコープは、これ以降、${id_scope} と表記します。例: 0ne0xxxxxxx

ステップ 3: SORACOM ユーザーコンソールの認証情報ストアに登録する

ステップ 1 で作成した X.509 証明書を登録する

ステップ 1 で作成したルート CA 証明書、中間 CA 証明書、中間 CA 証明書の秘密鍵を SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。

認証情報は、以下のように登録します。

情報説明
[認証情報 ID]任意の文字列を入力します。例: Azure-IoT-Hub-CA-Cert-Test-Only
[種別]「X.509 証明書」を選択します。
[秘密鍵 (key)]中間 CA 証明書の秘密鍵の内容を貼り付けます (*1)。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./private/azure-iot-test-only.intermediate.nopass.key.pem の内容です。
[証明書 (cert)]中間 CA 証明書の内容を貼り付けます (*1)。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.intermediate.cert.pem の内容です。
[CA 証明局]ルート CA 証明書の内容を貼り付けます (*1)。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.root.ca.cert.pem の内容です。
  • (*1) ファイル名ではなくファイルの内容を貼り付けてください。

ステップ 2 で確認した Azure IoT 認証情報を登録する

ステップ 2 で確認した情報を SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。

認証情報は、以下のように登録します。

情報説明
[認証情報 ID]任意の文字列を入力します。例: Azure-IoT-credentials
[種別]「Azure IoT 認証情報」を選択します。
[ACCESS POLICY NAME]${shared_access_policy_name} を入力します。例: shared-access-policy
[SHARED ACCESS KEY]${primary_key} を入力します。例: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=

ステップ 4: IoT SIM に対して Krypton を有効化して Azure IoT Hub Device Provisioning Service の設定を紐づける

IoT SIM が Krypton を使って IoT Hub に接続するためのプロビジョニングを行うように設定します。

Krypton の設定はグループに対して行います

ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作ついて詳しくは、グループ設定 を参照してください。

  1. SIM グループ画面で [SORACOM Krypton 設定] をクリックします。

    SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。

  2. スイッチをクリックして「on」にします。

  3. [+ 設定を追加する][Azure IoT Hub] の順にクリックします。

  4. 各項目を設定します。

    項目説明
    [グローバルデバイスエンドポイント]${global_device_endpoint} に https:// を足して入力します。例: https://global.azure-devices-provisioning.net
    [X.509 証明書]SORACOM 認証情報ストアに登録した X.509 証明書を選択します。例: Azure-IoT-Hub-CA-Cert-Test-Only
    [AZURE IOT 認証情報]SORACOM 認証情報ストアに登録した Azure IoT 認証情報を選択します。例: Azure-IoT-credentials
    [デバイス名]デフォルトのデバイス名 (Krypton クライアントが指定していない場合に使用するデバイス名) を入力します。デバイス名には #{imsi} という文字列を含めてください。#{imsi} はデバイスの IoT SIM の IMSI に置換されます。例: myDevice-#{imsi}
    [ID スコープ]${id_scope} を入力します。例: 0ne0xxxxxxx
  5. [保存][保存] の順にクリックします。

SORACOM CLI / SORACOM API の場合

SORACOM CLI または SORACOM API を利用しても、IoT SIM に対して Krypton を有効化して Azure IoT Hub Device Provisioning Service の設定を紐づけることができます。

  • SORACOM CLI を利用するには、あらかじめ SORACOM CLI をインストールし、認証情報を保存してください。詳しくは、SORACOM CLI をインストールする を参照してください。
  • ${group_id} は、soracom groups list (Group:listGroups API) で取得できます。
  • ${namespace} は、SoracomKrypton です。
  • ボディで指定するプロパティについては、ボディで指定するプロパティについて を参照してください。
  • ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作ついて詳しくは、グループ設定 を参照してください。

soracom groups put-config (Group:putConfigurationParameters API) を使用します。

$ soracom groups put-config --group-id ${group_id} --namespace SoracomKrypton \
--body '[
  {
    "key": "enabled",
    "value": true
  },
  {
    "key": "AzureIot",
    "value": {
      "deviceNamePattern": "myDevice-#{imsi}",
      "globalEndpoint": "https://global.azure-devices-provisioning.net",
      "x509CredentialId": "Azure-IoT-Hub-CA-Cert-Test-Only",
      "idScope": "0ne0xxxxxxx",
      "azureIotCredentialId": "Azure-IoT-credentials"
    }
  }
]'
  • SORACOM API を利用するには、API キーと API トークンが必要です。詳しくは、API キーと API トークン を参照してください。
  • ${group_id} は、Group:listGroups API で取得できます。
  • ${namespace} は、SoracomAir です。
  • ボディで指定するプロパティについては、ボディで指定するプロパティについて を参照してください。
  • ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作ついて詳しくは、グループ設定 を参照してください。

Group:putConfigurationParameters API を使用します。

$ curl -v -X PUT https://api.soracom.io/v1/groups/${group_id}/configuration/SoracomKrypton \
-H "X-Soracom-API-Key: $X_SORACOM_API_KEY" \
-H "X-Soracom-Token: $X_SORACOM_TOKEN" \
-H "Content-Type: application/json" \
-d '[
  {
    "key": "enabled",
    "value": true
  },
  {
    "key": "AzureIot",
    "value": {
      "deviceNamePattern": "myDevice-#{imsi}",
      "globalEndpoint": "https://global.azure-devices-provisioning.net",
      "x509CredentialId": "Azure-IoT-Hub-CA-Cert-Test-Only",
      "idScope": "0ne0xxxxxxx",
      "azureIotCredentialId": "Azure-IoT-credentials"
    }
  }
]'

ボディで指定するプロパティについて

以下の keyvalue のペアを配列で指定します。

keyvalue の型value
enabledBoolean

Krypton の ON/OFF を設定します。

  • true: ON。Krypton を利用できます。
  • false: OFF
AzureIotObject

以下のプロパティを含む JSON オブジェクトを設定します。

プロパティ説明
deviceNamePatternStringデフォルトのデバイス名 (Krypton クライアントが指定していない場合に使用するデバイス名) を入力します。デバイス名には #{imsi} という文字列を含めてください。#{imsi} はデバイスの IoT SIM の IMSI に置換されます。例: myDevice-#{imsi}
globalEndpointString${global_device_endpoint} に https:// を足して入力します。例: https://global.azure-devices-provisioning.net
x509CredentialIdStringSORACOM 認証情報ストアに登録した X.509 証明書の認証情報 ID を入力します。例: Azure-IoT-Hub-CA-Cert-Test-Only
idScopeString${id_scope} を入力します。例: 0ne0xxxxxxx
azureIotCredentialIdStringSORACOM 認証情報ストアに登録した Azure IoT 認証情報の認証情報 ID を入力します。例: Azure-IoT-credentials

想定していない値を指定した場合の動作は、定義されていません。SORACOM CLI / SORACOM API で設定を変更したあとで、SORACOM ユーザーコンソールで意図通りに設定されていることを確認してください。

ステップ 5: IoT SIM が所属するグループを切り替える

IoT SIM を、ステップ 4: IoT SIM に対して Krypton を有効化して Azure IoT Hub Device Provisioning Service の設定を紐づける で設定したグループに所属させます。詳しくは、IoT SIM、LoRaWAN デバイス、Sigfox デバイスが所属するグループを切り替える を参照してください。

ステップ 6: Krypton を使用して IoT Hub にデバイスを登録して接続する

ここまでで、IoT SIM および Krypton を使用してデバイスをプロビジョニングする準備ができました。次に、デバイスをプロビジョニングします。

Krypton の認証方法によってセットアップ手順が異なります。

SORACOM Air のセルラー回線を使用した認証

このドキュメントでは、以下の OS およびソフトウェアを利用する手順を紹介しています。その他のデバイスやソフトウェアを利用する場合は、適宜読み替えてください。

  • OS: Raspberry Pi などの Linux ベースの OS
  • プログラム: curl, jq

SORACOM Air のセルラー回線を使用した認証では、IoT SIM を利用するデバイスから SORACOM Krypton の API を用います。用いる API は以下の 2 つです。

IoT SIM を利用するデバイスへは、シリアルから、ローカルネットワークから、または SORACOM Napter を利用してログインしてください。

  1. registerAzureIotDevice API で Azure IoT Hub デバイスを登録します。

    $ OPERATION_ID=$(curl -v -X POST https://krypton.soracom.io:8036/v1/provisioning/azure/iot/register \
      -H "Content-Type: application/json" \
      | jq -r .operationId \
    )
    $ echo $OPERATION_ID
    
    x.xxxxxxxxxxxxxx.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

    ここで取得できた {OPERATION_ID} をもとに Azure IoT Hub デバイス用の認証情報の取得します。

  2. getAzureIotDeviceRegistrationStatus API で 登録した Azure IoT Hub デバイス用の認証情報を取得します。

    $ JSON_RESPONSE=$(curl -v https://krypton.soracom.io:8036/v1/provisioning/azure/iot/registrations/${OPERATION_ID})
    $ echo $JSON_RESPONSE
    
    {
      "rootCaCertificate": "-----BEGIN CERTIFICATE-----\nMIIDj...qYzmp\n-----END CERTIFICATE-----\n",
      "certificate": "-----BEGIN CERTIFICATE-----\nMIIC4...sBHoE\n-----END CERTIFICATE-----\n",
      "privateKey": "-----BEGIN PRIVATE KEY-----\nMIIEv...BPw==\n-----END PRIVATE KEY-----\n",
      "deviceId": "myDevice-29505xxxxxxxxxx",
      "operationId": "5.4e0fe...20175",
      "status": "assigned",
      "host": "iot-hub.azure-devices.net"
    }
    

    getAzureIotDeviceRegistrationStatus のレスポンス中の status パラメータによって、次のステップが異なります。assigned 以外の値が返却された場合は、認証情報を取得できません。

    パラメータの値次のステップ
    assignedデバイスの登録が成功しています。他のレスポンスパラメータ中の認証情報を用いて Azure IoT Hub へ接続できます。
    assigningデバイスの登録中です。一定間隔を空けて再度 getAzureIotDeviceRegistrationStatus API を呼び出してください。
    その他デバイスの登録に失敗しています。再度 registerAzureIotDevice API を呼び出してください。それでも失敗する場合は SORACOM や Azure の設定を見直してください。

    同じ OPERATION_ID を用いて認証情報を取得できるのは一回だけです。再度認証情報を取得するには、registerAzureIotDevice APIから開始してください。

  3. getAzureIotDeviceRegistrationStatus API のレスポンスの値をファイルや変数に保存します。

    説明
    rootCaCertificate値 (-----BEGIN CERTIFICATE-----\nMIIDj...qYzmp\n-----END CERTIFICATE-----\n) を rootCaCertificate.pem というファイル名で保存します。(*1)
    certificate値 (-----BEGIN CERTIFICATE-----\nMIIC4...sBHoE\n-----END CERTIFICATE-----\n) を certificate.pem というファイル名で保存します。(*1)
    privateKey値 (-----BEGIN PRIVATE KEY-----\nMIIEv...BPw==\n-----END PRIVATE KEY-----\n) を privatekey.pem というファイル名で保存します。(*1)
    deviceIdデバイス名です。これ以降、${device_id} と表記します。例: myDevice-29505xxxxxxxxxx
    hostホスト名です。これ以降、${iot_hub_hostname} と表記します。例: iot-hub.azure-devices.net
    • (*1) \n を改行コードに変換して保存します。

    デバイスに jq コマンドがインストールされている場合は、以下のコマンドでファイルや変数に保存できます。

    $ echo $JSON_RESPONSE | jq -r ".rootCaCertificate" | sed -e 's/\\n/\n/g' > rootCaCertificate.pem
    $ echo $JSON_RESPONSE | jq -r ".certificate" | sed -e 's/\\n/\n/g' > certificate.pem
    $ echo $JSON_RESPONSE | jq -r ".privateKey" | sed -e 's/\\n/\n/g' > privatekey.pem
    $ device_id=$(echo $JSON_RESPONSE | jq -r ".deviceId")
    $ iot_hub_hostname=$(echo $JSON_RESPONSE | jq -r ".host")
    

SORACOM Endorse による SIM 認証

SORACOM Endorse による SIM 認証を用いる場合は、以下の条件を確認してください。

  • Endorse による SIM 認証に対応するサブスクリプションの IoT SIM を利用すること

    詳しくは、サブスクリプションの種類 を参照してください。

  • 接触型 IC カードリーダーまたは USB ドングルを利用すること

    以下のデバイスが使用できることを確認しています。

    • Soracom Onyx - LTE™ USB ドングル (SC-QGLC4-C1)
    • MS2131i-8 (Huawei USB ドングル)
    • Gemalto カードリーダー USB-TR HWP119316 (カードリーダー)

IoT SIM を利用するデバイスへは、シリアルから、ローカルネットワークから、または SORACOM Napter を利用してログインしてください。

  1. 以下のいずれかをダウンロードします。

    • Java 版の CLI ツールの場合は、soracom-krypton-client-for-java を利用してください。あらかじめお使いの環境にあった Java のランタイム環境をインストールしてください。
    • Go 言語版の CLI ツールの場合は、krypton-client-go で、お使いの環境にあったバイナリファイルをダウンロードしてください。

    以降は krypton-client-go を利用した場合の例です。

  2. registerAzureIotDevice オペレーションで Azure IoT Hub デバイスを登録します。

    $ OPERATION_ID=$(krypton-cli -operation registerAzureIotDevice \
     | jq -r .operationId \
     )
    $ echo $OPERATION_ID
    
    x.xxxxxxxxxxxxxx.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

    ここで取得できた {OPERATION_ID} をもとに Azure IoT Hub デバイス用の認証情報の取得します。

  3. getAzureIotDeviceRegistrationStatus オペレーションで登録した Azure IoT Hub デバイス用の認証情報を取得します。

    $ JSON_RESPONSE=$(krypton-cli -operation getAzureIotDeviceRegistrationStatus -params "{\"operationId\":\"${OPERATION_ID}\"}")
    $ echo $JSON_RESPONSE
    
    {
      "rootCaCertificate": "-----BEGIN CERTIFICATE-----\nMIIDj...qYzmp\n-----END CERTIFICATE-----\n",
      "certificate": "-----BEGIN CERTIFICATE-----\nMIIC4...sBHoE\n-----END CERTIFICATE-----\n",
      "privateKey": "-----BEGIN PRIVATE KEY-----\nMIIEv...BPw==\n-----END PRIVATE KEY-----\n",
      "deviceId": "myDevice-29505xxxxxxxxxx",
      "operationId": "5.4e0fe...20175",
      "status": "assigned",
      "host": "iot-hub.azure-devices.net"
    }
    

    getAzureIotDeviceRegistrationStatus オペレーションのレスポンス中の status パラメータによって、次のステップが異なります。assigned 以外の値が返却された場合は、認証情報を取得できません。

    パラメータの値次のステップ
    assignedデバイスの登録が成功しています。他のレスポンスパラメータ中の認証情報を用いて Azure IoT Hub へ接続できます。
    assigningデバイスの登録中です。一定間隔を空けて再度 getAzureIotDeviceRegistrationStatus オペレーションを呼び出してください。
    その他デバイスの登録に失敗しています。再度 registerAzureIotDevice オペレーションを呼び出してください。それでも失敗する場合は SORACOM や Azure の設定を見直してください。

    同じ OPERATION_ID を用いて認証情報を取得できるのは一回だけです。再度認証情報を取得するには、registerAzureIotDevice オペレーションから開始してください。

  4. getAzureIotDeviceRegistrationStatus オペレーションのレスポンスの値をファイルや変数に保存します。

    説明
    rootCaCertificate値 (-----BEGIN CERTIFICATE-----\nMIIDj...qYzmp\n-----END CERTIFICATE-----\n) を rootCaCertificate.pem というファイル名で保存します。(*1)
    certificate値 (-----BEGIN CERTIFICATE-----\nMIIC4...sBHoE\n-----END CERTIFICATE-----\n) を certificate.pem というファイル名で保存します。(*1)
    privateKey値 (-----BEGIN PRIVATE KEY-----\nMIIEv...BPw==\n-----END PRIVATE KEY-----\n) を privatekey.pem というファイル名で保存します。(*1)
    deviceIdデバイス名です。これ以降、${device_id} と表記します。例: myDevice-29505xxxxxxxxxx
    hostホスト名です。これ以降、${iot_hub_hostname} と表記します。例: iot-hub.azure-devices.net
    • (*1) \n を改行コードに変換して保存します。

    デバイスに jq コマンドがインストールされている場合は、以下のコマンドでファイルや変数に保存できます。

    $ echo $JSON_RESPONSE | jq -r ".rootCaCertificate" | sed -e 's/\\n/\n/g' > rootCaCertificate.pem
    $ echo $JSON_RESPONSE | jq -r ".certificate" | sed -e 's/\\n/\n/g' > certificate.pem
    $ echo $JSON_RESPONSE | jq -r ".privateKey" | sed -e 's/\\n/\n/g' > privatekey.pem
    $ device_id=$(echo $JSON_RESPONSE | jq -r ".deviceId")
    $ iot_hub_hostname=$(echo $JSON_RESPONSE | jq -r ".host")
    

デバイスが IoT Hub に登録されていることを確認する

Azure IoT Hub にデバイスが追加されていることを確認します。

  1. Microsoft Azure Portal にアクセスし、[IoT Hub] → ステップ 1 で作成した IoT Hub をクリックします。

  2. [デバイス管理][デバイス] をクリックします。

  3. ${device_id} (例: myDevice-29505xxxxxxxxxx) のデバイスがあることを確認します。

MQTT を使用して IoT Hub とデータを送受信する

MQTT を使用して IoT Hub にデータを送信する

MQTT を使用して IoT SIM を利用するデバイスから IoT Hub にデータを送信します。

ここでは、MMQTT クライアントとして mosquitto-clients を利用してデバイスからデータを送信し、Azure CLI + Azure IoT extension for Azure CLI を利用して PC でデータをモニターします。

  1. IoT SIM を利用するデバイスに MQTT クライアントとして mosquitto-clients をインストールします。

    mosquitto-clients のインストール

    mosquitto-clients は、サイト からダウンロードおよびインストールしてください。

    なお、Raspberry Pi の場合は、以下のコマンドでインストールできます。

    $ sudo apt install mosquitto-clients
    
  2. PC に、Azure CLI をインストールします。

    詳しくは、Azure CLI をインストールする方法 を参照してください。

  3. PC で、データをモニターします。

    ${iot_hub_name}${resource_group_name} は、ステップ 1: IoT Hub と Azure IoT Hub Device Provisioning Service を作成する で作成した IoT Hub とリソースグループの名前です。

    $ az iot hub monitor-events -n ${iot_hub_name} -g ${resource_group_name}
    
    Starting event monitor, use ctrl-c to stop...
    
  4. デバイスで、データを送信します。

    ${iot_hub_hostname}${device_id} は、ステップ 6: Krypton を使用して IoT Hub にデバイスを登録して接続する の手順で取得した値を利用しします。

    $ mosquitto_pub -d -h ${iot_hub_hostname} -p 8883 \
    --cafile ./rootCaCertificate.pem \
    --cert ./certificate.pem \
    --key ./privatekey.pem \
    -i ${device_id} -u "${iot_hub_hostname}/${device_id}/?api-version=2021-04-12" \
    -t "devices/${device_id}/messages/events/" \
    -m '{
      "message": "Hello from Device with Krypton"
    }' -q 1
    
    Client myDevice-29505xxxxxxxxxx sending CONNECT
    Client myDevice-29505xxxxxxxxxx received CONNACK (0)
    Client myDevice-29505xxxxxxxxxx sending PUBLISH (d0, q0, r0, m1, 'devices/myDevice-29505xxxxxxxxxx/messages/events/', ... (45 bytes))
    Client myDevice-29505xxxxxxxxxx sending DISCONNECT
    

    さらに PC に以下のように表示され、IoT Hub にデータが送信されていることが確認できます。

    {
      "event": {
        "origin": "myDevice-29505xxxxxxxxxx",
        "module": "",
        "interface": "",
        "component": "",
        "payload": "{\"message\": \"Hello from Device with Krypton\"}"
      }
    }
    

MQTT を使用して IoT Hub からのデータを受信する

MQTT を使用して、IoT Hub から送信したデータを IoT SIM を利用するデバイスで受信します。

  1. デバイスで、データの Subscribe を開始します。

    $ mosquitto_sub -d -h ${iot_hub_hostname} -p 8883 \
    --cafile ./rootCaCertificate.pem \
    --cert ./certificate.pem \
    --key ./privatekey.pem \
    -i ${device_id} -u "${iot_hub_hostname}/${device_id}/?api-version=2021-04-12" \
    -t "devices/${device_id}/messages/devicebound/#"
    
    Client myDevice-29505xxxxxxxxxx sending CONNECT
    Client myDevice-29505xxxxxxxxxx received CONNACK (0)
    Client myDevice-29505xxxxxxxxxx sending SUBSCRIBE (Mid: 1, Topic: devices/myDevice-29505xxxxxxxxxx/messages/devicebound/#, QoS: 0)
    Client myDevice-29505xxxxxxxxxx received SUBACK
    Subscribed (mid: 1): 0
    
  2. Microsoft Azure Portal にアクセスし、[IoT Hub] → ステップ 1 で作成した IoT Hub をクリックします。

  3. [デバイス管理][デバイス] をクリックし、${device_id} をクリックします。

  4. [デバイスへのメッセージ] をクリックし、[メッセージの本文] に「Hello from Azure Portal!」と入力して、[メッセージの送信] をクリックします。

    IoT Hub から送信したデータが、デバイスで受信されます。

    Client myDevice-29505xxxxxxxxxx received PUBLISH (d0, q0, r0, m0, 'devices/myDevice-29505xxxxxxxxxx/messages/devicebound/%24.to=%2Fdevices%2FmyDevice-29505xxxxxxxxxx%2Fmessages%2FdeviceBound&%24.ct=text%2Fplain%3B%20charset%3DUTF-8&%24.ce=utf-8', ... (24 bytes))
    Hello from Azure Portal!
    

オプション: デバイスを削除する

デバイスが不要になった場合や、デバイスの認証情報を無効化する場合は、Azure IoT Hub からデバイスを削除してください。

  1. Microsoft Azure Portal にアクセスし、[IoT Hub] → ステップ 1 で作成した IoT Hub をクリックします。

  2. [デバイス管理][デバイス] をクリックします。

  3. 削除するデバイスにチェックを入れて、[削除][はい] の順にクリックします。

Azure IoT Hub からデバイスを削除すると、Krypton で作成した認証情報が無効化されます。再度接続する場合は、ステップ 6 を行います。