

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 更新資產模型、元件模型和界面
<a name="update-asset-models"></a>

使用 AWS IoT SiteWise 主控台或 API 更新資產模型、元件模型或界面。

您無法變更現有屬性的類型或資料類型，或現有指標的視窗。您也無法將模型的類型從資產模型變更為元件模型或界面，反之亦然。

**重要**  
如果您從資產模型或元件模型中移除屬性， 會 AWS IoT SiteWise 刪除該屬性的所有先前資料。對於元件模型，這會影響**使用該元件模型的所有資產模型**，因此請特別注意了解您的變更可能套用的範圍。
如果您從資產模型中移除階層定義， 會 AWS IoT SiteWise 取消與該階層中的所有資產的關聯。

更新資產模型時，以該模型為基礎的每個資產都會反映您對基礎模型所做的任何變更。在變更傳播之前，每個資產都有 `UPDATING` 狀態。您必須等到這些資產變回 `ACTIVE` 狀態，才能與它們進行互動。在這段期間，更新的資產模型的狀態將是 `PROPAGATING`。

當您更新元件模型時，包含該元件模型的每個資產模型都會反映變更。在元件模型變更傳播之前，每個受影響的資產模型都會具有 `UPDATING` 狀態，然後在更新其相關聯的資產`PROPAGATING`時，如前段所述。您必須等到這些資產模型回到 `ACTIVE` 狀態，才能與其互動。在此期間，更新的元件模型狀態將為 `PROPAGATING`。

如需詳細資訊，請參閱[資產和模型狀態](asset-and-model-states.md)。

