チュートリアル - Azure IoT Central アプリケーションで新しい種類の IoT ゲートウェイ デバイスを定義する

このチュートリアルでは、スマート ビルディング ゲートウェイ デバイス テンプレートを作成します。 スマート ビルディング ゲートウェイデバイスは、他のダウンストリーム デバイスとリレーションシップがあります。

ゲートウェイ デバイスとそのダウンストリーム デバイスの間の関係を示す図。

ゲートウェイ デバイスでは、次のことも可能です:

  • 自身のテレメトリ (温度など) を送信する。
  • オペレーターによって行われた書き込み可能なプロパティの更新に応答する。 たとえば、オペレーターはテレメトリの送信間隔を変更できます。
  • コマンド (デバイスの再起動など) に応答する。

このチュートリアルでは、次の作業を行う方法について説明します。

  • ダウンストリーム デバイス テンプレートを作成する
  • ゲートウェイ デバイス テンプレートの作成
  • デバイス テンプレートを公開する
  • シミュレートされたデバイスを作成する

前提条件

このチュートリアルを完了するには、以下が必要になります。

ダウンストリーム デバイス テンプレートを作成する

このチュートリアルでは、シミュレートされたダウンストリーム デバイスを生成するために、Onset Hobo MX-100 Temp センサー デバイスおよび RS40 混雑状況センサー デバイス用のデバイス テンプレートを使用します。

Onset Hobo MX-100 Temp センサー デバイスのデバイス テンプレートを作成するには:

  1. 左側のペインで [デバイス テンプレート] を選択します。 次に、 [+ 新規] を選択して、テンプレートの追加を開始します。

  2. Onset Hobo MX-100 Temp センサー デバイスのタイルが表示されるまで下にスクロールします。 タイルを選択し、[次へ: 確認] を選択します。

  3. [Review](確認) ページで [作成] を選択して、アプリケーションにデバイス テンプレートを追加します。

RS40 混雑状況センサー デバイスのデバイス テンプレートを作成するには:

  1. 左側のペインで [デバイス テンプレート] を選択します。 次に、 [+ 新規] を選択して、テンプレートの追加を開始します。

  2. Rigado RS40 混雑状況センサー デバイスのタイルが表示されるまで下にスクロールします。 タイルを選択し、[次へ: 確認] を選択します。

  3. [Review](確認) ページで [作成] を選択して、アプリケーションにデバイス テンプレートを追加します。

これで、次のように 2 種類のダウンストリーム デバイスのデバイス テンプレートが作成されました。

ダウンストリーム デバイス テンプレートを示すスクリーンショット。

ゲートウェイ デバイス テンプレートの作成

このチュートリアルでは、ゲートウェイ デバイスのデバイス テンプレートもゼロから作成します。 このテンプレートは、シミュレートされたゲートウェイ デバイスをアプリケーション内に作成するために後で使用します。

新しいゲートウェイ デバイス テンプレートをアプリケーションに追加するには、次の手順を実行します。

  1. 左側のペインで [デバイス テンプレート] を選択します。 次に、 [+ 新規] を選択して、テンプレートの追加を開始します。

  2. [テンプレートの種類の選択] ページで [IoT デバイス] タイルを選択し、 [次へ: カスタマイズ] を選択します。

  3. [Customize device](デバイスのカスタマイズ) ページで、 [This is a gateway device](これはゲートウェイ デバイスです) チェック ボックスをオンにします。

  4. テンプレート名として「スマート ビルディング ゲートウェイ デバイス」と入力し、 [次: レビュー] を選択します。

  5. [Review](レビュー) ページで、 [Create](作成) を選択します。

  6. [モデルの作成] ページで、 [Custom model](カスタム モデル) タイルを選択します。

  7. [+ 機能の追加] を選択して、機能を追加します。

  8. 表示名として「データの送信」と入力し、機能タイプとして [プロパティ] を選択します。

  9. スキーマの型として [ブール値] を選択し、[書き込み可能] をオンに設定し、[保存]選択します。

リレーションシップの追加

次に、ダウンストリーム デバイス テンプレートにリレーションシップを追加します。

  1. [スマート ビルディング ゲートウェイ デバイス] テンプレートで、 [リレーションシップ] を選択します。

  2. [+ リレーションシップの追加] を選択します。 表示名として「環境センサー」と入力し、ターゲットとして [Hobo MX-100] を選択します。

  3. 再度、 [+ リレーションシップの追加] を選択します。 表示名として「混雑状況センサー」と入力し、ターゲットとして [RS40 混雑状況センサー] を選択します。

  4. [保存] を選択します。

