データモデルコードジェネレーター - のマネージド統合 AWS IoT Device Management

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データモデルコードジェネレーター

データモデルにコードジェネレーターを使用する方法について説明します。生成されたコードを使用して、クラウドとデバイスの間で交換されるデータモデルをシリアル化および逆シリアル化できます。

プロジェクトリポジトリには、C コードデータモデルハンドラーを作成するためのコード生成ツールが含まれています。以下のトピックでは、コードジェネレーターとワークフローについて説明します。

コード生成プロセス

コードジェネレーターは、3 つの主要な入力から C ソースファイルを作成します。 AWS Zigbee クラスターライブラリ (ZCL) アドバンストプラットフォームからの Matter Data Model (.matter ファイル) の実装、前処理を処理する Python プラグイン、およびコード構造を定義する Jinja2 テンプレートです。生成中、Python プラグインはグローバル型定義を追加し、依存関係に基づいてデータ型を整理し、テンプレートレンダリングの情報をフォーマットすることで、.matter ファイルを処理します。

次の図は、C ソースファイルを作成するコードジェネレーターを示しています。

End device SDK コードジェネレーターとその仕組み。

End device SDK には、 connectedhomeipプロジェクトcodegen.pyで と連携する Python プラグインと Jinja2 テンプレートが含まれています。この組み合わせにより、.matter ファイルの入力に基づいて、クラスターごとに複数の C ファイルが生成されます。

以下のサブトピックでは、これらのファイルについて説明します。

Python プラグイン

コードジェネレーター はcodegen.py、.matter ファイルを解析し、その情報を Python オブジェクトとしてプラグインに送信します。プラグインファイルは、このデータをiotmi_data_model.py前処理し、提供されたテンプレートを使用してソースをレンダリングします。前処理には以下が含まれます。

  1. グローバルタイプなどcodegen.py、 から利用できない情報の追加

  2. データ型に対してトポロジーソートを実行して正しい定義の順序を確立する

    注記

    トポロジソートにより、元の順序に関係なく、依存関係の後に依存型が定義されます。

Jinja2 テンプレート

エンドデバイス SDK は、データモデルハンドラーと低レベルの C 機能用にカスタマイズされた Jinja2 テンプレートを提供します。

Jinja2 テンプレート
テンプレート 生成されたソース 解説
cluster.h.jinja iotmi_device_<cluster>.h 低レベルの C 関数ヘッダーファイルを作成します。
cluster.c.jinja iotmi_device_<cluster>.c データモデルハンドラーにコールバック関数ポインタを実装して登録します。
cluster_type_helpers.h.jinja iotmi_device_type_helpers_<cluster>.h データ型の関数プロトタイプを定義します。
cluster_type_helpers.c.jinja iotmi_device_type_helpers_<cluster>.c クラスター固有の列挙、ビットマップ、リスト、構造のデータ型関数プロトタイプを生成します。
iot_device_dm_types.h.jinja iotmi_device_dm_types.h グローバルデータ型の C データ型を定義します。
iot_device_type_helpers_global.h.jinja iotmi_device_type_helpers_global.h グローバルオペレーションの C データ型を定義します。
iot_device_type_helpers_global.c.jinja iotmi_device_type_helpers_global.c ブール値、整数、浮動小数点、文字列、ビットマップ、リスト、構造などの標準データ型を宣言します。

(オプション) カスタムスキーマ

エンドデバイス SDK は、標準化されたコード生成プロセスをカスタムスキーマと組み合わせます。これにより、デバイスとデバイスソフトウェアの Matter Data Model を拡張できます。カスタムスキーマは、デバイスdevice-to-cloud通信のデバイス機能を記述するのに役立ちます。

形式、構造、要件など、マネージド統合データモデルの詳細については、「」を参照してくださいマネージド統合データモデル

codegen.py ツールを使用して、次のようにカスタムスキーマの C ソースファイルを生成します。

注記

各カスタムクラスターには、次の 3 つのファイルに対して同じクラスター ID が必要です。

  • クラウドに新しいカスタムクラスターを作成する機能レポート用のクラスターの表現を提供するJSON形式でカスタムスキーマを作成します。サンプルファイルは にありますcodegen/custom_schemas/custom.SimpleLighting@1.0

  • カスタムスキーマと同じ情報を含むXML形式で ZCL (Zigbee クラスターライブラリ) 定義ファイルを作成します。ZAP ツールを使用して、ZCL XML から Matter IDL ファイルを生成します。サンプルファイルは にありますcodegen/zcl/custom.SimpleLighting.xml

  • ZAP ツールからの出力は Matter IDL File (.matter)であり、カスタムスキーマに対応する Matter クラスターを定義します。これは、エンドデバイス SDK の C ソースファイルを生成するためのcodegen.pyツールの入力です。サンプルファイルは にありますcodegen/matter_files/custom-light.matter

カスタムマネージド統合データモデルをコード生成ワークフローに統合する方法の詳細については、「」を参照してくださいデバイスのコードを生成する