Azure IoT Central のトラブルシューティング

この記事には、IoT Central アプリケーションでのデバイス接続の問題とデータ エクスポートの構成に関する問題のトラブルシューティング ガイダンスが含まれています。

デバイス接続の問題

このセクションは、データが IoT Central に到達しているかどうかを確認するのに役立ちます。

az cli ツールと azure-iot 拡張機能をまだインストールしていない場合はインストールします。

az cli のインストール方法については、「Azure CLI のインストール」を参照してください。

azure-iot 拡張機能をインストールするには、次のコマンドを実行します。

az extension add --name azure-iot

Note

拡張コマンドを初めて実行するときに、uamqp ライブラリをインストールするように求められる場合があります。

azure-iot 拡張機能をインストールしたら、デバイスを起動して、送信しているメッセージが、IoT Central に送信されているかどうかを確認します。

次のコマンドを使用して、IoT Central アプリケーションを含むサブスクリプションにサインインします。

az login
az account set --subscription <your-subscription-id>

デバイスから送信されているテレメトリを監視するには、次のコマンドを使用します。

az iot central diagnostics monitor-events --app-id <iot-central-app-id> --device-id <device-name>

デバイスが IoT Central に正常に接続されている場合、次の例のような出力が表示されます。

Monitoring telemetry.
Filtering on device: device-001
{
    "event": {
        "origin": "device-001",
        "module": "",
        "interface": "",
        "component": "",
        "payload": {
            "temp": 65.57910343679293,
            "humid": 36.16224660107426
        }
    }
}

デバイスと IoT Central の間で交換されているプロパティの更新を監視するには、次のプレビュー コマンドを使用します。

az iot central diagnostics monitor-properties --app-id <iot-central-app-id> --device-id <device-name>

デバイスからプロパティの更新が正常に送信されている場合、次の例のような出力が表示されます。

