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 を用意します。
例:
- Raspberry Pi + AK-020
- Raspberry Pi + Soracom Onyx - LTE™ USB ドングル
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 を設定する を参照してください。
リソースグループを作成し、IoT Hub (IoT ハブ) を作成します。
詳しくは、IoT Hub の作成 を参照してください。
リソースグループの名前と IoT Hub の名前をメモしてください
作成したリソースグループの名前と、IoT Hub の名前は、MQTT を使用して IoT Hub にデータを送信する 操作で必要です。
- リソースグループの名前は、これ以降、${resource_group_name} と表記します。例:
resource-group
- IoT Hub の名前は、これ以降、${iot_hub_name} と表記します。例:
iot-hub
- リソースグループの名前は、これ以降、${resource_group_name} と表記します。例:
手順 1 で作成したリソースグループに、Azure IoT Hub Device Provisioning Service (IoT Hub デバイスプロビジョニングサービス) を作成します。
詳しくは、新しい IoT Hub Device Provisioning Service インスタンスを作成する を参照してください。
手順 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
からパスワードを削除してください。以下のコマンドを実行します。
$ 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:
「1234」を入力して、Enter キーを押します。
writing RSA key
./private/azure-iot-test-only.intermediate.nopass.key.pem
が保存されます。
チュートリアルの手順とは異なり、IoT Hub にはアップロードしません。
証明書 | 説明 |
---|---|
ルート CA 証明書 | デバイス証明書に署名するルート認証局の X.509 CA 証明書です。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された
|
中間 CA 証明書 | デバイス証明書に署名する中間認証局の X.509 CA 証明書です。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された
|
中間 CA 証明書の秘密鍵 | デバイス証明書に署名する中間認証局の X.509 CA 証明書の秘密鍵です。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、パスワードを削除した
|
- (*1) 詳しくは、Azure IoT Hub Device Provisioning Service にルート CA 証明書を登録する を参照してください。
- (*2) 詳しくは、ステップ 1 で作成した X.509 証明書を登録する を参照してください。
- (*3) 詳しくは、Azure IoT Hub Device Provisioning Service に登録グループを追加する を参照してください。
ステップ 2: Azure IoT Hub Device Provisioning Service を設定する
Azure IoT Hub Device Provisioning Service を設定し、Krypton を利用するために必要な情報を集めます。
Azure IoT Hub Device Provisioning Service にルート CA 証明書を登録する
Microsoft Azure Portal にアクセスし、 → ステップ 1 で作成した Azure IoT Hub Device Provisioning Service をクリックします。
の → の順にクリックします。
以下の項目を設定します。
項目 説明 ルート CA 証明書を識別するために任意の文字列を入力します。例: Azure-IoT-Hub-CA-Cert-Test-Only-Root
ルート CA 証明書を選択します。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.root.ca.cert.pem
です。チェックを入れます。 をクリックします。
Azure IoT Hub Device Provisioning Service に登録グループを追加する
登録グループを追加して、中間 CA 証明書を登録します。Azure IoT Hub Device Provisioning Service を利用して複数のデバイスを登録するときに、「登録グループに登録した中間 CA 証明書」で署名したデバイス証明書が発行されます。
Microsoft Azure Portal にアクセスし、 → ステップ 1 で作成した Azure IoT Hub Device Provisioning Service をクリックします。
の → の順にクリックします。
以下の項目を設定します。
項目 設定 登録グループを識別するために任意の名前を入力します。例: enrollment-group
「証明書」を選択します。 「False」を選択します。ただし、登録するデバイスが Azure IoT Edge 対応デバイスであることを IoT Hub に通知する場合は、「True」を選択します。 「中間証明書」を選択します。 中間 CA 証明書を選択します。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.intermediate.cert.pem
です。をクリックします。
Azure IoT Hub Device Provisioning Service の共有アクセスポリシーを追加する
デバイスをプロビジョニングする際、Krypton はここで作成する共有アクセスポリシーを使用してデバイスを登録します。このポリシーの情報は、この後の手順で Azure IoT 認証情報として SORACOM ユーザーコンソールの認証情報ストアに登録します。
Microsoft Azure Portal にアクセスし、 → ステップ 1 で作成した Azure IoT Hub Device Provisioning Service をクリックします。
の → の順にクリックします。
以下の項目を設定します。
項目 説明 共有アクセスポリシーを識別するために任意の名前を入力します。ここに指定した共有アクセスポリシー名は、これ以降、${shared_access_policy_name} と表記します。例: shared-access-policy
にチェックを入れます。チェックを入れると、 、 、 にもチェックが入ります。 をクリックします。
共有アクセスポリシーが作成されます。
作成された共有アクセスポリシーをクリックします。
の をクリックして、主キーをコピーします。
主キーは、これ以降、${primary_key} と表記します。
Krypton を利用してデータを送受信するためのそのほかの情報を確認する
Krypton を利用するには、Azure IoT Hub Device Provisioning Service の以下の情報も必要です。
- グローバルデバイスエンドポイント
- ID スコープ
Microsoft Azure Portal にアクセスし、 → ステップ 1 で作成した Azure IoT Hub Device Provisioning Service をクリックします。
をクリックして、以下の項目をコピーします。
項目 説明 グローバルデバイスエンドポイントは、これ以降、${global_device_endpoint} と表記します。例: global.azure-devices-provisioning.net
ID スコープは、これ以降、${id_scope} と表記します。例: 0ne0xxxxxxx
ステップ 3: SORACOM ユーザーコンソールの認証情報ストアに登録する
ステップ 1 で作成した X.509 証明書を登録する
ステップ 1 で作成したルート CA 証明書、中間 CA 証明書、中間 CA 証明書の秘密鍵を SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。
認証情報は、以下のように登録します。
情報 | 説明 |
---|---|
任意の文字列を入力します。例: Azure-IoT-Hub-CA-Cert-Test-Only | |
「X.509 証明書」を選択します。 | |
中間 CA 証明書の秘密鍵の内容を貼り付けます (*1)。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./private/azure-iot-test-only.intermediate.nopass.key.pem の内容です。 | |
中間 CA 証明書の内容を貼り付けます (*1)。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.intermediate.cert.pem の内容です。 | |
ルート CA 証明書の内容を貼り付けます (*1)。Microsoft のチュートリアルの Bash スクリプトを利用して証明書を作成した場合は、手順内で作成された ./certs/azure-iot-test-only.root.ca.cert.pem の内容です。 |
- (*1) ファイル名ではなくファイルの内容を貼り付けてください。
ステップ 2 で確認した Azure IoT 認証情報を登録する
ステップ 2 で確認した情報を SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。
認証情報は、以下のように登録します。
情報 | 説明 |
---|---|
任意の文字列を入力します。例: Azure-IoT-credentials | |
「Azure IoT 認証情報」を選択します。 | |
${shared_access_policy_name} を入力します。例: shared-access-policy | |
${primary_key} を入力します。例: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= |
ステップ 4: IoT SIM に対して Krypton を有効化して Azure IoT Hub Device Provisioning Service の設定を紐づける
IoT SIM が Krypton を使って IoT Hub に接続するためのプロビジョニングを行うように設定します。
Krypton の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作ついて詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
スイッチをクリックして「on」にします。
→ の順にクリックします。
各項目を設定します。
項目 説明 ${global_device_endpoint} に https://
を足して入力します。例:https://global.azure-devices-provisioning.net
SORACOM 認証情報ストアに登録した X.509 証明書を選択します。例: Azure-IoT-Hub-CA-Cert-Test-Only
SORACOM 認証情報ストアに登録した Azure IoT 認証情報を選択します。例: Azure-IoT-credentials
デフォルトのデバイス名 (Krypton クライアントが指定していない場合に使用するデバイス名) を入力します。デバイス名には #{imsi}
という文字列を含めてください。#{imsi}
はデバイスの IoT SIM の IMSI に置換されます。例:myDevice-#{imsi}
${id_scope} を入力します。例: 0ne0xxxxxxx
→ の順にクリックします。
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"
}
}
]'
ボディで指定するプロパティについて
以下の key
と value
のペアを配列で指定します。
想定していない値を指定した場合の動作は、定義されていません。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 およびソフトウェアを利用する手順を紹介しています。その他のデバイスやソフトウェアを利用する場合は、適宜読み替えてください。
SORACOM Air のセルラー回線を使用した認証では、IoT SIM を利用するデバイスから SORACOM Krypton の API を用います。用いる API は以下の 2 つです。
- registerAzureIotDevice: Azure IoT Hub デバイスの登録
- getAzureIotDeviceRegistrationStatus: 登録した Azure IoT Hub デバイス用の認証情報の取得
IoT SIM を利用するデバイスへは、シリアルから、ローカルネットワークから、または SORACOM Napter を利用してログインしてください。
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 デバイス用の認証情報の取得します。
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から開始してください。
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")
- (*1)
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 を利用してログインしてください。
以下のいずれかをダウンロードします。
- Java 版の CLI ツールの場合は、soracom-krypton-client-for-java を利用してください。あらかじめお使いの環境にあった Java のランタイム環境をインストールしてください。
- Go 言語版の CLI ツールの場合は、krypton-client-go で、お使いの環境にあったバイナリファイルをダウンロードしてください。
以降は krypton-client-go を利用した場合の例です。
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 デバイス用の認証情報の取得します。
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 オペレーションから開始してください。
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")
- (*1)
デバイスが IoT Hub に登録されていることを確認する
Azure IoT Hub にデバイスが追加されていることを確認します。
Microsoft Azure Portal にアクセスし、 → ステップ 1 で作成した IoT Hub をクリックします。
の をクリックします。
${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 でデータをモニターします。
IoT SIM を利用するデバイスに MQTT クライアントとして mosquitto-clients をインストールします。
mosquitto-clients のインストール
mosquitto-clients は、サイト からダウンロードおよびインストールしてください。
なお、Raspberry Pi の場合は、以下のコマンドでインストールできます。
$ sudo apt install mosquitto-clients
PC に、Azure CLI をインストールします。
詳しくは、Azure CLI をインストールする方法 を参照してください。
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...
デバイスで、データを送信します。
${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 を利用するデバイスで受信します。
デバイスで、データの 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
Microsoft Azure Portal にアクセスし、 → ステップ 1 で作成した IoT Hub をクリックします。
の をクリックし、${device_id} をクリックします。
をクリックし、 に「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 からデバイスを削除してください。
Microsoft Azure Portal にアクセスし、 → ステップ 1 で作成した IoT Hub をクリックします。
の をクリックします。
削除するデバイスにチェックを入れて、
→ の順にクリックします。
Azure IoT Hub からデバイスを削除すると、Krypton で作成した認証情報が無効化されます。再度接続する場合は、ステップ 6 を行います。