

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

# カスタム複合モデル (コンポーネント)
<a name="custom-composite-models"></a>

 多くの部品がある複雑な機械など、特に複雑な産業用アセットをモデル化する場合、アセットモデルを整理して維持できるようにすることが課題になる可能性があります。

このような場合、カスタム複合モデル、またはコンソールを使用している場合はコンポーネントを既存のアセットモデルとコンポーネントモデルに追加できます。これらは、関連するプロパティをグループ化し、サブコンポーネント定義を再使用して、整理を維持するのに役立ちます。

カスタム複合モデルには 2 つのタイプがあります。
+ **インライン**カスタム複合モデルは、カスタム複合モデルが属するアセットモデルまたはコンポーネントモデルに適用されるグループ化されたプロパティのセットを定義します。これらを使用して、関連するプロパティをグループ化します。これらは、名前、説明、および一連のアセットモデルプロパティで構成されます。再利用できません。
+ **コンポーネントモデルベースの**カスタム複合モデルは、アセットモデルまたはコンポーネントモデルに含めるコンポーネントモデルを参照します。これらを使用して、モデルに標準サブアセンブリを含めます。これらは、参照するコンポーネントモデルの名前、説明、および ID で構成されます。独自のプロパティはありません。参照されるコンポーネントモデルが、作成されたアセットに関連付けられたプロパティを提供します。

以下のセクションでは、カスタム複合モデルを設計で使用する方法について説明します。

**Topics**
+ [インラインカスタム複合モデル](#inline-composite-models)
+ [コンポーネントモデルベースのカスタム複合モデル](#component-based-custom-composite-models)
+ [パスを使用してカスタム複合モデルのプロパティを参照する](#property-paths)

## インラインカスタム複合モデル
<a name="inline-composite-models"></a>

インラインカスタム複合モデルは、関連するプロパティをグループ化することによってアセットモデルを整理する方法を提供します。

例えば、ロボットアセットをモデル化するとします。ロボットには、サーボモーター、電源、およびバッテリーが含まれています。これらの各構成部品には、モデルに含める独自のプロパティがあります。次のようなプロパティを持つ `robot_model` というアセットモデルを定義できます。


****  

|  | 
| --- |
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/custom-composite-models.html)  | 

ただし、サブアセンブリが多数ある場合や、サブアセンブリ自体に多くのプロパティがある場合があります。このような場合、前述の例のように、プロパティがあまりにも多く存在すると、モデルルートで単一のフラットリストを参照および維持するのが面倒になる可能性があります。

このような状況に対処するには、インラインカスタム複合モデルを使用してプロパティをグループ化できます。インラインカスタム複合モデルは、独自のプロパティを定義するカスタム複合モデルです。例えば、次のようにロボットをモデル化できます。


****  

|  | 
| --- |
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/custom-composite-models.html)  | 

前の例では、`servo`、`powersupply`、および `battery` は、`robot_model` アセットモデル内で定義されたインラインカスタム複合モデルの名前です。これらの複合モデルはそれぞれ、独自のプロパティを定義します。

**注記**  
この場合、各カスタム複合モデルは独自のプロパティを定義し、すべてのプロパティがアセットモデル自体の一部になります (この場合は `robot_model`)。これらのプロパティは、他のアセットモデルやコンポーネントモデルと共有されません。例えば、`servo` というインラインカスタム複合モデルも持つ他のアセットモデルを作成した場合、`robot_model` 内で `servo` を変更しても、他のアセットモデルの `servo` の定義には影響しません。  
 このような共有を実装する場合 (例えば、すべてのアセットモデルが共有できるサーボの定義を 1 つだけにするために)、代わりにコンポーネントモデルを作成し、それを参照する**コンポーネントモデルベースの**複合モデルを作成します。詳細については、次のセクションを参照してください。

インラインカスタム複合モデルを作成する方法の詳細については、「[カスタム複合モデルを作成する (コンポーネント)](create-custom-composite-models.md)」を参照してください。

## コンポーネントモデルベースのカスタム複合モデル
<a name="component-based-custom-composite-models"></a>

でコンポーネントモデルを作成して、標準の再利用可能なサブアセンブリ AWS IoT SiteWise を定義できます。コンポーネントモデルを作成したら、他のアセットモデルとコンポーネントモデルにリファレンスを追加できます。これを行うには、**コンポーネントモデルベースのカスタム複合モデル**をコンポーネントを参照するモデルに追加します。コンポーネントへの参照は、多くのモデルから追加することも、同じモデル内で複数回追加することもできます。

このように、モデル間での同じ定義の重複を回避できます。また、コンポーネントモデルに加えた変更は、それを使用するすべてのアセットモデルに反映されるため、モデルのメンテナンスも簡素化されます。

例えば、産業設備に、すべて同じ種類のサーボモーターを使用する多くのタイプの機器があるとします。それらのいくつかは、単一の機器に多くのサーボモーターを持っています。機器タイプごとにアセットモデルを作成しますが、`servo` の定義を毎回複製する必要はありません。1 回だけモデル化し、さまざまなアセットモデルで使用します。後で `servo` の定義に変更を加えた場合、すべてのモデルとアセットで更新されます。

この方法で前の例のロボットをモデル化するには、サーボモーター、電源、およびバッテリーをこのようなコンポーネントモデルとして定義できます。


****  

|  | 
| --- |
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/custom-composite-models.html)  | 


