Azure IoT Hub の自動デバイス管理では、反復的で複雑なタスクを自動化することで、多数のデバイスを管理するプロセスが効率化されます。 デバイスとモジュールの自動構成を使用すると、そのプロパティに基づいてデバイスをターゲットにしたり、必要な設定を指定したり、デバイスが定義された条件を満たすように IoT Hub に更新プログラムを適用したりできます。 この方法を使用すると、構成の状態を監視し、競合を解決し、変更を段階的にロールアウトして、制御とコンプライアンスを強化できます。
注
この記事で説明されている機能は、Standard レベルの IoT Hub でのみ使用できます。 Basic および Standard/Free IoT Hub レベルの詳細については、「ソリューションに適した IoT Hub レベルとサイズを選択する」を参照してください。
自動デバイス管理の概要
デバイスの自動管理は、デバイス ツインまたはモジュール ツインのグループに必要なプロパティを適用し、報告されたプロパティを使用して結果を要約することによって動作します。 このプロセスでは、 Configuration と呼ばれる特殊な JSON ドキュメントを使用します。これは、次の 3 つの主要なコンポーネントで構成されます。
ターゲット条件は、更新するデバイス ツインまたはモジュール ツインのスコープを定義します。 ターゲット条件は、ツイン タグまたは報告されたプロパティに対するクエリとして指定されます。
ターゲット コンテンツは、対象となるデバイス ツインまたはモジュール ツインで追加または更新する必要があるプロパティを定義します。 コンテンツには、変更する必要があるプロパティのセクションへのパスが含まれています。
メトリック コンポーネントは、成功、進行中、エラーなどの構成状態の集計カウントを提供します。 ツインの報告されたプロパティに対するクエリを使用してカスタム メトリックを定義できます。一方、システム メトリックでは、対象となるツインの数や正常に更新されたツインの数など、更新の状態が自動的に追跡されます。
自動構成は、構成が作成された直後に初めて実行され、次に 5 分間隔で実行されます。 メトリック クエリは、自動構成が実行されるたびに実行されます。 Standard レベルの IoT ハブでは、最大 100 個の自動構成がサポートされています。Free レベルの IoT ハブで 10 個。 調整の制限も適用されます。 詳細については、「クォータとスロットリング」を参照してください。
[前提条件]
有効な Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure サブスクリプション内の IoT ハブ。 ハブがまだない場合は、「IoT ハブの作成」の手順に従って作成できます。
ツインを実装する
自動デバイス構成では、クラウドとデバイスの間で状態を同期するためにデバイス ツインを使用する必要があります。 詳細については、「IoT Hub のデバイス ツインの理解と使用」を参照してください。
自動モジュール構成では、クラウドとモジュールの間で状態を同期するためにモジュール ツインを使用する必要があります。 詳細については、「 IoT Hub のモジュール ツインを理解して使用する」を参照してください。
タグを使用してツインをターゲットにする
構成を作成する前に、影響を与えるデバイスまたはモジュールを指定する必要があります。 Azure IoT Hub は、デバイス ツインでタグを使用してデバイスを識別し、モジュール ツインのタグを使用してモジュールを識別します。 各デバイスまたはモジュールは複数のタグを持つ可能性があり、ソリューションにとって意味のある任意の方法で定義できます。 たとえば、異なる場所のデバイスを管理する場合は、デバイス ツインに次のタグを追加します。
"tags": {
"location": {
"state": "Washington",
"city": "Tacoma"
}
},
構成を作成する
Standard レベルの IoT ハブには、最大 100 個の自動構成を作成できます。Free レベルの IoT ハブで 10 個。 詳細については、「クォータと調整」を参照してください。
Azure portal で IoT Hub に移動します。
左側のナビゲーション ウィンドウで [構成とデプロイ] を選択します。
[ 追加] を選択し、ドロップダウン リストから [デバイス ツインの構成 ] または [ モジュール ツインの構成 ] を選択します。
構成を作成するには、5 つの手順があります。 次のセクションでは、それぞれについて説明します。
名前とラベル
- 構成の一意の名前を入力します。 名前は最大 128 文字で、小文字と次の特殊文字を含めることができます:
-+%_*!'。 スペースは使用できません。 - 構成を整理して説明するラベルを追加します。 ラベルは、
HostPlatform, LinuxやVersion, 3.0.1などのキーと値のペアです。 - [次へ] を選択して続行します。
ツイン設定
各設定に 2 つの入力を指定して、ターゲット デバイス ツインまたはモジュール ツインの必要なプロパティのコンテンツを設定します。 最初に、ツイン パスを指定します。このパスは、更新するツインの必要なプロパティ内の JSON セクションを指します。 次に、その場所に挿入する JSON コンテンツを入力します。
たとえば、ツイン パスを properties.desired.chiller-water に設定し、次の JSON コンテンツを指定できます。
{
"temperature": 66,
"pressure": 28
}
また、ツイン パス全体を指定し、角かっこを使用せずに値を指定することで、個々の設定を設定することもできます。 たとえば、ツイン パス properties.desired.chiller-water.temperatureを使用して、コンテンツを 66 に設定します。 次に、圧力プロパティの新しいツイン設定を作成します。
2 つ以上の構成が同じツイン パスを対象とする場合、最も優先度の高い構成のコンテンツが適用されます (優先順位は手順 4 で定義されています)。
既存のプロパティを削除する場合は、 nullするプロパティ値を指定します。
[ デバイス ツイン設定の追加 ] または [モジュール ツイン設定の追加] を選択して 、追加の設定を追加できます。
ターゲット デバイスまたはモジュール
ツインの tags プロパティを使用して、この構成を受け取る必要がある特定のデバイスまたはモジュールをターゲットにします。 ツインから報告されたプロパティをターゲットに指定することもできます。
自動デバイス構成ではデバイス ツイン タグのみをターゲットにすることができ、自動モジュール構成ではモジュール ツイン タグのみをターゲットにすることができます。
複数の構成が同じデバイスまたはモジュールを対象とすることがあるため、各構成には優先順位番号が必要です。 競合が発生した場合は、優先度が最も高い構成が優先されます。
構成 の優先順位に正の整数を入力します。 最も高い数値が最も高い優先順位と見なされます。 2 つの構成の優先順位が同じ場合は、最後に作成した構成が優先されます。
ターゲット条件を入力して、この構成の対象となるデバイスまたはモジュールを決定します。 この条件は、ツインタグまたはツインレポートされたプロパティに基づいており、式のフォーマットと一致する必要があります。
デバイスの自動構成では、ターゲットにタグまたは報告されるプロパティのみを指定できます。 たとえば、
tags.environment='test'またはproperties.reported.chillerProperties.model='4000x'です。 すべてのデバイスを対象とする*を指定できます。モジュールの自動構成の場合は、クエリを使用して、IoT ハブに登録されているモジュールのタグまたは報告されたプロパティを指定します。 たとえば、
from devices.modules where tags.environment='test'またはfrom devices.modules where properties.reported.chillerProperties.model='4000x'です。 ワイルドカードを使用してすべてのモジュールを対象にすることはできません。
Metrics
メトリックは、構成コンテンツを適用した後にデバイスまたはモジュールが報告する可能性があるさまざまな状態の集計カウントを提供します。 たとえば、保留中の設定変更のメトリック、エラーのメトリック、設定の変更を成功するためのメトリックを作成できます。
各構成には、最大 5 つのカスタム メトリックを含めることができます。
メトリック名の名前を入力します。
メトリック条件のクエリを入力します。 このクエリは、デバイス ツインの報告されたプロパティに基づいています。 メトリックは、クエリによって返される行の数を表します。
例えば次が挙げられます。
SELECT deviceId FROM devices WHERE properties.reported.chillerWaterSettings.status='pending'構成が適用された句を含めることができます。次に例を示します。
/* Include the double brackets. */ SELECT deviceId FROM devices WHERE configurations.[[yourconfigname]].status='Applied'構成済みのモジュールに関するレポートを作成するメトリックを作成する場合は、
moduleIdからdevices.modulesを選択します。 例えば次が挙げられます。SELECT deviceId, moduleId FROM devices.modules WHERE properties.reported.lastDesiredStatus.code = 200
構成の確認
構成情報を確認し、[ 送信] を選択します。
構成の監視
構成の詳細を表示し、それを実行しているデバイスを監視するには、次の手順を使用します。
Azure portal で IoT Hub に移動します。
[デバイス管理 ] で [構成] を 選択します。
構成一覧を調べます。 構成ごとに、次の詳細を表示できます。
ID - 構成の名前。
ターゲット条件 - 対象となるデバイスまたはモジュールを定義するために使用されるクエリ。
Priority - 構成に割り当てられた優先度番号。
作成時刻 - 構成が作成されたときのタイムスタンプ。 このタイムスタンプは、2つの構成の優先度が同じ場合に、競合を解消するために使用されます。
システム メトリック - IoT Hub によって計算され、開発者がカスタマイズできないメトリック。 Targeted は、ターゲット条件に一致するデバイス ツインの数を指定します。 適用では、構成によって変更されたデバイス ツインの数を指定しました。これは、別の優先度の高い構成でも変更が行われた場合に部分的な変更を含めることができます。
カスタム メトリック - ツインの報告されたプロパティに対するクエリとして開発者によって指定されたメトリック。 構成ごとに最大 5 つのカスタム メトリックを定義できます。
監視する構成を選択します。
構成の詳細を調べます。 タブを使用すると、構成を受け取ったデバイスに関する特定の詳細を表示できます。
ターゲット デバイス または ターゲット モジュール - ターゲット 条件に一致するデバイスまたはモジュール。
メトリック - システム メトリックとカスタム メトリックの一覧。 ドロップダウンでメトリックを選択し、[デバイスの表示] または [モジュールの表示] を選択すると、メトリックごとにカウントされる デバイス またはモジュールの一覧を 表示できます。
ラベル - 構成を記述するために使用されるキーと値のペア。 ラベルは機能に影響しません。
デバイス ツインの設定 または モジュール ツインの設定 - 構成によって設定されるツイン設定 (存在する場合)。
構成を変更する
構成を変更すると、その変更は対象となるすべてのデバイスまたはモジュールに直ちにレプリケートされます。
ターゲット条件を更新すると、次の更新が行われます。
ツインが古いターゲット条件を満たしていないが、新しいターゲット条件を満たしていて、この構成がそのツインの最も高い優先順位である場合、この構成が適用されます。
現在この構成を実行しているツインがターゲット条件を満たさなくなった場合、構成の設定は削除され、ツインは次に優先度の高い構成によって変更されます。
現在この構成を実行しているツインがターゲット条件を満たさなくなり、他の構成のターゲット条件を満たしていない場合、構成の設定は削除され、ツインに対するその他の変更は行われません。
構成を変更するには、次の手順を使用します。
- Azure portal で IoT Hub に移動します。
- [デバイス管理 ] で [構成と展開] を選択します。
- 変更する構成を選択します。
- 優先度、メトリック、ターゲット条件、ラベルの各フィールドを更新できます。
- 保存 を選択します。
- 構成の監視の手順に従って、変更のロールアウトを確認します。
構成を削除する
構成を削除すると、すべてのデバイス ツインが次に優先度の高い構成を使用します。 デバイス ツインが他の構成のターゲット条件を満たしていない場合、他の設定は適用されません。
- Azure portal で IoT Hub に移動します。
- [デバイス管理 ] で [構成と展開] を選択します。
- チェックボックスを使用して、削除する構成を選択します。
- を選択して、を削除します。
- 確認を求めるメッセージが表示されます。
[前提条件]
有効な Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure サブスクリプション内の IoT ハブ。 ハブがまだない場合は、「IoT ハブの作成」の手順に従って作成できます。
ご使用の環境内の Azure CLI。 少なくとも、Azure CLI のバージョンは 2.0.70 以降である必要があります。
az –-versionを使用して検証します。 このバージョンでは、az extension コマンドがサポートされ、Knack コマンド フレームワークが導入されています。
注
この記事では、azure-iot と呼ばれる、Azure IoT 拡張機能の最新バージョンを使用します。 レガシ バージョンは、 azure-cli-iot-extと呼ばれます。 インストールするバージョンは、一度に 1 つのみとしてください。 コマンド az extension list を使用すると、現在インストールされている拡張機能を確認できます。
拡張機能の従来のバージョンを削除するには、az extension remove --name azure-cli-iot-ext を使用します。
拡張機能の新しいバージョンを追加するには、az extension add --name azure-iot を使用します。
現在インストールされている拡張機能を確認するには、 az extension listを使用します。
ツインを実装する
自動デバイス構成では、クラウドとデバイスの間で状態を同期するためにデバイス ツインを使用する必要があります。 詳細については、「IoT Hub のデバイス ツインの理解と使用」を参照してください。
自動モジュール構成では、クラウドとモジュールの間で状態を同期するためにモジュール ツインを使用する必要があります。 詳細については、「 IoT Hub のモジュール ツインを理解して使用する」を参照してください。
タグを使用してツインをターゲットにする
構成を作成する前に、影響を与えるデバイスまたはモジュールを指定する必要があります。 Azure IoT Hub は、デバイスを識別し、デバイス ツインでタグを使用し、モジュール ツインのタグを使用してモジュールを識別します。 各デバイスまたはモジュールは複数のタグを持つ可能性があり、ソリューションにとって意味のある任意の方法で定義できます。 たとえば、異なる場所のデバイスを管理する場合は、デバイス ツインに次のタグを追加します。
"tags": {
"location": {
"state": "Washington",
"city": "Tacoma"
}
},
ターゲットのコンテンツとメトリックを定義する
ターゲット コンテンツとメトリック クエリは、測定するデバイス ツインまたはモジュール ツインの必要なプロパティと報告されるプロパティを記述する JSON ドキュメントとして指定されます。 Azure CLI を使用して自動構成を作成するには、ターゲットコンテンツとメトリックを .txt ファイルとしてローカルに保存します。 コマンドを実行してデバイスに構成を適用する場合は、後のセクションでファイル パスを使用します。
自動デバイス構成の基本的なターゲット コンテンツ サンプルを次に示します。
{
"content": {
"deviceContent": {
"properties.desired.chillerWaterSettings": {
"temperature": 38,
"pressure": 78
}
}
}
}
モジュールの自動構成も同様に動作しますが、moduleContentではなくdeviceContentを対象とします。
{
"content": {
"moduleContent": {
"properties.desired.chillerWaterSettings": {
"temperature": 38,
"pressure": 78
}
}
}
}
メトリック クエリの例を次に示します。
{
"queries": {
"Compliant": "select deviceId from devices where configurations.[[chillerdevicesettingswashington]].status = 'Applied' AND properties.reported.chillerWaterSettings.status='current'",
"Error": "select deviceId from devices where configurations.[[chillerdevicesettingswashington]].status = 'Applied' AND properties.reported.chillerWaterSettings.status='error'",
"Pending": "select deviceId from devices where configurations.[[chillerdevicesettingswashington]].status = 'Applied' AND properties.reported.chillerWaterSettings.status='pending'"
}
}
モジュールのメトリック クエリもデバイスのクエリと似ていますが、moduleIdからdevices.modulesを選択します。 例えば次が挙げられます。
{
"queries": {
"Compliant": "select deviceId, moduleId from devices.module where configurations.[[chillermodulesettingswashington]].status = 'Applied' AND properties.reported.chillerWaterSettings.status='current'"
}
}
構成を作成する
Standard レベルの IoT ハブには、最大 100 個の自動構成を作成できます。Free レベルの IoT ハブで 10 個。 詳細については、「クォータと調整」を参照してください。
ターゲット デバイスを構成するには、ターゲット のコンテンツとメトリックで構成される構成を作成します。 次のコマンドを使用して構成を作成します。
az iot hub configuration create --config-id [configuration id] \
--labels [labels] --content [file path] --hub-name [hub name] \
--target-condition [target query] --priority [int] \
--metrics [metric queries]
-- config-id - IoT ハブで作成された構成の名前。 構成に、最大 128 文字の一意の名前を付けます。 小文字と次の特殊文字を使用できます:
-+%_*!'。 スペースは使用できません。-- labels - 構成の追跡に役立つラベルを追加します。 ラベルは、デプロイを説明する名前と値のペアです。 たとえば、
HostPlatform, LinuxやVersion, 3.0.1-- content - ツインの必要なプロパティとして設定するターゲット コンテンツへのインライン JSON またはファイル パス。
-- hub-name - 構成が作成される IoT ハブの名前。 ハブは現在のサブスクリプションに存在する必要があります。 コマンドを使用して目的のサブスクリプションに切り替える
az account set -s [subscription name]-- target-condition - ターゲット条件を入力して、この構成で対象となるデバイスまたはモジュールを決定します。 デバイスの自動構成の場合、条件はデバイス ツイン タグまたはデバイス ツインの必要なプロパティに基づいており、式の形式と一致する必要があります。 たとえば、
tags.environment='test'またはproperties.desired.devicemodel='4000x'です。 モジュールの自動構成の場合、条件はモジュール ツイン タグまたはモジュール ツインの必要なプロパティに基づいています。 たとえば、from devices.modules where tags.environment='test'またはfrom devices.modules where properties.reported.chillerProperties.model='4000x'です。-- priority - 正の整数。 2 つ以上の構成が同じデバイスまたはモジュールを対象とする場合は、Priority の数値が最も高い構成が適用されます。
-- metrics - メトリック クエリへのファイルパス。 メトリックは、構成コンテンツを適用した後にデバイスまたはモジュールが報告する可能性があるさまざまな状態の集計カウントを提供します。 たとえば、保留中の設定変更のメトリック、エラーのメトリック、設定の変更を成功するためのメトリックを作成できます。
構成の監視
次のコマンドを使用して、構成の内容を表示します。
az iot hub configuration show --config-id [configuration id] \
--hub-name [hub name]
-- config-id - IoT ハブに存在する構成の名前。
-- hub-name - 構成が存在する IoT ハブの名前。 ハブは現在のサブスクリプションに存在する必要があります。 コマンド
az account set -s [subscription name]を使用して、目的のサブスクリプションに切り替えます。
コマンド ウィンドウで構成を調べます。 metrics プロパティには、各ハブによって評価される各メトリックの数が一覧表示されます。
targetedCount - ターゲット条件に一致する IoT Hub 内のデバイス ツインまたはモジュール ツインの数を指定するシステム メトリック。
appliedCount - システム メトリックは、ターゲット コンテンツが適用されたデバイスまたはモジュールの数を指定します。
カスタム メトリック - 定義したすべてのメトリックはユーザー メトリックです。
次のコマンドを使用して、各メトリックのデバイス ID、モジュール ID、またはオブジェクトの一覧を表示できます。
az iot hub configuration show-metric --config-id [configuration id] \
--metric-id [metric id] --hub-name [hub name] --metric-type [type]
-- config-id - IoT ハブに存在するデプロイの名前。
-- metric-id - デバイス ID またはモジュール ID の一覧を表示するメトリックの名前 (
appliedCountなど)。-- hub-name - デプロイが存在する IoT ハブの名前。 ハブは現在のサブスクリプションに存在する必要があります。 コマンド
az account set -s [subscription name]を使用して、目的のサブスクリプションに切り替えます。-- metric-type - メトリックの種類は、
systemまたはuserできます。 システムメトリックはtargetedCountとappliedCountです。 その他のメトリックはすべてユーザー メトリックです。
構成を変更する
構成を変更すると、その変更はすべてのターゲット デバイスに直ちにレプリケートされます。
ターゲット条件を更新すると、次の更新が行われます。
ツインが古いターゲット条件を満たしていないが、新しいターゲット条件を満たしていて、この構成がそのツインの最も高い優先順位である場合、この構成が適用されます。
現在この構成を実行しているツインがターゲット条件を満たさなくなった場合、構成の設定は削除され、ツインは次に優先度の高い構成によって変更されます。
現在この構成を実行しているツインがターゲット条件を満たさなくなり、他の構成のターゲット条件を満たしていない場合、構成の設定は削除され、ツインに対するその他の変更は行われません。
構成を更新するには、次のコマンドを使用します。
az iot hub configuration update --config-id [configuration id] \
--hub-name [hub name] --set [property1.property2='value']
-- config-id - IoT ハブに存在する構成の名前。
-- hub-name - 構成が存在する IoT ハブの名前。 ハブは現在のサブスクリプションに存在する必要があります。 コマンド
az account set -s [subscription name]を使用して、目的のサブスクリプションに切り替えます。-- set - 構成のプロパティを更新します。 次のプロパティを更新できます。
targetCondition - 例として
targetCondition=tags.location.state='Oregon'labels
priority
構成を削除する
構成を削除すると、すべてのデバイス ツインまたはモジュール ツインが次に優先度の高い構成を使用します。 ツインが他の構成のターゲット条件を満たしていない場合、他の設定は適用されません。
構成を削除するには、次のコマンドを使用します。
az iot hub configuration delete --config-id [configuration id] \
--hub-name [hub name]
-- config-id - IoT ハブに存在する構成の名前。
-- hub-name - 構成が存在する IoT ハブの名前。 ハブは現在のサブスクリプションに存在する必要があります。 コマンド
az account set -s [subscription name]を使用して、目的のサブスクリプションに切り替えます。
次のステップ
この記事では、大規模な IoT デバイスを構成して監視する方法について説明しました。
IoT Hub デバイス ID を一括で管理する方法については、「IoT Hub デバイス ID を一括でインポートおよびエクスポートする」を参照してください。