ゲートウェイのリレーションシップを示すスクリーンショット。

クラウド プロパティを追加する

ゲートウェイ デバイス テンプレートにはクラウド プロパティを含めることができます。 クラウド プロパティは IoT Central アプリケーション内のみに存在しており、デバイスとの間で送受信されることはありません。

クラウド プロパティをスマート ビルディング ゲートウェイ デバイス テンプレートに追加するには、次の手順を実行します。

  1. [スマート ビルディング ゲートウェイ デバイス] テンプレートで、[スマート ビルディング ゲートウェイ デバイス モデル] を選択します。

  2. 下表の情報に従って、ゲートウェイ デバイス テンプレートに 2 つのクラウド プロパティを追加します。

    Display name 機能の種類 セマンティックの種類 スキーマ
    Last Service Date クラウド プロパティ なし Date
    Customer Name クラウド プロパティ なし String
  3. [保存] を選択します。

ビューの作成

作成者は、環境センサー デバイスの関連情報がオペレーターに表示されるよう、アプリケーションをカスタマイズできます。 カスタマイズを行うことで、オペレーターがアプリケーションに接続された環境センサー デバイスを管理できるようになります。 オペレーター向けのデバイス操作用のビューを 2 種類作成できます。

  • デバイス プロパティとクラウド プロパティを表示および編集するためのフォーム。
  • デバイスを視覚化するためのビュー。

スマート ビルディング ゲートウェイ デバイス テンプレートの既定のビューを生成するには、次の手順を実行します。

  1. [スマート ビルディング ゲートウェイ デバイス] テンプレートで、 [ビュー] を選択します。

  2. [既定のビューの生成] タイルを選択し、すべてのオプションが選択されていることを確認します。

  3. [Generate default dashboard view](既定のダッシュボード ビューの生成) を選択します。

デバイス テンプレートを公開する

シミュレートされたゲートウェイ デバイスを作成したり、実物のゲートウェイ デバイスを接続したりする前に、デバイス テンプレートを発行する必要があります。

ゲートウェイ デバイス テンプレートを発行するには、次の手順を実行します。

  1. [デバイス テンプレート] ページで [スマート ビルディング ゲートウェイ デバイス] テンプレートを選択します。

  2. [発行] を選択します。

  3. [Publish a Device Template](デバイス テンプレートの発行) ダイアログで、 [発行] を選択します。

デバイス テンプレートを公開すると、 [デバイス] ページに表示され、オペレーターが確認できるようになります。 オペレーターはテンプレートを利用し、デバイス インスタンスを作成したり、ルールと監視を確立したりできます。 発行後のテンプレートを編集すると、アプリケーション全体で動作に影響を与えることがあります。

発行後にデバイス テンプレートを変更する方法の詳細については、「既存のデバイス テンプレートを編集する」を参照してください。

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

このチュートリアルでは、シミュレートされたダウンストリーム デバイスとシミュレートされたゲートウェイ デバイスを使用します。

シミュレートされたゲートウェイ デバイスを作成するには、次の手順を実行します。

  1. [デバイス] ページのデバイス テンプレートの一覧で、 [スマート ビルディング ゲートウェイ デバイス] を選択します。

  2. [+ 新規] を選択して、新しいデバイスの追加を開始します。

  3. 生成されたデバイス IDデバイス名を保持します。 [シミュレート済み] スイッチが [はい] になっていることを確認します。 [作成] を選択します

シミュレートされたダウンストリーム デバイスを作成するには、次の手順を実行します。

  1. [デバイス] ページのデバイス テンプレートの一覧で、 [RS40 混雑状況センサー] を選択します。

  2. [+ 新規] を選択して、新しいデバイスの追加を開始します。

  3. 生成されたデバイス IDデバイス名を保持します。 [シミュレート済み] スイッチが [はい] になっていることを確認します。 [作成] を選択します

  4. [デバイス] ページのデバイス テンプレートの一覧で、[Hobo MX-100] を選択します。

  5. [+ 新規] を選択して、新しいデバイスの追加を開始します。

  6. 生成されたデバイス IDデバイス名を保持します。 [シミュレート済み] スイッチが [はい] になっていることを確認します。 [作成] を選択します

シミュレートされたデバイスを示すスクリーンショット。

ダウンストリーム デバイスのリレーションシップをゲートウェイ デバイスに追加する

