次の方法で共有


IoT Hub メッセージを作成し、読み取る

プロトコル間の相互運用性をサポートするために、Azure IoT Hub により、すべてのデバイスに接続するプロトコルで使用できる一般的なメッセージング機能のセットが定義されています。 これらの機能は、device-to-cloud メッセージcloud-to-device メッセージの両方で使用できます。

Note

この記事で言及されている一部の機能 (cloud-to-device メッセージング、デバイス ツイン、デバイス管理など) は、IoT Hub の Standard レベルだけで使用することができます。 Basic および Standard または Free レベルの IoT Hub の詳細については、ソリューションに適した IoT Hub のレベルの選択に関するページを参照してください。

IoT Hub は、ストリーミング メッセージング パターンを使用して、D2C メッセージングを実装しています。 IoT Hub の device-to-cloud メッセージは、複数のリーダーで読み取り可能なサービスを経由する大量のイベントが存在するという点で、Service Bus "メッセージ" よりも Event Hubs "イベント"に似ています。

IoT Hub メッセージは、次のような構成です。

  • "システム プロパティ" の定義済みのセット。この記事で後述します。

  • 一連の アプリケーション プロパティ。 メッセージ本文を逆シリアル化しなくてもアプリケーションが定義してアクセスできる、文字列プロパティのディクショナリです。 IoT Hub によってこれらのプロパティが変更されることはありません。

  • 任意の型のデータを指定できるメッセージ本文。

各デバイス プロトコルは、さまざまな方法でプロパティの設定を実装します。 詳細については、MQTT プロトコルおよび AMQP プロトコルの開発者ガイドを参照してください。

HTTPS プロトコルを使用して device-to-cloud メッセージを送信するとき、または cloud-to-device メッセージを送信するときに、プロパティ名と値に含めることができるのは、ASCII 英数字と ! # $ % & ' * + - . ^ _ ` | ~ のみです。

IoT Hub を使用した device-to-cloud メッセージングには、次のような特徴があります。

  • device-to-cloud メッセージには持続性があり、最長で 7 日間、IoT hub の既定の messages/events エンドポイントに保持されます。

  • device-to-cloud メッセージは最大 256 KB で、バッチとしてグループ化して送信を最適化できます。 バッチは最大で 256 KB です。

  • IoT Hub では、任意のパーティション分割は許可されていません。 D2C メッセージは、発信元の deviceIdに基づいてパーティション分割されます。

  • IoT Hub へのアクセスの制御」で説明されているように、IoT Hub ではデバイスごとに認証とアクセス制御を行うことができます。

  • アプリケーション プロパティに移動する情報をメッセージにスタンプできます。 詳細については、メッセージ エンリッチメントの概要に関するページを参照してください。

Note

各 IoT Hub プロトコルは、カスタム エンドポイントにデータをルーティングするときに考慮されるメッセージ コンテンツ タイプ プロパティを提供します。 送信先でデータを適切に処理するには (たとえば、JSON を Base64 でエンコードされたバイナリ データではなく解析可能な文字列として扱うなど)、メッセージに適切なコンテンツ タイプと文字セットを指定します。

IoT Hub ルーティング クエリでメッセージ本文を使うには、メッセージに有効な JSON オブジェクトを指定し、メッセージのコンテンツ タイプ プロパティを application/json;charset=utf-8 に設定します。

有効でルーティング可能なメッセージ本文の例を次に示します。

{
    "timestamp": "2022-02-08T20:10:46Z",
    "tag_name": "spindle_speed",
    "tag_value": 100
}

device-to-cloud メッセージのシステム プロパティ

プロパティ 説明 ユーザー設定可能? ルーティング クエリの
キーワード
message-id 要求/応答パターンに使用する、メッセージのユーザー設定 ID。 形式: 大文字と小文字を区別する ASCII 7 ビット英数字と - : . + % _ # * ? ! ( ) , = @ ; $ ' の文字列 (最大 128 文字)。 はい messageId
iothub-enqueuedtime IoT Hub が Device-to-Cloud メッセージを受信した日時。 いいえ enqueuedTime
user-id メッセージの送信元を指定するために使用される ID。 はい userId
iothub-connection-device-id IoT Hub で D2C メッセージに対して設定される ID。 メッセージを送信したデバイスの deviceId が含まれます。 いいえ connectionDeviceId
iothub-connection-module-id IoT Hub で D2C メッセージに対して設定される ID。 メッセージを送信したデバイスの moduleId が含まれます。 いいえ connectionModuleId
iothub-connection-auth-generation-id IoT Hub で D2C メッセージに対して設定される ID。 メッセージを送信したデバイスの connectionDeviceGenerationId (「デバイス ID のプロパティ」を参照) が含まれています。 いいえ connectionDeviceGenerationId
iothub-connection-auth-method IoT Hub で D2C メッセージに対して設定される認証方法。 このプロパティには、メッセージを送信するデバイスの認証に使用する認証方法に関する情報が含まれます。 いいえ connectionAuthMethod
iothub-app-iothub-creation-time-utc バッチ内のデータを送信するときに、デバイスがイベント作成時間を送信できるようにします。 はい creation-time-utc
iothub-creation-time-utc 一度に 1 つのメッセージを送信するときに、デバイスがイベント作成時間を送信できるようにします。 はい creation-time-utc
dt-dataschema この値は、IoT Hub で、device-to-cloud メッセージに対して設定されます。 デバイス接続で設定されたデバイス モデル ID が含まれます。 いいえ $dt-dataschema
dt-subject device-to-cloud メッセージを送信しているコンポーネントの名前。 はい $dt-subject

