チュートリアル:シミュレートされたデバイスを使用して IoT ハブとの接続をテストするTutorial: Use a simulated device to test connectivity with your IoT hub

このチュートリアルでは、Azure IoT Hub ポータル ツールと Azure CLI コマンドを使用してデバイスの接続をテストします。In this tutorial, you use Azure IoT Hub portal tools and Azure CLI commands to test device connectivity. このチュートリアルでは、デスクトップ マシンで実行する単純なデバイス シミュレーターも使用します。This tutorial also uses a simple device simulator that you run on your desktop machine.

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

このチュートリアルでは、以下の内容を学習します。In this tutorial, you learn how to:

  • デバイスの認証を確認するCheck your device authentication
  • デバイスからクラウドへの接続を確認するCheck device-to-cloud connectivity
  • クラウドからデバイスへの接続を確認するCheck cloud-to-device connectivity
  • デバイス ツインの同期を確認するCheck device twin synchronization

Azure Cloud Shell を使用するUse Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。You can use either Bash or PowerShell with Cloud Shell to work with Azure services. ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell を開始するには:To start Azure Cloud Shell:

オプションOption 例とリンクExample/Link
コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. [使ってみる] を選択しても、コードは Cloud Shell に自動的にコピーされません。Selecting Try It doesn't automatically copy the code to Cloud Shell. Azure Cloud Shell の [使ってみる] の例
https://shell.azure.com に移動するか、 [Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. 新しいウィンドウで Cloud Shell を起動するLaunch Cloud Shell in a new window
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the menu bar at the upper right in the Azure portal. Azure Portal の [Cloud Shell] ボタン

Azure Cloud Shell でこの記事のコードを実行するには:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell を開始します。Start Cloud Shell.

  2. [コピー] ボタンを選択して、コード ブロックをコードにコピーします。Select the Copy button on a code block to copy the code.

  3. Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードを Cloud Shell セッションに貼り付けます。Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Enter キーを選択して、コードを実行します。Select Enter to run the code.

前提条件Prerequisites

このチュートリアルで実行する CLI スクリプトでは、Microsoft Azure IoT Extension for Azure CLI を使用します。The CLI scripts you run in this tutorial use the Microsoft Azure IoT Extension for Azure CLI. この拡張機能をインストールするには、次の CLI コマンドを実行します。To install this extension, run the following CLI command:

az extension add --name azure-iot

注意

この記事では、azure-iot と呼ばれる、Azure IoT 拡張機能の最新バージョンを使用します。This article uses the newest version of the Azure IoT extension, called azure-iot. 従来のバージョンは azure-cli-iot-ext と呼ばれます。一度にインストールできるバージョンは 1 つだけです。The legacy version is called azure-cli-iot-ext.You should only have one version installed at a time. コマンド az extension list を使用すると、現在インストールされている拡張機能を確認できます。You can use the command az extension list to validate the currently installed extensions.

拡張機能の従来のバージョンを削除するには、az extension remove --name azure-cli-iot-ext を使用します。Use az extension remove --name azure-cli-iot-ext to remove the legacy version of the extension.

拡張機能の新しいバージョンを追加するには、az extension add --name azure-iot を使用します。Use az extension add --name azure-iot to add the new version of the extension.

インストール済みの拡張機能を表示するには、az extension list を使用してください。To see what extensions you have installed, use az extension list.

このチュートリアルで実行するデバイス シミュレーター アプリケーションは、Node.js を使用して作成しています。The device simulator application you run in this tutorial is written using Node.js. 開発用コンピューター上に Node.js v10.x.x 以降が必要です。You need Node.js v10.x.x or later on your development machine.

複数のプラットフォームに対応する Node.js を nodejs.org からダウンロードできます。You can download Node.js for multiple platforms from nodejs.org.

開発コンピューターに現在インストールされている Node.js のバージョンは、次のコマンドを使って確認できます。You can verify the current version of Node.js on your development machine using the following command:

node --version

https://github.com/Azure-Samples/azure-iot-samples-node/archive/master.zip からサンプル デバイス シミュレーター Node.js プロジェクトをダウンロードし、ZIP アーカイブを抽出します。Download the sample device simulator Node.js project from https://github.com/Azure-Samples/azure-iot-samples-node/archive/master.zip and extract the ZIP archive.

