クイック スタート:IoT ハブに接続されたデバイスを制御する (Node.js)Quickstart: Control a device connected to an IoT hub (Node.js)

IoT Hub は、IoT デバイスからクラウドに大量の利用統計情報を取り込み、クラウドからデバイスを管理することができる、Azure サービスです。IoT Hub is an Azure service that enables you to ingest high volumes of telemetry from your IoT devices into the cloud and manage your devices from the cloud. このクイック スタートでは、"ダイレクト メソッド" を使って、IoT ハブに接続されているシミュレートされたデバイスを制御します。In this quickstart, you use a direct method to control a simulated device connected to your IoT hub. ダイレクト メソッドを使うと、IoT ハブに接続されたデバイスの動作をリモートで変更できます。You can use direct methods to remotely change the behavior of a device connected to your IoT hub.

このクイック スタートでは、あらかじめ作成されている次の 2 つの Node.js アプリケーションを使います。The quickstart uses two pre-written Node.js applications:

  • シミュレートされたデバイス アプリケーションは、バックエンド アプリケーションから呼び出されたダイレクト メソッドに応答します。A simulated device application that responds to direct methods called from a back-end application. ダイレクト メソッドの呼び出しを受け取るため、このアプリケーションは IoT ハブ上のデバイス固有のエンドポイントに接続します。To receive the direct method calls, this application connects to a device-specific endpoint on your IoT hub.

  • バックエンド アプリケーションは、シミュレートされたデバイスでダイレクト メソッドを呼び出します。A back-end application that calls the direct methods on the simulated device. デバイスでダイレクト メソッドを呼び出すため、このアプリケーションは IoT ハブ上のサービス側エンドポイントに接続します。To call a direct method on a device, this application connects to service-side endpoint on your IoT hub.

Azure Cloud Shell を開くOpen Azure Cloud Shell

Azure Cloud Shell は、Azure でホストされる対話型のシェル環境で、ブラウザーを介して使用されます。Azure Cloud Shell is an interactive shell environment hosted in Azure and used through your browse. Azure Cloud Shell では、bash または PowerShell のいずれかのシェルを使用して、Azure サービスで動作するさまざまなツールを実行できます。Azure Cloud Shell allows you to use either bash or PowerShell shells to run a variety of tools to work with Azure services. Azure Cloud Shell にはコマンドがプレインストールされており、ローカル環境に何もインストールしなくても、この記事の内容を実行できるようになっています。Azure Cloud Shell comes pre-installed with the commands to allow you to run the content of this article without having to install anything on your local environment.

この記事に含まれるコードを Azure Cloud Shell で実行するには、Cloud Shell セッションを開き、コード ブロック上の [コピー] ボタンを使ってコードをコピーし、Ctrl + Shift + V キー (Windows と Linux) または command + Shift + V キー (macOS) を押して Cloud Shell セッションに貼り付けます。To run any code contained in this article on Azure Cloud Shell, open a Cloud Shell session, use the Copy button on a code block to copy the code, and paste it into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS. テキストを貼り付けても自動的には実行されません。コードを実行するには、Enter キーを押します。Pasted text is not automatically executed, so press Enter to run code.

Azure Cloud Shell は次の方法で起動できます。You can launch Azure Cloud Shell with:

コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. テキストが自動的に Cloud Shell にコピーされるわけでは__ありません__。This doesn't automatically copy text to Cloud Shell. Azure Cloud Shell の [使ってみる] の例
ブラウザーで shell.azure.com を開きます。Open shell.azure.com in your browser. Azure Cloud Shell の起動ボタンLaunch Azure Cloud Shell button
Azure Portal の右上隅にあるメニューの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. Azure Portal の [Cloud Shell] ボタン

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

前提条件Prerequisites

このクイック スタートで実行する 2 つのサンプル アプリケーションは、Node.js を使って書かれています。The two sample applications you run in this quickstart are 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