**Topics**
+ [更新資產模型、元件模型或界面 （主控台）](#update-asset-model-console)
+ [更新資產模型、元件模型或界面 (AWS CLI)](#update-asset-model-cli)

## 更新資產模型、元件模型或界面 （主控台）
<a name="update-asset-model-console"></a>

您可以使用 AWS IoT SiteWise 主控台來更新資產模型、元件模型或界面。

**更新資產模型、元件模型或界面 （主控台）**

1. <a name="sitewise-open-console"></a>導覽至 [AWS IoT SiteWise 主控台](https://console.aws.amazon.com/iotsitewise/)。

1. <a name="sitewise-choose-models"></a>在導覽窗格中，選擇 **Models (模型)**。

1. 選擇要更新的資產模型、元件模型或界面。

1. 選擇**編輯**。

1. 在 **Edit model (編輯模型)** 頁面上，執行以下任一項操作：
   + 在 **Model details (模型詳細資料)** 中，變更模型的 **Name (名稱)**。
   + 變更任何 **Attribute definitions (屬性定義)**。您無法變更現有屬性的 **Data type (資料類型)**。如需詳細資訊，請參閱[定義靜態資料 （屬性）](attributes.md)。
   + 變更任何 **Measurement definitions (衡量值定義)**。您無法變更現有衡量值的 **Data type (資料類型)**。如需詳細資訊，請參閱[從設備定義資料串流 （度量）](measurements.md)。
   + 變更任何 **Transform definitions (轉換定義)**。如需詳細資訊，請參閱[轉換資料 （轉換）](transforms.md)。
   + 變更任何 **Metric definitions (指標定義)**。您無法變更現有指標的 **Time interval (時間間隔)**。如需詳細資訊，請參閱[從屬性和其他資產彙總資料 （指標）](metrics.md)。
   + （僅限資產模型） 變更任何**階層定義**。您無法變更現有階層的 **Hierarchy model (階層模型)**。如需詳細資訊，請參閱[定義資產模型階層](define-asset-hierarchies.md)。

1. 選擇 **Save** (儲存)。

**注意**  
 如果另一位使用者自上次開啟**編輯模型**頁面後成功更新資產模型，則會拒絕在主控台中提出的更新請求。主控台會提示使用者**重新整理****編輯模型**頁面，以擷取更新的模型。您必須再次進行更新，然後重試儲存。如需詳細資訊，請參閱[資產模型寫入的樂觀鎖定](opt-locking-for-model.md)。

## 更新資產模型、元件模型或界面 (AWS CLI)
<a name="update-asset-model-cli"></a>

使用 AWS Command Line Interface (AWS CLI) 更新資產模型、元件模型或界面。

使用 [UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) API 更新資產模型、元件模型或界面的名稱、描述和屬性。僅針對資產模型，您可以更新階層。對於介面，您可以更新屬性和階層。指定下列參數：
+ `assetModelId` – 資產的 ID。這是 UUID 格式的實際 ID，`externalId:myExternalId`如果有的話，則為 。如需詳細資訊，請參閱《AWS IoT SiteWise 使用者指南》**中的 [參考具有外部 IDs物件](object-ids.md#external-id-references)。

在承載中指定更新的模型。若要了解資產模型或元件模型的預期格式，請參閱 [在 中建立資產模型 AWS IoT SiteWise](create-asset-models.md)。

**警告**  
[UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) API 會使用您在承載中提供的模型覆寫現有模型。若要避免刪除模型的屬性或階層，您必須在更新的模型承載中包含其 IDs 和定義。若要了解如何查詢模型的現有結構，請參閱 [DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html) 操作。

**注意**  
下列程序只能更新類型 的複合模型`AWS/ALARM`。如果您想要更新`CUSTOM`複合模型，請改用 [UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html)。如需詳細資訊，請參閱[更新自訂複合模型 （元件）](update-custom-composite-models.md)。

**更新資產模型或元件模型 (AWS CLI)**

1. 執行下列命令來擷取現有的模型定義。將 *asset-model-id* 取代為要更新的資產模型或元件模型的 ID 或外部 ID。

   ```
   aws iotsitewise describe-asset-model --asset-model-id asset-model-id
   ```

   上述命令會傳回對應至模型最新版本的模型定義。

    對於資產模型處於 `FAILED` 狀態的使用案例，請擷取與其作用中版本對應的有效模型定義，以建置您的更新請求。如需詳細資訊，請參閱 [資產模型版本](model-active-version.md)。執行下列命令來擷取作用中模型定義：

   ```
   aws iotsitewise describe-asset-model --asset-model-id asset-model-id --asset-model-version ACTIVE 
   ```

   操作會傳回包含模型詳細資訊的回應。回應有以下結構。

   ```
   {
       "assetModelId": "String",
       "assetModelArn": "String",
       "assetModelName": "String",
       "assetModelDescription": "String",
       "assetModelProperties": Array of AssetModelProperty,
       "assetModelHierarchies": Array of AssetModelHierarchyDefinition,
       "assetModelCompositeModels": Array of AssetModelCompositeModel,
       "assetModelCompositeModelSummaries": Array of AssetModelCompositeModelSummary,
       "assetModelCreationDate": "String",
       "assetModelLastUpdateDate": "String",
       "assetModelStatus": {
         "state": "String",
         "error": {
           "code": "String",
           "message": "String"
         },
       "assetModelType": "String"
       },
       "assetModelVersion": "String",
       "eTag": "String"
   }
   ```

   如需詳細資訊，請參閱 [DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html) 操作。

1. 建立名為 `update-asset-model.json` 的文件，並將前一個命令的回應複製到檔案中。

1. 從 JSON 物件的 `update-asset-model.json` 中移除以下鍵值組：
   + `assetModelId`
   + `assetModelArn`
   + `assetModelCompositeModelSummaries`
   + `assetModelCreationDate`
   + `assetModelLastUpdateDate`
   + `assetModelStatus`
   + `assetModelType`
   + `assetModelVersion`
   + `eTag`

   [UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) 操作預期承載具有下列結構：

   ```
   {
     "assetModelName": "String",
     "assetModelDescription": "String",
     "assetModelProperties": Array of AssetModelProperty,
     "assetModelHierarchies": Array of AssetModelHierarchyDefinition,
     "assetModelCompositeModels": Array of AssetModelCompositeModel
   }
   ```

1. 在 `update-asset-model.json` 中，執行下列任何一項：
   + 變更資產模型的名稱 (`assetModelName`)。
   + 變更、新增或移除資產模型的描述 (`assetModelDescription`)。
   + 變更、新增或移除任何資產模型的屬性 (`assetModelProperties`)。您無法變更現有屬性的 `dataType` 或現有指標的 `window`。如需詳細資訊，請參閱[定義資料屬性](asset-properties.md)。
   + 變更、新增或移除任何資產模型的階層 (`assetModelHierarchies`)。您無法變更現有階層的 `childAssetModelId`。如需詳細資訊，請參閱[定義資產模型階層](define-asset-hierarchies.md)。
   + 變更、新增或移除任何資產模型類型 `AWS/ALARM`() 的複合模型`assetModelCompositeModels`。警示會監控其他屬性，讓您可以識別設備或程序何時需要注意。每個警示定義都是複合模型，可標準化警示使用的屬性集。如需詳細資訊，請參閱[在 中使用警示監控資料 AWS IoT SiteWise](industrial-alarms.md)及[在 中定義資產模型的警示 AWS IoT SiteWise](define-alarms.md)。

1. 執行以下命令，使用儲存在 `update-asset-model.json` 中的定義更新資產模型。將 *asset-model-id* 取代為資產模型的 ID：

   ```
   aws iotsitewise update-asset-model \
     --asset-model-id asset-model-id \
     --cli-input-json file://model-payload.json
   ```

**重要**  
 當多個使用者同時更新資產模型時，其他使用者可能會無意中覆寫使用者的變更。若要避免這種情況，您必須定義條件式更新請求。請參閱 [資產模型寫入的樂觀鎖定](opt-locking-for-model.md)。