ポート 8883 がファイアウォールで開放されていることを確認してください。Make sure that port 8883 is open in your firewall. このチュートリアルのデバイス サンプルでは、ポート 8883 を介して通信する MQTT プロトコルを使用しています。The device sample in this tutorial uses MQTT protocol, which communicates over port 8883. このポートは、企業や教育用のネットワーク環境によってはブロックされている場合があります。This port may be blocked in some corporate and educational network environments. この問題の詳細と対処方法については、「IoT Hub への接続 (MQTT)」を参照してください。For more information and ways to work around this issue, see Connecting to IoT Hub (MQTT).

IoT Hub の作成Create an IoT hub

以前のクイックスタートまたはチュートリアルで無料または標準の IoT ハブを作成した場合は、この手順をスキップできます。If you created a free or standard tier IoT hub in a previous quickstart or tutorial, you can skip this step.

Azure portal を使用して IoT ハブを作成するには:To create an IoT Hub using the Azure portal:

  1. Azure portal にサインインします。Sign in to the Azure portal.

  2. [リソースの作成] > [モノのインターネット] > [IoT Hub] を選択します。Select Create a resource > Internet of Things > IoT Hub.

    IoT Hub をインストールすることを選択する

  3. Free レベルの IoT ハブを作成するには、次の表の値を使用します。To create your free-tier IoT hub, use the values in the following tables:

    設定Setting Value
    サブスクリプションSubscription ドロップダウンから Azure サブスクリプションを選択します。Select your Azure subscription in the drop-down.
    Resource groupResource group 新規作成。Create new. このチュートリアルでは、tutorials-iot-hub-rg という名前を使います。This tutorial uses the name tutorials-iot-hub-rg.
    リージョンRegion このチュートリアルでは、 [米国西部] を使います。This tutorial uses West US. 最も近いリージョンを選択できます。You can choose the region closest to you.
    名前Name 次のスクリーンショットでは、tutorials-iot-hub という名前を使っています。The following screenshot uses the name tutorials-iot-hub. ハブを作成するときは、独自の一意名を選ぶ必要があります。You must choose your own unique name when you create your hub.

    ハブの設定 1

    設定Setting Value
    価格とスケール ティアPricing and scale tier F1 Free。F1 Free. サブスクリプションに作成できる Free レベルのハブは 1 つだけです。You can only have one free tier hub in a subscription.
    IoT Hub ユニットIoT Hub units 11

    ハブの設定 2

  4. Create をクリックしてください。Click Create. ハブが作成されるまで数分かかる場合があります。It can take several minutes for the hub to be created.

    ハブの設定 3

  5. 選択した IoT ハブの名前を書き留めておきます。Make a note of the IoT hub name you chose. この値は、後ほどチュートリアルの中で使用します。You use this value later in the tutorial.

デバイスの認証を確認するCheck device authentication

ハブとの間でデータを交換するには、デバイスがハブの認証を受ける必要があります。A device must authenticate with your hub before it can exchange any data with the hub. ポータルの [デバイスの管理] セクションにある [IoT デバイス] ツールを使用して、デバイスを管理し、使用している認証キーを確認できます。You can use the IoT Devices tool in the Device Management section of the portal to manage your devices and check the authentication keys they're using. チュートリアルのこのセクションでは、新しいテスト デバイスを追加し、そのキーを取得し、テスト デバイスがハブに接続できることを確認します。In this section of the tutorial, you add a new test device, retrieve its key, and check that the test device can connect to the hub. 後で、認証キーをリセットして、デバイスが古いキーを使用しようとしたときの動作を観察します。Later you reset the authentication key to observe what happens when a device tries to use an outdated key. チュートリアルのこのセクションでは、Azure Portal を使用してデバイスの作成、管理、および監視し、サンプル Node.js デバイス シミュレーターを作成します。This section of the tutorial uses the Azure portal to create, manage, and monitor a device, and the sample Node.js device simulator.

ポータルにサインインし、IoT ハブに移動します。Sign in to the portal and navigate to your IoT hub. 次に、 IoT デバイス ツールに移動します。Then navigate to the IoT Devices tool:

IoT デバイス ツール

新しいデバイスを登録するには、 [+ 追加] をクリックし、 [デバイス ID]MyTestDevice に設定して [保存] をクリックします。To register a new device, click + Add , set Device ID to MyTestDevice , and click Save :

新しいデバイスを追加する

MyTestDevice の接続文字列を取得するには、デバイスの一覧でその接続文字列をクリックし、 [接続文字列 - 主キー] の値をコピーします。To retrieve the connection string for MyTestDevice , click on it in the list of devices and then copy the Connection string-primary key value. 接続文字列には、デバイスの 共有アクセス キー が含まれています。The connection string includes the shared access key for the device.