次のコマンドを実行して、Microsoft Azure IoT Extension for Azure CLI を Cloud Shell インスタンスに追加します。Run the following command to add the Microsoft Azure IoT Extension for Azure CLI to your Cloud Shell instance. IoT Hub、IoT Edge、IoT Device Provisioning Service (DPS) 固有のコマンドが Azure CLI に追加されます。The IOT Extension adds IoT Hub, IoT Edge, and IoT Device Provisioning Service (DPS) specific commands to Azure CLI.

az extension add --name azure-cli-iot-ext

まだ行っていない場合は、 https://github.com/Azure-Samples/azure-iot-samples-node/archive/master.zip からサンプル Node.js プロジェクトをダウンロードし、ZIP アーカイブを抽出します。If you haven't already done so, download the sample Node.js project from https://github.com/Azure-Samples/azure-iot-samples-node/archive/master.zip and extract the ZIP archive.

IoT Hub の作成Create an IoT hub

前出のデバイスから IoT ハブへの利用統計情報の送信に関するクイック スタートを完了した場合は、この手順を省略できます。If you completed the previous Quickstart: Send telemetry from a device to an IoT hub, you can skip this step.

ここでは、Azure portal を使用して IoT ハブを作成する方法について説明します。This section describes how to create an IoT hub using the Azure portal.

  1. Azure Portal にログインします。Log in to the Azure portal.

  2. + リソースの作成を選択してから、MarketplaceIoT Hub を検索します。Choose +Create a resource, then Search the Marketplace for the IoT Hub.

  3. [IoT Hub] を選択し、 [作成] をクリックします。Select IoT Hub and click the Create button. IoT ハブを作成するための最初の画面が表示されます。You see the first screen for creating an IoT hub.

    Azure portal でハブを作成する

    フィールドに入力します。Fill in the fields.

    サブスクリプション:IoT ハブで使用するサブスクリプションを選択します。Subscription: Select the subscription to use for your IoT hub.

    リソース グループ:新しいリソース グループを作成するか、既存のリソース グループを使用することができます。Resource Group: You can create a new resource group or use an existing one. 新しいものを作成するには、 [新規作成] をクリックして、使用する名前を入力します。To create a new one, click Create new and fill in the name you want to use. 既存のグループを使用するには、 [既存のものを使用] をクリックし、ドロップダウン リストからリソース グループを選択します。To use an existing resource group, click Use existing and select the resource group from the dropdown list. 詳しくは、「Manage Azure Resource Manager resource groups (Azure Resource Manager のリソース グループの管理)」をご覧ください。For more information, see Manage Azure Resource Manager resource groups.

    [リージョン] :ハブを配置するリージョンです。Region: This is the region in which you want your hub to be located. 最も近い場所をドロップダウン リストから選択します。Select the location closest to you from the dropdown list.

    [IoT Hub 名] : IoT Hub の名前を入力します。IoT Hub Name: Put in the name for your IoT Hub. この名前はグローバルに一意である必要があります。This name must be globally unique. 入力した名前が使用可能な場合は、緑色のチェック マークが表示されます。If the name you enter is available, a green check mark appears.

    重要

    IoT ハブは DNS エンドポイントとして公開されるため、名前を付ける際に機密情報や個人を特定できる情報を入力しないように注意してください。Because the IoT hub will be publicly discoverable as a DNS endpoint, be sure to avoid entering any sensitive or personally identifiable information when you name it.

  4. [次へ: Size and scale](次へ: サイズとスケール) をクリックして、IoT ハブの作成を続けます。Click Next: Size and scale to continue creating your IoT hub.

    Azure portal を使用して新しい IoT ハブのサイズとスケールを設定する

    この画面では、既定値を使用して、下部にある [確認および作成] をクリックするだけです。On this screen, you can take the defaults and just click Review + create at the bottom.

    [価格とスケールティア] : 必要な機能およびソリューションで 1 日に送信するメッセージの数に応じて、複数のレベルから適切なものを選びます。Pricing and scale tier: You can choose from several tiers depending on how many features you want and how many messages you send through your solution per day. 無料レベルは、テストおよび評価用です。The free tier is intended for testing and evaluation. IoT Hub に接続できるデバイスは 500 個で、1 日に許可されるメッセージ数は最大 8,000 件です。It allows 500 devices to be connected to the IoT hub and up to 8,000 messages per day. Azure サブスクリプションごとに、無料レベルの IoT Hub を 1 つ作成できます。Each Azure subscription can create one IoT Hub in the free tier.

    [IoT Hub ユニット] : ユニットごとに許可される 1 日あたりのメッセージの数は、ハブの価格レベルによって決まります。IoT Hub units: The number of messages allowed per unit per day depends on your hub's pricing tier. たとえば、IoT Hub で 700,000 件の受信メッセージをサポートする場合は、S1 レベルのユニットを 2 つ選択します。For example, if you want the IoT hub to support ingress of 700,000 messages, you choose two S1 tier units.

    他のレベルのオプションについて詳しくは、適切な IoT Hub レベルの選択に関するページをご覧ください。For details about the other tier options, see Choosing the right IoT Hub tier.

    高度なパーティション/Device-to-cloud パーティション: このプロパティでは、device-to-cloud メッセージがそのメッセージの同時閲覧者数に関連付けられます。Advanced / Device-to-cloud partitions: This property relates the device-to-cloud messages to the number of simultaneous readers of the messages. ほとんどの IoT ハブでは、4 つのパーティションのみが必要となります。Most IoT hubs only need four partitions.

  5. [確認および作成] をクリックして、選択内容を確認します。Click Review + create to review your choices. 次の画面のようになります。You see something similar to this screen.

    新しい IoT ハブを作成するための情報を確認する

  6. [作成] をクリックして、新しい IoT ハブを作成します。Click Create to create your new IoT hub. ハブの作成には数分かかります。Creating the hub takes a few minutes.