シミュレートされたデバイスをアプリケーションに作成したので、ダウンストリーム デバイスとゲートウェイ デバイスの間にリレーションシップを作成できます。

  1. [デバイス] ページのデバイス テンプレートの一覧で [Hobo MX-100] を選択し、シミュレートされた [Hobo MX-100] デバイスを選択します。

  2. [ゲートウェイに接続] を選択します。

  3. [ゲートウェイへの接続] ダイアログで、 [スマート ビルディング ゲートウェイ デバイス] テンプレートを選択してから、前に作成したシミュレートされたインスタンスを選択します。

  4. [接続] を選択します。

  5. [デバイス] ページのデバイス テンプレートの一覧で [RS40 混雑状況センサー] を選択してから、シミュレートされた [RS40 混雑状況センサー] デバイスを選択します。

  6. [ゲートウェイに接続] を選択します。

  7. [ゲートウェイへの接続] ダイアログで、 [スマート ビルディング ゲートウェイ デバイス] テンプレートを選択してから、前に作成したシミュレートされたインスタンスを選択します。

  8. [接続] を選択します。

これで、両方のシミュレートされたダウンストリーム デバイスが、シミュレートされたゲートウェイ デバイスに接続されました。 ゲートウェイ デバイスの [Downstream Devices](ダウンストリーム デバイス) ビューに移動すると、関連するダウンストリーム デバイスを確認できます。

ゲートウェイに接続されているデバイスを示すスクリーンショット。

実際のダウンストリーム デバイスを接続する

クライアント アプリケーションを作成して Azure IoT Central アプリケーションに接続する」チュートリアルのサンプル コードでは、デバイスによって送信されるプロビジョニング ペイロードにデバイス テンプレートのモデル ID を含める方法が示されています。

ダウンストリーム デバイスを接続するときに、プロビジョニング ペイロードを変更して、ゲートウェイ デバイスの ID を含めることができます。 モデル ID により、IoT Central はデバイスを正しいダウンストリーム デバイス テンプレートに割り当てることができます。 ゲートウェイ ID により、IoT Central でダウンストリーム デバイスとそのゲートウェイの間の関係を確立できます。 この場合、デバイスによって送信されるプロビジョニング ペイロードは、次の JSON のようになります。

{
  "modelId": "dtmi:rigado:HoboMX100;2",
  "iotcGateway":{
    "iotcGatewayId": "gateway-device-001"
  }
}

ゲートウェイではダウンストリーム デバイスを登録し、プロビジョニングし、次のようにそのダウンストリーム デバイスをゲートウェイと関連付けることができます。

var crypto = require('crypto');


var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
var SymmetricKeySecurityClient = require('azure-iot-security-symmetric-key').SymmetricKeySecurityClient;
var ProvisioningDeviceClient = require('azure-iot-provisioning-device').ProvisioningDeviceClient;

var provisioningHost = "global.azure-devices-provisioning.net";
var idScope = "<The ID scope from your SAS group enrollment in IoT Central>";
var groupSymmetricKey = "<The primary key from the SAS group enrollment>";
var registrationId = "<The device ID for the downstream device you're creating>";
var modelId = "<The model you're downstream device should use>";
var gatewayId = "<The device ID of your gateway device>";

// Calculate the device key from the group enrollment key
function computeDerivedSymmetricKey(deviceId, masterKey) {
    return crypto.createHmac('SHA256', Buffer.from(masterKey, 'base64'))
        .update(deviceId, 'utf8')
        .digest('base64');
}

var symmetricKey = computeDerivedSymmetricKey(registrationId, groupSymmetricKey);

var provisioningSecurityClient = new SymmetricKeySecurityClient(registrationId, symmetricKey);

var provisioningClient = ProvisioningDeviceClient.create(provisioningHost, idScope, new ProvisioningTransport(), provisioningSecurityClient);

// Use the DPS payload to:
// - specify the device capability model to use.
// - associate the device with a gateway.
var provisioningPayload = {modelId: modelId, iotcGateway: { iotcGatewayId: gatewayId}}

provisioningClient.setProvisioningPayload(provisioningPayload);

provisioningClient.register(function(err, result) {
  if (err) {
    console.log("Error registering device: " + err);
  } else {
    console.log('The registration status is: ' + result.status)
   }
});

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

今後 IoT Central のクイックスタートやチュートリアルに取り組む予定がなければ、ここで使用した IoT Central アプリケーションは次の手順で削除してください。

  1. IoT Central アプリケーションで、[アプリケーション] > [管理]に移動します。
  2. [削除] を選択して操作を確定します。

次のステップ

次の学習内容は次のとおりです。