デバイス接続文字列を取得する

IoT ハブにテレメトリを送信する MyTestDevice をシミュレートするには、前にダウンロードした Node.js のシミュレートされたデバイス アプリケーションを実行します。To simulate MyTestDevice sending telemetry to your IoT hub, run the Node.js simulated device application you downloaded previously.

開発用マシンのターミナル ウィンドウで、ダウンロードしたサンプル Node.js プロジェクトのルート フォルダーに移動します。In a terminal window on your development machine, navigate to the root folder of the sample Node.js project you downloaded. 次に、 iot-hub\Tutorials\ConnectivityTests フォルダーに移動します。Then navigate to the iot-hub\Tutorials\ConnectivityTests folder.

ターミナル ウィンドウで次のコマンドを実行して、必要なライブラリをインストールし、シミュレートされたデバイス アプリケーションを実行します。In the terminal window, run the following commands to install the required libraries and run the simulated device application. ポータルでデバイスを追加したときにメモしたデバイスの接続文字列を使用します。Use the device connection string you made a note of when you added the device in the portal.

npm install
node SimulatedDevice-1.js "{your device connection string}"

ハブに接続しようとすると、ターミナル ウィンドウには情報が表示されます。The terminal window displays information as it tries to connect to your hub:

シミュレートされたデバイスの接続

これで、IoT ハブによって生成されたデバイス キーを使用して、デバイスから正常に認証されました。You've now successfully authenticated from a device using a device key generated by your IoT hub.

キーをリセットするReset keys

このセクションでは、デバイス キーをリセットし、シミュレートされたデバイスが接続しようとしたときのエラーを観察します。In this section, you reset the device key and observe the error when the simulated device tries to connect.

MyTestDevice のプライマリ デバイス キーをリセットするには、次のコマンドを実行します。To reset the primary device key for MyTestDevice , run the following commands:

# Generate a new Base64 encoded key using the current date
read key < <(date +%s | sha256sum | base64 | head -c 32)

# Requires the IoT Extension for Azure CLI
# az extension add --name azure-iot

# Reset the primary device key for MyTestDevice
az iot hub device-identity update --device-id MyTestDevice --set authentication.symmetricKey.primaryKey=$key --hub-name {YourIoTHubName}

開発用マシンのターミナル ウィンドウで、シミュレートされたデバイス アプリケーションをもう一度実行します。In the terminal window on your development machine, run the simulated device application again:

npm install
node SimulatedDevice-1.js "{your device connection string}"

今回は、アプリケーションが接続しようとすると認証エラーが表示されます。This time you see an authentication error when the application tries to connect:

接続エラー

Shared Access Signature (SAS) トークンを生成するGenerate shared access signature (SAS) token

デバイスが IoT Hub デバイス SDK のいずれかを使用している場合、SDK ライブラリ コードで、ハブの認証を受けるために使用される SAS トークンを生成します。If your device uses one of the IoT Hub device SDKs, the SDK library code generates the SAS token used to authenticate with the hub. SAS トークンは、ハブの名前、デバイスの名前、およびデバイス キーから生成されます。A SAS token is generated from the name of your hub, the name of your device, and the device key.

クラウド プロトコル ゲートウェイやカスタム認証スキームの一部のシナリオなど、場合によっては SAS トークンを手動で生成する必要があります。In some scenarios, such as in a cloud protocol gateway or as part of a custom authentication scheme, you may need to generate the SAS token yourself. SAS 生成コードに関する問題を解決する場合、テスト時に使用できる、問題のないことが明白な SAS トークンを生成できると便利です。To troubleshoot issues with your SAS generation code, it's useful to generate a known-good SAS token to use during testing.

注意

SimulatedDevice-2.js のサンプルには、SDK があるバージョンとないバージョンの SAS トークンを生成する例が含まれています。The SimulatedDevice-2.js sample includes examples of generating a SAS token both with and without the SDK.

CLI を使用して問題のない既知の SAS トークンを生成するには、次のコマンドを実行します。To generate a known-good SAS token using the CLI, run the following command:

az iot hub generate-sas-token --device-id MyTestDevice --hub-name {YourIoTHubName}

生成された SAS トークンの全文をメモします。Make a note of the full text of the generated SAS token. SAS トークンは次のようになります。SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FMyTestDevice&sig=....&se=1524155307A SAS token looks like the following: SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FMyTestDevice&sig=....&se=1524155307

