IoT Hub のデバイス ツインの理解と使用Understand and use device twins in IoT Hub

"デバイス ツイン" は、デバイスの状態に関する情報 (メタデータ、構成、状態など) を格納する JSON ドキュメントです。Device twins are JSON documents that store device state information including metadata, configurations, and conditions. Azure IoT Hub は、IoT Hub に接続する各デバイスにデバイス ツインを保持します。Azure IoT Hub maintains a device twin for each device that you connect to IoT Hub.

注意

この記事で説明されている機能は、Standard レベルの IoT Hub でのみ使用できます。The features described in this article are available only in the standard tier of IoT Hub. Basic および Standard レベルの IoT Hub の詳細については、適切な IoT Hub レベルの選択に関するページを参照してください。For more information about the basic and standard IoT Hub tiers, see Choose the right IoT Hub tier.

この記事では、次の内容について説明します。This article describes:

  • デバイス ツインの構造: "タグ"、"必要なプロパティ"、"報告されるプロパティ"。The structure of the device twin: tags, desired and reported properties.
  • デバイス ツインでデバイス アプリとバックエンドが実行できる操作。The operations that device apps and back ends can perform on device twins.

次の場合にデバイス ツインを使用します。Use device twins to:

  • デバイス固有のメタデータをクラウドに格納します。Store device-specific metadata in the cloud. 例: 自動販売機の設置場所。For example, the deployment location of a vending machine.

  • デバイス アプリで利用できる機能や状態などの現在の状態に関する情報を報告する。Report current state information such as available capabilities and conditions from your device app. たとえば、デバイスが携帯電話または WiFi を介して IoT ハブに接続されている場合。For example, a device is connected to your IoT hub over cellular or WiFi.

  • デバイス アプリとバックエンドの間で実行時間の長いワークフロー の状態を同期する。Synchronize the state of long-running workflows between device app and back-end app. たとえば、ソリューション バックエンドがインストールする新しいファームウェアのバージョンを指定し、デバイス アプリが更新プロセスのさまざまな段階を報告する場合。For example, when the solution back end specifies the new firmware version to install, and the device app reports the various stages of the update process.

  • デバイス メタデータ、構成、または状態を照会する。Query your device metadata, configuration, or state.

報告されるプロパティ、device-to-cloud メッセージ、ファイルのアップロードのどれを使用するべきかの指針については、「device-to-cloud 通信に関するガイダンス」を参照してください。Refer to Device-to-cloud communication guidance for guidance on using reported properties, device-to-cloud messages, or file upload.

必要なプロパティ、ダイレクト メソッド、cloud-to-device メッセージの使用に関する指針については、「cloud-to-device 通信に関するガイダンス」を参照してください。Refer to Cloud-to-device communication guidance for guidance on using desired properties, direct methods, or cloud-to-device messages.

デバイス ツインDevice twins

デバイス ツインには、デバイスに関連する次のような情報が格納されます。Device twins store device-related information that:

  • デバイスの状態と構成を同期するために使用するデバイスとバックエンド。Device and back ends can use to synchronize device conditions and configuration.

  • 実行時間の長い操作にクエリを行い、ターゲットを設定するために使用するソリューション バックエンド。The solution back end can use to query and target long-running operations.

デバイス ツインのライフサイクルは、対応するデバイス ID にリンクされます。The lifecycle of a device twin is linked to the corresponding device identity. IoT Hub でデバイス ID を作成または削除したときに、デバイス ツインは暗黙的に作成または削除されます。Device twins are implicitly created and deleted when a device identity is created or deleted in IoT Hub.

デバイス ツインは次の情報を含む JSON ドキュメントです。A device twin is a JSON document that includes:

  • タグTags. ソリューション バックエンドで読み書きできる JSON ドキュメントのセクションです。A section of the JSON document that the solution back end can read from and write to. タグは、デバイス アプリには表示されません。Tags are not visible to device apps.

  • 必要なプロパティDesired properties. デバイスの構成や状態を同期するために、報告されるプロパティと共に使用します。Used along with reported properties to synchronize device configuration or conditions. ソリューション バックエンドは必要なプロパティを設定でき、デバイス アプリはそれらを読み取れます。The solution back end can set desired properties, and the device app can read them. デバイス アプリでは、必要なプロパティに対する変更を知らせる通知を受け取ることもできます。The device app can also receive notifications of changes in the desired properties.

  • 報告されるプロパティReported properties. デバイスの構成や状態を同期するために、必要なプロパティと共に使用します。Used along with desired properties to synchronize device configuration or conditions. デバイス アプリは報告されるプロパティを設定でき、ソリューション バックエンドはそれらを読み取りクエリを実行できます。The device app can set reported properties, and the solution back end can read and query them.

  • デバイス ID のプロパティDevice identity properties. デバイス ツインの JSON ドキュメントのルートには、ID レジストリに格納される対応するデバイス ID の読み取り専用プロパティが含まれます。The root of the device twin JSON document contains the read-only properties from the corresponding device identity stored in the identity registry.