Changes in reported properties:
version : 32
{'state': 'true', 'name': {'value': {'value': 'Contoso'}, 'status': 'completed', 'desiredVersion': 7, 'ad': 'completed', 'av': 7, 'ac
': 200}, 'brightness': {'value': {'value': 2}, 'status': 'completed', 'desiredVersion': 7, 'ad': 'completed', 'av': 7, 'ac': 200}, 'p
rocessorArchitecture': 'ARM', 'swVersion': '1.0.0'}

ターミナルにデータが表示される場合、データは IoT Central アプリケーションまで到達しています。

数分経ってもデータが表示されない場合、出力がスタックしている可能性があるので、キーボードの Enter キーまたは return キーを押します。

それでもターミナルにデータが表示されない場合は、デバイスでネットワーク接続の問題が発生しているか、データが IoT Central に正しく送信されていない可能性があります。

デバイスのプロビジョニング状態を確認する

データが CLI モニターに表示されていない場合は、次のコマンドを実行して、デバイスのプロビジョニング状態を確認します。

az iot central device registration-info --app-id <iot-central-app-id> --device-id <device-name>

次の出力は、接続がブロックされているデバイスの例を示しています。

{
  "@device_id": "v22upeoqx6",
  "device_registration_info": {
    "device_status": "blocked",
    "display_name": "Environmental Sensor - v22upeoqx6",
    "id": "v22upeoqx6",
    "instance_of": "urn:krhsi_k0u:modelDefinition:w53jukkazs",
    "simulated": false
  },
  "dps_state": {
    "error": "Device is blocked from connecting to IoT Central application. Unblock the device in IoT Central and retry. Learn more:
https://aka.ms/iotcentral-docs-dps-SAS",
    "status": null
  }
}
デバイスのプロビジョニング状態 説明 考えられる軽減策
プロビジョニング済み すぐに認識できる問題はありません。 該当なし
Registered デバイスがまだ IoT Central に接続されていません。 デバイス ログを調べて、接続の問題の有無を確認します。
ブロック デバイスは、IoT Central への接続をブロックされています。 デバイスは、IoT Central アプリケーションへの接続をブロックされています。 IoT Central でデバイスのブロックを解除して、再試行します。 詳しくは、「デバイスの状態の値」をご覧ください。
未承認 デバイスが承認されていません。 デバイスは、IoT Central アプリケーションへの接続を承認されていません。 IoT Central でデバイスを承認し、再試行します。 詳しくは、「デバイスの状態の値」をご覧ください
未割り当て デバイスがデバイス テンプレートに割り当てられていません。 IoT Central でデータの解析方法を認識できるように、デバイスをデバイス テンプレートに割り当てます。

詳しくは、UI でのデバイスの状態値REST API でのデバイスの状態値に関する記述を参照してください。

エラー コード

データが monitor-eventsに表示されない原因をまだ突き止められない場合は、次の手順として、デバイスによって報告されるエラー コードを調べます。

デバイスでデバッグ セッションを開始するか、デバイスからログを収集します。 デバイスによって報告されるエラー コードがあるかどうかを確認します。

次の表は、一般的なエラー コードと考えられる軽減措置を示しています。

認証フローに関連する問題が発生している場合:

エラー コード 説明 考えられる軽減策
400 要求の本文が無効です。 たとえば、解析できないか、オブジェクトを検証できない場合です。 確実に構成証明フローの過程で正しい要求本文を送信するか、デバイス SDK を使用します。
401 認証トークンを検証できません。 たとえば、有効期限切れの場合や、要求の URI に適用されない場合などです。 また、このエラー コードは、TPM 構成証明フローの過程でデバイスに返されます。 確実に正しい資格情報がデバイスに含まれるようにします。
404 デバイス プロビジョニング サービスのインスタンス、または登録などのリソースが存在しません。 カスタマー サポートにチケットを提出してください。
412 要求の ETag が、RFC7232 に従って、既存のリソースの ETag と一致しません。 カスタマー サポートにチケットを提出してください。
429 サービスで操作が調整されています。 サービスの具体的な制限については、「IoT Hub Device Provisioning Service の制限」を参照してください。 メッセージの頻度を削減し、より多くのデバイス間で責任を分割します。
500 内部エラーが発生しました。 カスタマー サポートにチケットを提出して、さらにサポートを受けられるかどうかを確認します。

詳細な承認エラー コード

Error サブ エラー コード メモ
401 権限がありません 401002 デバイスが無効または期限切れの資格情報を使用しています。 このエラーは DPS によって報告されます。
401 権限がありません 400209 デバイスがオペレーターによる承認を待っているか、オペレーターによってブロックされました。
401 IoTHubUnauthorized デバイスが期限切れのセキュリティ トークンを使用しています。 このエラーは IoT Hub によって報告されています。
401 IoTHubUnauthorized DEVICE_DISABLED この IoT ハブではデバイスが無効になり、別の IoT ハブに移動されました。 デバイスを再プロビジョニングします。
401 IoTHubUnauthorized DEVICE_BLOCKED オペレーターによってこのデバイスがブロックされました。

ファイルのアップロードに関するエラー コード

デバイスによってファイルがクラウドにアップロードされようとしたときに、表示される可能性のある一般的なエラー コードのリストを以下に示します。 デバイスでファイルをアップロードする前に、アプリケーションで、デバイス ファイルのアップロードを構成する必要があります。

エラー コード 説明 考えられる軽減策
403006 同時に実行可能なファイル アップロード操作の数が上限を超えています。 各デバイス クライアントは、同時ファイル アップロード数が 10 個に制限されています。 ファイル アップロード操作が完了したことがデバイスから IoT Central に即座に通知されるようにします。 それでもうまくいかない場合は、要求タイムアウトを下げてみてください。

モデル化されていないデータの問題

デバイスから IoT Central にデータが送信されていることを確認したら、次のステップとして、確実に有効な形式でデバイスからデータが送信されるようにします。

問題が含まれるカテゴリを見つけるには、シナリオに最も適した Azure CLI コマンドを実行します。

  • テレメトリを検証するには、次のプレビュー コマンドを使用します。

    az iot central diagnostics validate-messages --app-id <iot-central-app-id> --device-id <device-name>
    
  • プロパティの更新を検証するには、次のプレビュー コマンドを使用します。

    az iot central diagnostics validate-properties --app-id <iot-central-app-id> --device-id <device-name>
    

validate コマンドを初めて実行するときに、uamqp ライブラリをインストールするように求められる場合があります。

デバイス データが IoT Central に表示されない原因には、一般的に次の 3 種類の問題があります。

  • デバイス テンプレートとデバイス データの不一致。
  • データが無効な JSON。
  • IoT Edge のバージョンが古いと、コンポーネントのテレメトリがモデル化されていないデータとして表示され正しくありません。

デバイス テンプレートとデバイス データの不一致

デバイスは、送信するペイロード内のテレメトリ フィールド名に、デバイス テンプレートで使用されているのと同じ名前と文字種 (大文字/小文字) を使用する必要があります。 次の出力は、デバイスが Temperature と呼ばれるテレメトリ値 (temperature であるべき時に) を送信している場合の警告メッセージの例を示しています。

Validating telemetry.
Filtering on device: sample-device-01.
Exiting after 300 second(s), or 10 message(s) have been parsed (whichever happens first).
[WARNING] [DeviceId: sample-device-01] [TemplateId: urn:modelDefinition:ofhmazgddj:vmjwwjuvdzg] Device is sending data that has not been defined in the device template. Following capabilities have NOT been defined in the device template '['Temperature']'. Following capabilities have been defined in the device template (grouped by components) '{'thermostat1': ['temperature', 'targetTemperature', 'maxTempSinceLastReboot', 'getMaxMinReport'], 'thermostat2': ['temperature', 'targetTemperature', 'maxTempSinceLastReboot', 'getMaxMinReport'], 'deviceInformation': ['manufacturer', 'model', 'swVersion', 'osName', 'processorArchitecture', 'processorManufacturer', 'totalStorage', 'totalMemory']}'. 

デバイスは、送信するペイロード内のどのプロパティ名にも、デバイス テンプレートで使用されているのと同じ名前と文字種 (大文字/小文字) を使用する必要があります。 次の出力は、プロパティ osVersion がデバイス テンプレートで定義されていない場合の警告メッセージの例を示しています。

Command group 'iot central diagnostics' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
[WARNING]  [DeviceId: sample-device-01] [TemplateId: urn:modelDefinition:ofhmazgddj:vmjwwjuvdzg] Device is sending data that has not been defined in the device template. Following capabilities have NOT been defined in the device template '['osVersion']'. Following capabilities have been defined in the device template (grouped by components) '{'thermostat1': ['temperature', 'targetTemperature', 'maxTempSinceLastReboot', 'getMaxMinReport', 'rundiagnostics'], 'thermostat2': ['temperature', 'targetTemperature', 'maxTempSinceLastReboot', 'getMaxMinReport', 'rundiagnostics'], 'deviceInformation': ['manufacturer', 'model', 'swVersion', 'osName', 'processorArchitecture', 'processorManufacturer', 'totalStorage', 'totalMemory']}'.

デバイスは、どのテレメトリまたはプロパティ値にも、デバイス テンプレートで定義されているデータ型を使用する必要があります。 たとえば、デバイス テンプレートで定義されている型がブール値であるのに、デバイスが文字列を送信する場合、スキーマの不一致が表示されます。 次の出力は、double 型として定義されているプロパティでデバイスが文字列値を使用する場合のエラー メッセージの例を示しています。

Command group 'iot central diagnostics' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Validating telemetry.
Filtering on device: sample-device-01.
Exiting after 300 second(s), or 10 message(s) have been parsed (whichever happens first).
[ERROR] [DeviceId: sample-device-01] [TemplateId: urn:modelDefinition:ofhmazgddj:vmjwwjuvdzg]  Datatype of telemetry field 'temperature' does not match the datatype double. Data sent by the device : curr_temp. For more information, see: https://aka.ms/iotcentral-payloads

複数のインターフェイスで同じテレメトリ名が定義されているのに、デバイスが IoT プラグ アンド プレイに準拠していない場合にも、検証コマンドはエラーを報告します。

GUI を使用する場合は、IoT Central の 生データ ビューを使用して、モデル化されていないものがないかどうかを確認します。

Screenshot that shows the raw data view in an IoT Central application.

問題が検出された場合、デバイスのファームウェアを更新するか、以前にモデル化されていないデータをモデル化する新しいデバイス テンプレートを作成することが必要になる場合があります。

データを正しくモデル化する新しいテンプレートの作成を選択した場合は、デバイスを古いテンプレートから新しいテンプレートに移行します。 詳細については、「Azure IoT Central アプリケーションでデバイスを管理する」を参照してください。

無効な JSON

エラーが報告されないのに、値が表示されない場合は、デバイスが送信するペイロード内の JSON の形式に誤りがある可能性があります。 詳細については、「テレメトリ、プロパティ、およびコマンドのペイロード」を参照してください。

デバイスから形式に誤りがある JSON が送信されている場合、検証コマンドまたは UI の生データ表示を利用して検出を行うことができません。

IoT Edge のバージョン

IoT Edge モジュールでホストされているコンポーネントのテレメトリを正しく表示するには、IoT Edgeバージョン1.2.4以降を使用します。 以前のバージョンを使用している場合、IoT Edge モジュール内のコンポーネントのテレメトリは _unmodeleddata として表示されます。

データ エクスポートのマネージド ID に関する問題

エクスポート先への接続を承認するために、マネージド ID を使用しています。 データがエクスポート先に到着していません。

エクスポート先を構成または有効にする前に、次の手順を完了していることを確認してください。

  • IoT Central アプリケーションのマネージド ID を有効にします。 マネージド ID が有効になっていることを確認するには、Azure portal でアプリケーションの [ID] ページに移動するか、次の CLI コマンドを使用します。

    az iot central app identity show --name {your app name} --resource-group {your resource group name}
    
  • マネージド ID のアクセス許可を構成する。 割り当てられたアクセス許可を表示するには、Azure portal にあるアプリの [ID] ページで、[Azure ロールの割り当て] を選択するか、az role assignment list CLI コマンドを使用します。 必要なアクセス許可は次のとおりです。

    宛先 アクセス許可
    Azure Blob Storage ストレージ BLOB データ共同作成者
    Azure Service Bus Azure Service Bus データ送信者
    Azure Event Hubs Azure Event Hubs データ送信者
    Azure Data Explorer 管理者

    IoT Central アプリケーションで宛先を作成する前にアクセス許可が正しく設定されていない場合は、宛先を削除してから、もう一度追加してみてください。

  • 任意の仮想ネットワーク、プライベート エンドポイント、およびファイアウォール ポリシーを構成する。

Note

マネージド ID を使用してエクスポート先への接続を承認している場合、IoT Central はシミュレートされたデバイスからデータをエクスポートしません。

詳細については、データのエクスポートに関する記事を参照してください。

データ エクスポート先の接続に関する問題

エクスポート定義ページには、エクスポート先への接続で失敗したものに関する情報が表示されます。

Screenshot that shows an example export error.

データ エクスポートのデータ欠落の問題

データエクスポートは、データエクスポートを有効にした後にアプリケーションに到着したデータのみをエクスポートします。 データのエクスポートが一時的にオフになっている間に見逃された履歴データまたはデータをエクスポートする必要がある場合は、IoT Central REST API を使用してデバイス テレメトリのクエリを実行できます。 クエリを使用して欠落しているデータを取得し、エクスポート先にデータを追加します。 詳細については、「IoT Central REST API を使用してデバイスに対しクエリを実行する方法」を参照してください。

次のステップ

さらにサポートが必要な場合は、Microsoft Q&A と Stack Overflow フォーラムで Azure エキスパートにお問い合わせください。 または、Azure サポート チケットを送信することもできます。

詳細については、「Azure IoT のサポートとヘルプのオプション」を参照してください。