開発用マシンのターミナル ウィンドウで、ダウンロードしたサンプル Node.js プロジェクトのルート フォルダーに移動します。In a terminal window on your development machine, navigate to the root folder of the sample Node.js project you downloaded. 次に、 iot-hub\Tutorials\ConnectivityTests フォルダーに移動します。Then navigate to the iot-hub\Tutorials\ConnectivityTests folder.

ターミナル ウィンドウで次のコマンドを実行して、必要なライブラリをインストールし、シミュレートされたデバイス アプリケーションを実行します。In the terminal window, run the following commands to install the required libraries and run the simulated device application:

npm install
node SimulatedDevice-2.js "{Your SAS token}"

SAS トークンを使用してハブに接続しようとすると、ターミナル ウィンドウには情報が表示されます。The terminal window displays information as it tries to connect to your hub using the SAS token:

トークンと接続しているシミュレートされたデバイス

これで、CLI コマンドで生成されたテスト SAS トークンを使用して、デバイスから正常に認証されました。You've now successfully authenticated from a device using a test SAS token generated by a CLI command. SimulatedDevice-2.js ファイルには、コードで SAS トークンを生成する方法を示すサンプル コードが含まれています。The SimulatedDevice-2.js file includes sample code that shows you how to generate a SAS token in code.

プロトコルProtocols

デバイスは、次のいずれかのプロトコルを使用して IoT ハブに接続できます。A device can use any of the following protocols to connect to your IoT hub:

ProtocolProtocol 送信ポートOutbound port
MQTTMQTT 88838883
WebSocket 経由の MQTTMQTT over WebSockets 443443
AMQPAMQP 56715671
AMQP over WebSocketAMQP over WebSockets 443443
HTTPSHTTPS 443443

送信ポートがファイアウォールによってブロックされている場合、デバイスは接続できません。If the outbound port is blocked by a firewall, the device can't connect:

ポートのブロック

デバイスからクラウドへの接続を確認するCheck device-to-cloud connectivity

デバイスが接続されると、通常、IoT ハブにテレメトリを送信しようとします。After a device connects, it typically tries to send telemetry to your IoT hub. このセクションでは、デバイスから送信されたテレメトリがハブに到達したことを確認する方法について説明します。This section shows you how you can verify that the telemetry sent by the device reaches your hub.

まず、次のコマンドを使用して、シミュレートされたデバイスの現在の接続文字列を取得します。First, retrieve the current connection string for your simulated device using the following command:

az iot hub device-identity show-connection-string --device-id MyTestDevice --output table --hub-name {YourIoTHubName}

メッセージを送信するシミュレートされたデバイスを実行するには、ダウンロードしたコードの iot-hub\Tutorials\ConnectivityTests フォルダーに移動します。To run a simulated device that sends messages, navigate to the iot-hub\Tutorials\ConnectivityTests folder in the code you downloaded.

ターミナル ウィンドウで次のコマンドを実行して、必要なライブラリをインストールし、シミュレートされたデバイス アプリケーションを実行します。In the terminal window, run the following commands to install the required libraries and run the simulated device application:

npm install
node SimulatedDevice-3.js "{your device connection string}"

テレメトリをハブに送信すると、ターミナル ウィンドウには情報が表示されます。The terminal window displays information as it sends telemetry to your hub:

メッセージを送信するシミュレートされたデバイス

ポータルの [メトリック] を使用して、テレメトリ メッセージが IoT ハブに到達していることを確認できます。You can use Metrics in the portal to verify that the telemetry messages are reaching your IoT hub. [リソース] ドロップダウンで IoT ハブを選択し、メトリックとして [Telemetry messages sent](送信されたテレメトリ メッセージ) を選択し、時間範囲を [過去 1 時間] に設定します。Select your IoT hub in the Resource drop-down, select Telemetry messages sent as the metric, and set the time range to Past hour . グラフには、シミュレートしたデバイスから送信されたメッセージの総数が表示されます。The chart shows the aggregate count of messages sent by the simulated device:

IoT Hub メトリックを表示する

シミュレートされたデバイスの起動後、メトリックが使用できるようになるまでには数分かかります。It takes a few minutes for the metrics to become available after you start the simulated device.

クラウドからデバイスへの接続を確認するCheck cloud-to-device connectivity