****  

|  | 
| --- |
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/custom-composite-models.html)  | 


****  

|  | 
| --- |
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/custom-composite-models.html)  | 

その後、これらのコンポーネントを参照する `robot_model` などのアセットモデルを定義できます。複数のアセットモデルが同じコンポーネントモデルを参照できます。ロボットに複数のサーボモーターがある場合など、1 つのアセットモデルで同じコンポーネントモデルを複数回参照することもできます。


****  

|  | 
| --- |
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/custom-composite-models.html)  | 

コンポーネントモデルの作成方法については、「[コンポーネントモデルを作成する](create-component-models.md)」を参照してください。

他のモデルでコンポーネントモデルを参照する方法については、「[カスタム複合モデルを作成する (コンポーネント)](create-custom-composite-models.md)」を参照してください。

## パスを使用してカスタム複合モデルのプロパティを参照する
<a name="property-paths"></a>

アセットモデル、コンポーネントモデル、またはカスタム複合モデルにプロパティを作成する場合、[変換](transforms.md)や[メトリクス](metrics.md)など、その値を使用する他のプロパティからプロパティを参照できます。

AWS IoT SiteWise には、 プロパティを参照するさまざまな方法が用意されています。最も簡単な方法は、多くの場合、プロパティ ID を使用することです。ただし、参照するプロパティがカスタム複合モデルにある場合は、代わりに*パス*で参照する方が便利です。

パスは、アセットモデルと複合モデル内のネストされた複合モデル間の位置の観点からプロパティを指定する*パスセグメント*の順序付けられたシーケンスです。

### プロパティパスを取得する
<a name="obtaining-property-paths"></a>

プロパティのパスは、[AssetModelProperty](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetModelProperty.html) の `path` フィールドから取得できます。

例えば、 プロパティ `position` を持つカスタム複合モデル `servo` を含むアセットモデル `robot_model` があるとします。`servo` に対して [DescribeAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModelCompositeModel.html) を呼び出した場合、`position` プロパティは次のような `path` フィールドを一覧表示します。

```
"path": [
    {
       "id": "{{asset model ID}}",
       "name": "robot_model"
    },
    {
       "id": "{{composite model ID}}",
       "name": "servo"
    },
    {
       "id": "{{property ID}}",
       "name": "position"
    }
]
```

### プロパティパスの使用
<a name="using-property-paths"></a>

プロパティパスは、変換やメトリクスなど、他のプロパティを参照するプロパティを定義するときに使用できます。

プロパティは、*変数*を使用して別のプロパティを参照します。変数の操作方法の詳細については、「[数式で変数を使用する](expression-variables.md)」を参照してください。

プロパティを参照する変数を定義するときには、プロパティの ID またはパスを使用できます。

参照されるプロパティのパスを使用する変数を定義するには、その値の `propertyPath` フィールドを指定します。

例えば、パスを使用してプロパティを参照するメトリクスを持つアセットモデルを定義するには、次のようなペイロードを [CreateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_CreateAssetModel.html) に渡すことができます。

```
{
    {{...}}
    "assetModelProperties": [
        {
            {{...}}
            "type": {
                "metric": {
                    {{...}}
                    "variables": [
                        {
                            "name": "{{variable name}}",
                            "value": {
                                "propertyPath": [
                                    {{path segments}}
                                ]
                            }
                        }
                    ],
                    {{...}}
                }
            },
            {{...}}
        },
        {{...}}
    ],
    {{...}}
}
```