device-to-cloud メッセージのアプリケーション プロパティ

アプリケーション プロパティの一般的な用途として、デバイスからメッセージが送信された日時の記録があります。この場合、iothub-creation-time-utc プロパティを使用してデバイスからタイムスタンプを送信します。 このタイムスタンプの形式は、タイムゾーン情報を含まない UTC であることが必要です。 たとえば、2021-04-21T11:30:16Z は有効ですが、2021-04-21T11:30:16-07:00 は無効です。

{
  "applicationId":"00001111-aaaa-2222-bbbb-3333cccc4444",
  "messageSource":"telemetry",
  "deviceId":"sample-device-01",
  "schema":"default@v1",
  "templateId":"urn:modelDefinition:mkuyqxzgea:e14m1ukpn",
  "enqueuedTime":"2021-01-29T16:45:39.143Z",
  "telemetry":{
    "temperature":8.341033560421833
  },
  "messageProperties":{
    "iothub-creation-time-utc":"2021-01-29T16:45:39.021Z"
  },
  "enrichments":{}
}

cloud-to-device メッセージのシステム プロパティ

プロパティ 説明 ユーザーが設定可能
message-id 要求/応答パターンに使用する、メッセージのユーザー設定 ID。 形式: 大文字と小文字を区別する ASCII 7 ビット英数字と - : . + % _ # * ? ! ( ) , = @ ; $ ' の文字列 (最大 128 文字)。 はい
sequence-number IoT Hub によって各 C2D メッセージに割り当てられる数値 (デバイスとキューごとに一意)。 いいえ
to C2D メッセージで指定される宛先。 いいえ
absolute-expiry-time メッセージの有効期限の日時。 はい
correlation-id 通常、要求/応答パターンで要求の MessageId を格納する、応答メッセージの文字列プロパティ。 はい
user-id メッセージの送信元を指定するために使用される ID。 IoT Hub によってメッセージが生成される場合、ユーザー ID は IoT Hub 名になります。 はい
iothub-ack フィードバック メッセージのジェネレーター。 このプロパティは、デバイスがメッセージを使用した結果としてのフィードバック メッセージの生成を IoT Hub に要求するために、C2D メッセージで使用されます。 使用可能な値: none (既定値): フィードバック メッセージは生成されません。positive: メッセージが完了した場合にフィードバック メッセージを受信します。negative: デバイスでメッセージが完了しないまま、メッセージの有効期限が切れた場合 (または最大配信数に達した場合) にフィードバック メッセージを受信します。full: positive と negative の両方の値を意味します。 はい

システム プロパティ名

システム プロパティ名は、メッセージがルーティングされるエンドポイントによって異なります。

システム プロパティ名 Event Hubs Azure Storage Service Bus Event Grid
メッセージ ID message-id messageId MessageId message-id
User id user-id userId UserId user-id
Connection device id iothub-connection-device-id connectionDeviceId iothub-connection-device-id iothub-connection-device-id
Connection module id iothub-connection-module-id connectionModuleId iothub-connection-module-id iothub-connection-module-id
Connection auth generation id iothub-connection-auth-generation-id connectionDeviceGenerationId iothub-connection-auth-generation-id iothub-connection-auth-generation-id
Connection auth method iothub-connection-auth-method connectionAuthMethod iothub-connection-auth-method iothub-connection-auth-method
contentType content-type contentType ContentType iothub-content-type
contentEncoding content-encoding contentEncoding ContentEncoding iothub-content-encoding
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime 該当なし iothub-enqueuedtime
CorrelationId correlation-id correlationId CorrelationId correlation-id
dt-dataschema dt-dataschema dt-dataschema dt-dataschema dt-dataschema
dt-subject dt-subject dt-subject dt-subject dt-subject

メッセージ サイズ

IoT Hub では、メッセージのサイズは、プロトコルに関係なく実際のペイロードのみを考慮して測定されます。 サイズ (バイト単位) は次の値の和として計算されます。

  • 本文のサイズ (バイト単位)
  • メッセージ システム プロパティの全値のサイズ (バイト単位)。
  • すべてのユーザー プロパティの名前と値のサイズ (バイト単位)

プロパティの名前と値は ASCII 文字に制限されているため、文字列の長さがバイト単位のサイズと等しくなります。

なりすまし対策のプロパティ

D2C メッセージでのデバイスのなりすましを回避するために、IoT Hub では、すべてのメッセージに次のプロパティを持つスタンプが使用されます。

  • iothub-connection-device-id
  • iothub-connection-auth-generation-id
  • iothub-connection-auth-method

最初の 2 つには、「デバイス ID プロパティ」で説明されている発信元デバイスの deviceIdgenerationId が含まれています。

iothub-connection-auth-method プロパティには、次のプロパティを使用してシリアル化された JSON オブジェクトが含まれています。

{
  "scope": "{ hub | device | module }",
  "type": "{ symkey | sas | x509 }",
  "issuer": "iothub"
}

次のステップ