このセクションでは、デバイスに対してテストのダイレクト メソッド呼び出しを実行して、クラウドからデバイスへの接続を確認する方法について説明します。This section shows how you can make a test direct method call to a device to check cloud-to-device connectivity. 開発用マシン上でシミュレートされたデバイスを実行して、ハブからのダイレクト メソッド呼び出しをリッスンします。You run a simulated device on your development machine to listen for direct method calls from your hub.

ターミナル ウィンドウで、次のコマンドを使用してシミュレートされたデバイス アプリケーションを実行します。In a terminal window, use the following command to run the simulated device application:

node SimulatedDevice-3.js "{your device connection string}"

CLI コマンドを使用して、デバイス上でダイレクト メソッドを呼び出します。Use a CLI command to call a direct method on the device:

az iot hub invoke-device-method --device-id MyTestDevice --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {YourIoTHubName}

シミュレートされたデバイスは、ダイレクト メソッド呼び出しを受信すると、コンソールにメッセージを出力します。The simulated device prints a message to the console when it receives a direct method call:

シミュレートされたデバイスでダイレクト メソッド呼び出しを受信する

シミュレートされたデバイスがダイレクト メソッド呼び出しを正常に受信すると、ハブに受信確認を返します。When the simulated device successfully receives the direct method call, it sends an acknowledgement back to the hub:

ダイレクト メソッドの受信確認を受信する

ツインの同期を確認するCheck twin synchronization

デバイスは、ツインを使用してデバイスとハブ間の状態を同期します。Devices use twins to synchronize state between the device and the hub. このセクションでは、CLI コマンドを使用して、 必要なプロパティ をデバイスに送信し、デバイスによって送信された 報告されたプロパティ を読み取ります。In this section, you use CLI commands to send desired properties to a device and read the reported properties sent by the device.

このセクションで使用するシミュレートされたデバイスは、起動されるたびに報告されたプロパティをハブに送信し、受信するたびにコンソールに必要なプロパティを出力します。The simulated device you use in this section sends reported properties to the hub whenever it starts up, and prints desired properties to the console whenever it receives them.

ターミナル ウィンドウで、次のコマンドを使用してシミュレートされたデバイス アプリケーションを実行します。In a terminal window, use the following command to run the simulated device application:

node SimulatedDevice-3.js "{your device connection string}"

ハブがデバイスから報告されたプロパティを受信したことを確認するには、次の CLI コマンドを使用します。To verify that the hub received the reported properties from the device, use the following CLI command:

az iot hub device-twin show --device-id MyTestDevice --hub-name {YourIoTHubName}

コマンドからの出力の報告されたプロパティ セクションに devicelaststarted プロパティがあります。In the output from the command, you can see the devicelaststarted property in the reported properties section. このプロパティは、シミュレートされたデバイスの最終起動日時を示します。This property shows the date and time you last started the simulated device.

報告されたプロパティを表示する

ハブが必要なプロパティ値をデバイスに送信できることを確認するには、次の CLI コマンドを使用します。To verify that the hub can send desired property values to the device, use the following CLI command:

az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id MyTestDevice --hub-name {YourIoTHubName}

ハブから必要なプロパティの更新を受信すると、シミュレートされたデバイスからメッセージが出力されます。The simulated device prints a message when it receives a desired property update from the hub:

必要なプロパティを受信する

シミュレートされたデバイスは、作成時に必要なプロパティ変更を受信するだけでなく、起動時に必要なプロパティを自動的に確認します。In addition to receiving desired property changes as they're made, the simulated device automatically checks for desired properties when it starts up.

リソースをクリーンアップするClean up resources

IoT ハブが必要でなくなった場合は、ポータルを使用して IoT ハブとリソース グループを削除します。If you don't need the IoT hub any longer, delete it and the resource group in the portal. これを行うには、IoT ハブを含む tutorials-iot-hub-rg リソース グループを選択し、 [削除] をクリックします。To do so, select the tutorials-iot-hub-rg resource group that contains your IoT hub and click Delete .

次のステップNext steps

このチュートリアルでは、デバイス キーを確認し、デバイスからクラウドへの接続を確認し、クラウドからデバイスへの接続を確認し、デバイスのツイン同期を確認する方法を確認しました。In this tutorial, you've seen how to check your device keys, check device-to-cloud connectivity, check cloud-to-device connectivity, and check device twin synchronization. IoT ハブを監視する方法の詳細については、IoT Hub の監視方法に関する記事を参照してください。To learn more about how to monitor your IoT hub, visit the how-to article for IoT Hub monitoring.