デバイスの登録Register a device

前出のデバイスから IoT ハブへの利用統計情報の送信に関するクイック スタートを完了した場合は、この手順を省略できます。If you completed the previous Quickstart: Send telemetry from a device to an IoT hub, you can skip this step.

デバイスを IoT ハブに接続するには、あらかじめ IoT ハブに登録しておく必要があります。A device must be registered with your IoT hub before it can connect. このクイック スタートでは、Azure Cloud Shell を使用して、シミュレートされたデバイスを登録します。In this quickstart, you use the Azure Cloud Shell to register a simulated device.

  1. Azure Cloud Shell で次のコマンドを実行してデバイス ID を作成します。Run the following command in Azure Cloud Shell to create the device identity.

    YourIoTHubName: このプレースホルダーは、実際の IoT ハブに対して選んだ名前に置き換えてください。YourIoTHubName: Replace this placeholder below with the name you chose for your IoT hub.

    MyNodeDevice: 登録するデバイスの名前。MyNodeDevice: The name of the device you're registering. 示されているように、MyNodeDevice を使用します。Use MyNodeDevice as shown. デバイスに別の名前を選択した場合は、この記事全体でその名前を使用し、サンプル アプリケーションを実行する前に、アプリケーション内のデバイス名を更新する必要があります。If you choose a different name for your device, you need to use that name throughout this article, and update the device name in the sample applications before you run them.

    az iot hub device-identity create \
      --hub-name YourIoTHubName --device-id MyNodeDevice
    
  2. Azure Cloud Shell で次のコマンドを実行して、登録したデバイスの "デバイス接続文字列" を取得します。Run the following commands in Azure Cloud Shell to get the device connection string for the device you just registered:

    YourIoTHubName: このプレースホルダーは、実際の IoT ハブに対して選んだ名前に置き換えてください。YourIoTHubName: Replace this placeholder below with the name you chose for your IoT hub.

    az iot hub device-identity show-connection-string \
      --hub-name YourIoTHubName \
      --device-id MyNodeDevice \
      --output table
    

    次のようなデバイス接続文字列をメモしておきます。Make a note of the device connection string, which looks like:

    HostName={YourIoTHubName}.azure-devices.net;DeviceId=MyNodeDevice;SharedAccessKey={YourSharedAccessKey}

    この値は、このクイック スタートの後の方で使います。You use this value later in the quickstart.

  3. また、バックエンド アプリケーションが IoT ハブに接続してメッセージを取得できるようにするには、"サービス接続文字列" が必要です。You also need a service connection string to enable the back-end application to connect to your IoT hub and retrieve the messages. 次のコマンドを実行すると、IoT ハブのサービス接続文字列が取得されます。The following command retrieves the service connection string for your IoT hub:

    YourIoTHubName:このプレースホルダーは、実際の IoT ハブに対して選んだ名前に置き換えてください。YourIoTHubName: Replace this placeholder below with the name you chose for your IoT hub.

    az iot hub show-connection-string \
      --name YourIoTHubName --output table
    

    次のようなサービス接続文字列をメモしておきます。Make a note of the service connection string, which looks like:

    HostName={YourIoTHubName}.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey={YourSharedAccessKey}

    この値は、このクイック スタートの後の方で使います。You use this value later in the quickstart. サービス接続文字列はデバイス接続文字列とは異なります。The service connection string is different from the device connection string.