デバイス ツインのプロパティのスナップショット

次の例は、デバイス ツインの JSON ドキュメントを示しています。The following example shows a device twin JSON document:

{
    "deviceId": "devA",
    "etag": "AAAAAAAAAAc=", 
    "status": "enabled",
    "statusReason": "provisioned",
    "statusUpdateTime": "0001-01-01T00:00:00",
    "connectionState": "connected",
    "lastActivityTime": "2015-02-30T16:24:48.789Z",
    "cloudToDeviceMessageCount": 0, 
    "authenticationType": "sas",
    "x509Thumbprint": {     
        "primaryThumbprint": null, 
        "secondaryThumbprint": null 
    }, 
    "version": 2, 
    "tags": {
        "$etag": "123",
        "deploymentLocation": {
            "building": "43",
            "floor": "1"
        }
    },
    "properties": {
        "desired": {
            "telemetryConfig": {
                "sendFrequency": "5m"
            },
            "$metadata" : {...},
            "$version": 1
        },
        "reported": {
            "telemetryConfig": {
                "sendFrequency": "5m",
                "status": "success"
            },
            "batteryLevel": 55,
            "$metadata" : {...},
            "$version": 4
        }
    }
}

ルート オブジェクトには、デバイス ID プロパティと、tags のコンテナー オブジェクトと、reported プロパティと desired プロパティの両方があります。In the root object are the device identity properties, and container objects for tags and both reported and desired properties. properties コンテナーには、「デバイス ツインのメタデータ」と「オプティミスティック コンカレンシー」セクションで説明しているいくつかの読み取り専用の要素 ($metadata$etag$version) が含まれています。The properties container contains some read-only elements ($metadata, $etag, and $version) described in the Device twin metadata and Optimistic concurrency sections.

報告されるプロパティの例Reported property example

前の例では、デバイス アプリによって報告される batteryLevel プロパティがデバイス ツインに含まれています。In the previous example, the device twin contains a batteryLevel property that is reported by the device app. このプロパティでは、最後に報告されたバッテリ レベルに基づいて、デバイス上でクエリや操作を実行できます。This property makes it possible to query and operate on devices based on the last reported battery level. 別の例では、デバイス アプリにデバイスの報告機能や接続オプションが備わっています。Other examples include the device app reporting device capabilities or connectivity options.

注意

ソリューション バックエンドにおける関心の対象が、最後に確認されているプロパティの値であるような状況では、報告されたプロパティを使用した方が簡単です。Reported properties simplify scenarios where the solution back end is interested in the last known value of a property. ソリューション バックエンドでタイムスタンプが付けられた連続するイベントの形式でデバイス テレメトリ (時系列など) を処理する必要がある場合は、device-to-cloud メッセージを使用します。Use device-to-cloud messages if the solution back end needs to process device telemetry in the form of sequences of timestamped events, such as time series.

必要なプロパティの例Desired property example

上記の例では、ソリューション バックエンドとデバイス アプリが telemetryConfig デバイス ツインの必要なプロパティと報告されたプロパティを使用して、デバイスのテレメトリ構成を同期しています。In the previous example, the telemetryConfig device twin desired and reported properties are used by the solution back end and the device app to synchronize the telemetry configuration for this device. 例:For example:

  1. ソリューション バックエンドでは、必要なプロパティが必要な構成値で設定されます。The solution back end sets the desired property with the desired configuration value. 以下は、ドキュメント内の必要なプロパティ セットを使用した部分です。Here is the portion of the document with the desired property set:

    "desired": {
        "telemetryConfig": {
            "sendFrequency": "5m"
        },
        ...
    },
    
  2. 接続されている場合や、最初に再接続されたときに、変更があるとデバイス アプリに直ちに通知されます。The device app is notified of the change immediately if connected, or at the first reconnect. その後、デバイス アプリが更新された構成 (またはエラー条件。status プロパティを使用) を報告します。The device app then reports the updated configuration (or an error condition using the status property). 報告されるプロパティの部分を次に示します。Here is the portion of the reported properties:

    "reported": {
        "telemetryConfig": {
            "sendFrequency": "5m",
            "status": "success"
        }
        ...
    }
    
  3. ソリューション バックエンドは、デバイス ツインにクエリを実行することによって、多数のデバイス間で行われる構成操作の結果を追跡できます。The solution back end can track the results of the configuration operation across many devices by querying device twins.

注意

上記のスニペットは、デバイス構成とその状態をエンコードするための例の 1 つであり、読みやすいように最適化されています。The preceding snippets are examples, optimized for readability, of one way to encode a device configuration and its status. IoT Hub は、デバイス ツインの必要なプロパティや報告されたプロパティに対して、デバイス ツイン用の特定のスキーマを強制しません。IoT Hub does not impose a specific schema for the device twin desired and reported properties in the device twins.

ファームウェアの更新など実行時間の長い操作は、デバイス ツインを使って同期することができます。You can use twins to synchronize long-running operations such as firmware updates. デバイス間の実行時間の長い操作を同期、追跡するためのプロパティの使用方法については、「必要なプロパティを使用してデバイスを構成する」を参照してください。For more information on how to use properties to synchronize and track a long running operation across devices, see Use desired properties to configure devices.

バック エンドの操作Back-end operations

ソリューション バックエンドは、HTTPS を介して公開される次のアトミック操作を使用して、デバイス ツインを操作します。The solution back end operates on the device twin using the following atomic operations, exposed through HTTPS:

  • デバイス ツインを ID で取得するRetrieve device twin by ID. この操作は、タグ、必要なシステム プロパティ、報告されるシステム プロパティを含むデバイス ツインのドキュメントを返します。This operation returns the device twin document, including tags and desired and reported system properties.

  • デバイス ツインを部分的に更新するPartially update device twin. この操作では、ソリューション バックエンドがデバイス ツインのタグまたは必要なプロパティを部分的に更新できます。This operation enables the solution back end to partially update the tags or desired properties in a device twin. 部分的な更新は JSON ドキュメントとして表され、プロパティが追加または更新されます。The partial update is expressed as a JSON document that adds or updates any property. null に設定されたプロパティが削除されます。Properties set to null are removed. 次の例では、{"newProperty": "newValue"} の値を持つ新しい必要なプロパティが作成され、existingProperty の既存の値が "otherNewValue" で上書きされ、otherOldProperty が削除されます。The following example creates a new desired property with value {"newProperty": "newValue"}, overwrites the existing value of existingProperty with "otherNewValue", and removes otherOldProperty. それ以外、既にある必要なプロパティまたはタグは変更されません。No other changes are made to existing desired properties or tags:

    {
         "properties": {
             "desired": {
                 "newProperty": {
                     "nestedProperty": "newValue"
                 },
                 "existingProperty": "otherNewValue",
                 "otherOldProperty": null
             }
         }
    }
    
  • 必要なプロパティの置換Replace desired properties. この操作では、ソリューション バックエンドによって既存の必要なプロパティをすべて完全に上書きし、properties/desired の新しい JSON ドキュメントに置き換えられます。This operation enables the solution back end to completely overwrite all existing desired properties and substitute a new JSON document for properties/desired.

  • タグの置換Replace tags. この操作では、ソリューション バックエンドによって既存のタグをすべて完全に上書きし、tags の新しい JSON ドキュメントに置き換えられます。This operation enables the solution back end to completely overwrite all existing tags and substitute a new JSON document for tags.

  • ツイン通知の受信Receive twin notifications. この操作は、ソリューション バックエンドでツインが変更されたときに通知できるようにします。This operation allows the solution back end to be notified when the twin is modified. そのためには、IoT ソリューションでルートを作成し、データ ソースの値を twinChangeEvents に設定する必要があります。To do so, your IoT solution needs to create a route and to set the Data Source equal to twinChangeEvents. 既定では、このようなルートは事前に存在しません。このため、ツイン通知は送信されません。By default, no such routes pre-exist, so no twin notifications are sent. 変化率が高すぎる場合、または内部エラーなどの理由のために、IoT Hub はすべての変更を含む 1 つの通知のみを送信する場合があります。If the rate of change is too high, or for other reasons such as internal failures, the IoT Hub might send only one notification that contains all changes. そのため、アプリケーションに信頼性の高い監査とすべての中間状態のログ記録が必要な場合は、device-to-cloud メッセージを使用する必要があります。Therefore, if your application needs reliable auditing and logging of all intermediate states, you should use device-to-cloud messages. ツイン通知メッセージには、プロパティおよび本文が含まれます。The twin notification message includes properties and body.

    • PropertiesProperties

      NameName Value
      $content-type$content-type application/jsonapplication/json
      $iothub-enqueuedtime$iothub-enqueuedtime 通知が送信された時刻Time when the notification was sent
      $iothub-message-source$iothub-message-source twinChangeEventstwinChangeEvents
      $content-encoding$content-encoding utf-8utf-8
      deviceIddeviceId デバイスの IDID of the device
      hubNamehubName IoT Hub の名前Name of IoT Hub
      operationTimestampoperationTimestamp 操作の ISO8601 タイムスタンプISO8601 timestamp of operation
      iothub-message-schemaiothub-message-schema deviceLifecycleNotificationdeviceLifecycleNotification
      opTypeopType "replaceTwin" または "updateTwin""replaceTwin" or "updateTwin"

      メッセージのシステム プロパティには、$ シンボルが付きます。Message system properties are prefixed with the $ symbol.

    • 本文Body

      このセクションには、すべてのツイン変更が JSON 形式で含まれています。This section includes all the twin changes in a JSON format. 修正プログラムと同じ形式を使用しますが、すべてのツイン セクション (タグ、properties.reported、properties.desired) を含めることができ、"$metadata" 要素を含みます。It uses the same format as a patch, with the difference that it can contain all twin sections: tags, properties.reported, properties.desired, and that it contains the “$metadata” elements. たとえば、次のように入力します。For example,

      {
        "properties": {
            "desired": {
                "$metadata": {
                    "$lastUpdated": "2016-02-30T16:24:48.789Z"
                },
                "$version": 1
            },
            "reported": {
                "$metadata": {
                    "$lastUpdated": "2016-02-30T16:24:48.789Z"
                },
                "$version": 1
            }
        }
      }
      