ダイレクト メソッドの呼び出しをリッスンするListen for direct method calls

シミュレートされたデバイス アプリケーションは、IoT ハブ上のデバイス固有エンドポイントに接続し、シミュレートされた利用統計情報を送信して、ハブからのダイレクト メソッド呼び出しをリッスンします。The simulated device application connects to a device-specific endpoint on your IoT hub, sends simulated telemetry, and listens for direct method calls from your hub. このクイック スタートでは、ハブからのダイレクト メソッド呼び出しは、利用統計情報の送信間隔を変更するようデバイスに指示します。In this quickstart, the direct method call from the hub tells the device to change the interval at which it sends telemetry. シミュレートされたデバイスは、ダイレクト メソッドを実行した後、ハブに受信確認を返送します。The simulated device sends an acknowledgement back to your hub after it executes the direct method.

  1. ローカル ターミナル ウィンドウで、サンプルの Node.js プロジェクトのルート フォルダーに移動します。In a local terminal window, navigate to the root folder of the sample Node.js project. 次に、iot-hub\Quickstarts\simulated-device-2 フォルダーに移動します。Then navigate to the iot-hub\Quickstarts\simulated-device-2 folder.

  2. 適当なテキスト エディターで SimulatedDevice.js ファイルを開きます。Open the SimulatedDevice.js file in a text editor of your choice.

    connectionString 変数の値を、前にメモしたデバイス接続文字列に置き換えます。Replace the value of the connectionString variable with the device connection string you made a note of previously. その後、変更を SimulatedDevice.js ファイルに保存します。Then save your changes to SimulatedDevice.js file.

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

    npm install
    node SimulatedDevice.js
    

    次のスクリーンショットは、シミュレートされたデバイス アプリケーションが IoT ハブに利用統計情報を送信したときの出力を示しています。The following screenshot shows the output as the simulated device application sends telemetry to your IoT hub:

    シミュレートされたデバイスを実行する

ダイレクト メソッドを呼び出すCall the direct method