上述の操作はすべてオプティミスティック コンカレンシーをサポートしており、「IoT Hub へのアクセスの制御」で定義されているとおり、ServiceConnect アクセス許可を必要とします。All the preceding operations support Optimistic concurrency and require the ServiceConnect permission, as defined in Control access to IoT Hub.

これらの操作の他に、ソリューション バックエンドでは以下を実行できます。In addition to these operations, the solution back end can:

  • SQL に似た IoT Hub クエリ言語を使用して、デバイス ツインを照会します。Query the device twins using the SQL-like IoT Hub query language.

  • ジョブを使用して、大量のデバイス ツインで操作を実行します。Perform operations on large sets of device twins using jobs.

デバイスの操作Device operations

デバイス アプリは、次のアトミック操作を使用して、デバイス ツインを操作します。The device app operates on the device twin using the following atomic operations:

  • デバイス ツインを取得するRetrieve device twin. この操作は、タグ、必要なシステム プロパティ、報告されるシステム プロパティを含む、現在接続されているデバイスのデバイス ツインのドキュメントを返します。This operation returns the device twin document (including tags and desired and reported system properties) for the currently connected device.

  • 報告されるプロパティの部分的な更新Partially update reported properties. この操作では、現在接続されているデバイスの報告されるプロパティを部分的に更新できます。This operation enables the partial update of the reported properties of the currently connected device. この操作には、必要なプロパティを部分的に更新する際にソリューション バックエンドで使用されるものと同じ JSON 更新フォーマットが使用されます。This operation uses the same JSON update format that the solution back end uses for a partial update of desired properties.

  • 必要なプロパティの監視Observe desired properties. 現在接続されているデバイスでは、必要なプロパティの更新が行われたときに通知をするように設定できます。The currently connected device can choose to be notified of updates to the desired properties when they happen. デバイスは、ソリューション バックエンドによって実行される更新 (部分的または完全な置換) と同じフォームを受け取ります。The device receives the same form of update (partial or full replacement) executed by the solution back end.

IoT Hub へのアクセスの制御」に定義されているように、上述の操作にはすべて DeviceConnect アクセス許可が必要です。All the preceding operations require the DeviceConnect permission, as defined in Control Access to IoT Hub.

Azure IoT device SDK を使用すると、多数の言語とプラットフォームで上述の操作を簡単に使用できます。The Azure IoT device SDKs make it easy to use the preceding operations from many languages and platforms. 必要なプロパティを同期させるための IoT Hub プリミティブの詳細については、「デバイスの再接続フロー」を参照してください。For more information on the details of IoT Hub primitives for desired properties synchronization, see Device reconnection flow.

タグやプロパティの形式Tags and properties format

タグ、必要なプロパティ、報告されるプロパティは JSON オブジェクトであり、次のような制限があります。Tags, desired properties, and reported properties are JSON objects with the following restrictions:

  • JSON オブジェクトのすべてのキーは、大文字小文字が区別される 64 バイトの UTF-8 UNICODE 文字列です。All keys in JSON objects are case-sensitive 64 bytes UTF-8 UNICODE strings. UNICODE 制御文字列 (セグメント C0 と C1)、.$、SP は使用できません。Allowed characters exclude UNICODE control characters (segments C0 and C1), and ., $, and SP.

  • JSON オブジェクトのすべての値には、ブール値、数値、文字列、オブジェクトの JSON 型を使用できます。All values in JSON objects can be of the following JSON types: boolean, number, string, object. 配列は使用できません。Arrays are not allowed. 整数の最大値は 4503599627370495 であり、整数の最小値は -4503599627370496 です。The maximum value for integers is 4503599627370495 and the minimum value for integers is -4503599627370496.

  • タグ、必要なプロパティ、および報告されるプロパティのすべての JSON オブジェクトは、深さ 5 まで許容されます。All JSON objects in tags, desired, and reported properties can have a maximum depth of 5. たとえば、次のオブジェクトは有効です。For instance, the following object is valid:

    {
         ...
         "tags": {
             "one": {
                 "two": {
                     "three": {
                         "four": {
                             "five": {
                                 "property": "value"
                             }
                         }
                     }
                 }
             }
         },
         ...
    }
    
  • すべての文字列値の長さは、最大で 512 バイトまで許容されます。All string values can be at most 512 bytes in length.

デバイス ツインのサイズDevice twin size

読み取り専用の要素を除き、IoT Hub では tagsproperties/desiredproperties/reported の各合計値に対して強制的に 8 KB のサイズ制限が適用されます。IoT Hub enforces an 8KB size limitation on each of the respective total values of tags, properties/desired, and properties/reported, excluding read-only elements.

このサイズは、UNICODE 制御文字 (セグメント C0 と C1) を除くすべての文字と、文字列定数以外で使用されるスペースをカウントして計算されます。The size is computed by counting all characters, excluding UNICODE control characters (segments C0 and C1) and spaces that are outside of string constants.

ドキュメントのサイズが上述の制限を超えると、IoT Hub はすべての操作を拒否して、エラーを返します。IoT Hub rejects with an error all operations that would increase the size of those documents above the limit.

デバイス ツインのメタデータDevice twin metadata

IoT Hub は、各 JSON オブジェクトが最後に更新されたときのタイムスタンプを、デバイス ツインの必要なプロパティと報告されるプロパティで保持します。IoT Hub maintains the timestamp of the last update for each JSON object in device twin desired and reported properties. タイムスタンプは UTC であり、ISO8601 形式の YYYY-MM-DDTHH:MM:SS.mmmZ でエンコードされます。The timestamps are in UTC and encoded in the ISO8601 format YYYY-MM-DDTHH:MM:SS.mmmZ.

例:For example:

{
    ...
    "properties": {
        "desired": {
            "telemetryConfig": {
                "sendFrequency": "5m"
            },
            "$metadata": {
                "telemetryConfig": {
                    "sendFrequency": {
                        "$lastUpdated": "2016-03-30T16:24:48.789Z"
                    },
                    "$lastUpdated": "2016-03-30T16:24:48.789Z"
                },
                "$lastUpdated": "2016-03-30T16:24:48.789Z"
            },
            "$version": 23
        },
        "reported": {
            "telemetryConfig": {
                "sendFrequency": "5m",
                "status": "success"
            },
            "batteryLevel": "55%",
            "$metadata": {
                "telemetryConfig": {
                    "sendFrequency": "5m",
                    "status": {
                        "$lastUpdated": "2016-03-31T16:35:48.789Z"
                    },
                    "$lastUpdated": "2016-03-31T16:35:48.789Z"
                },
                "batteryLevel": {
                    "$lastUpdated": "2016-04-01T16:35:48.789Z"
                },
                "$lastUpdated": "2016-04-01T16:24:48.789Z"
            },
            "$version": 123
        }
    }
    ...
}