バックエンド アプリケーションは、IoT ハブ上のサービス側エンドポイントに接続します。The back-end application connects to a service-side endpoint on your IoT Hub. アプリケーションは、IoT ハブを通してデバイスへのダイレクト メソッド呼び出しを行った後、受信確認をリッスンします。The application makes direct method calls to a device through your IoT hub and listens for acknowledgements. 通常、IoT Hub のバックエンド アプリケーションはクラウドで実行されます。An IoT Hub back-end application typically runs in the cloud.

  1. 別のローカル ターミナル ウィンドウで、サンプルの Node.js プロジェクトのルート フォルダーに移動します。In another local terminal window, navigate to the root folder of the sample Node.js project. その後、iot-hub\Quickstarts\back-end-application フォルダーに移動します。Then navigate to the iot-hub\Quickstarts\back-end-application folder.

  2. 適当なテキスト エディターで BackEndApplication.js ファイルを開きます。Open the BackEndApplication.js file in a text editor of your choice.

    connectionString 変数の値を、前にメモしたサービス接続文字列に置き換えます。Replace the value of the connectionString variable with the service connection string you made a note of previously. 変更を BackEndApplication.js ファイルに保存します。Then save your changes to the BackEndApplication.js file.

  3. ローカル ターミナル ウィンドウで次のコマンドを実行して、必要なライブラリをインストールし、バックエンド アプリケーションを実行します。In the local terminal window, run the following commands to install the required libraries and run the back-end application:

    npm install
    node BackEndApplication.js
    

    次のスクリーンショットは、アプリケーションがデバイスに対してダイレクト メソッド呼び出しを行い、受信確認を受け取ったときの出力を示します。The following screenshot shows the output as the application makes a direct method call to the device and receives an acknowledgement:

    バックエンド アプリケーションを実行する

    バックエンド アプリケーションを実行した後、シミュレートされたデバイスを実行しているコンソール ウィンドウにメッセージが表示され、メッセージの送信速度が変わります。After you run the back-end application, you see a message in the console window running the simulated device, and the rate at which it sends messages changes:

    シミュレートされたクライアントでの変更

リソースのクリーンアップClean up resources

次の推奨記事に進む場合は、既に作成したリソースを維持して、再利用することができます。If you will be continuing to the next recommended article, you can keep the resources you've already created and reuse them.

それ以外の場合は、課金されないようにするために、この記事で作成した Azure リソースを削除してもかまいません。Otherwise, you can delete the Azure resources created in this article to avoid charges.

重要

リソース グループを削除すると、元に戻すことができません。Deleting a resource group is irreversible. リソース グループとそこに含まれるすべてのリソースは完全に削除されます。The resource group and all the resources contained in it are permanently deleted. 間違ったリソース グループやリソースをうっかり削除しないようにしてください。Make sure that you do not accidentally delete the wrong resource group or resources. IoT ハブを、保持したいリソースが含まれている既存のリソース グループ内に作成した場合は、リソース グループを削除するのではなく、IoT Hub リソースだけを削除してください。If you created the IoT Hub inside an existing resource group that contains resources you want to keep, only delete the IoT Hub resource itself instead of deleting the resource group.

名前でリソース グループを削除するには、以下の手順を実行します。To delete a resource group by name:

  1. Azure ポータル にサインインし、 [リソース グループ] をクリックします。Sign in to the Azure portal and click Resource groups.

  2. [名前でフィルター処理してください] ボックスに、IoT ハブが含まれているリソース グループの名前を入力します。In the Filter by name... textbox, type the name of the resource group containing your IoT Hub.

  3. 結果一覧のでリソース グループの [...] をクリックし、 [リソース グループの削除] をクリックします。To the right of your resource group in the result list, click ... then Delete resource group.

    削除

  4. リソース グループの削除の確認を求めるメッセージが表示されます。You will be asked to confirm the deletion of the resource group. 確認のためにリソース グループの名前を再度入力し、 [削除] をクリックします。Type the name of your resource group again to confirm, and then click Delete. しばらくすると、リソース グループとそこに含まれているすべてのリソースが削除されます。After a few moments, the resource group and all of its contained resources are deleted.

次の手順Next steps

このクイック スタートでは、バックエンド アプリケーションからデバイス上のダイレクト メソッドを呼び出し、シミュレートされたデバイス アプリケーションでダイレクト メソッド呼び出しに応答しました。In this quickstart, you called a direct method on a device from a back-end application, and responded to the direct method call in a simulated device application.

デバイスからクラウドへのメッセージをクラウド内の異なる宛先にルーティングする方法を学習するには、次のチュートリアルに進んでください。To learn how to route device-to-cloud messages to different destinations in the cloud, continue to the next tutorial.