この情報は、オブジェクトのキーによって削除される更新を保持するために、JSON の構造のリーフだけでなくすべてのレベルで保持されます。This information is kept at every level (not just the leaves of the JSON structure) to preserve updates that remove object keys.

オプティミスティック コンカレンシーOptimistic concurrency

タグ、必要なプロパティ、報告されたプロパティはすべて、オプティミスティック コンカレンシーをサポートします。Tags, desired, and reported properties all support optimistic concurrency. タグは、RFC7232 に従って ETag を持ちます。これは、タグの JSON 表現を表します。Tags have an ETag, as per RFC7232, that represents the tag's JSON representation. ETag を使用すると、条件付き更新操作をソリューション バックエンドから実行し、一貫性を保持できます。You can use ETags in conditional update operations from the solution back end to ensure consistency.

デバイス ツインの必要なプロパティと報告されるプロパティには ETag はありませんが、$version の値によって確実に増分されます。Device twin desired and reported properties do not have ETags, but have a $version value that is guaranteed to be incremental. ETag と同様、更新側がバージョンを使用することで更新プログラムの一貫性を確保することができます。Similarly to an ETag, the version can be used by the updating party to enforce consistency of updates. たとえば、報告されたプロパティ用のデバイス アプリ、または目的のプロパティのソリューション バックエンドです。For example, a device app for a reported property or the solution back end for a desired property.

バージョンは、監視エージェント (必要なプロパティを監視するデバイス アプリなど) が取得操作に関する結果と更新の通知の間の競合を調整する場合に便利です。Versions are also useful when an observing agent (such as the device app observing the desired properties) must reconcile races between the result of a retrieve operation and an update notification. 詳細については、「デバイスの再接続フロー」を参照してください。The Device reconnection flow section provides more information.

デバイスの再接続フローDevice reconnection flow

IoT Hub では、必要なプロパティの更新通知は接続されていないデバイス用に保持されません。IoT Hub does not preserve desired properties update notifications for disconnected devices. つまり、接続しているデバイスは必要なプロパティの完全なドキュメントを取得し、さらに更新通知にサブスクライブする必要があります。It follows that a device that is connecting must retrieve the full desired properties document, in addition to subscribing for update notifications. 更新通知と完全取得で競合が発生する場合、次のフローを実行する必要があります。Given the possibility of races between update notifications and full retrieval, the following flow must be ensured:

  1. デバイス アプリを IoT hub に接続する。Device app connects to an IoT hub.
  2. デバイス アプリを、必要なプロパティの更新通知にサブスクライブする。Device app subscribes for desired properties update notifications.
  3. デバイス アプリで、必要なプロパティの完全なドキュメントを取得する。Device app retrieves the full document for desired properties.

$version が取得された完全なドキュメントのバージョン以下の場合、デバイス アプリではすべての通知を無視できます。The device app can ignore all notifications with $version less or equal than the version of the full retrieved document. IoT Hub ではバージョンが常に増分されるため、このようなアプローチが可能になります。This approach is possible because IoT Hub guarantees that versions always increment.

注意

このロジックは Azure IoT device SDK に既に実装されています。This logic is already implemented in the Azure IoT device SDKs. 上述の説明は、デバイス アプリが Azure IoT device SDK を使用できず、MQTT インターフェイスを直接プログラミングしなければならない場合にのみ適用されます。This description is useful only if the device app cannot use any of Azure IoT device SDKs and must program the MQTT interface directly.

参考資料Additional reference material

IoT Hub 開発者ガイド内の他の参照トピックは次のとおりです。Other reference topics in the IoT Hub developer guide include:

次の手順Next steps

デバイス ツインの詳細を理解したら、次の IoT Hub 開発者ガイド トピックも参考にしてください。Now you have learned about device twins, you may be interested in the following IoT Hub developer guide topics:

この記事で説明した概念を試すには、次の IoT Hub のチュートリアルをご覧ください。To try out some of the concepts described in this article, see the following IoT Hub tutorials: