

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 场外托管集成中心
<a name="managedintegrations-hub-offboard"></a>

## Hub SDK 板外流程概述
<a name="hub-offboarding-overview"></a>

集线器离线过程会将集线器从 AWS Cloud 管理系统中移除。当云端发送[DeleteManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_DeleteManagedThing.html)请求时，该过程可以实现两个主要目标：

**Device-side 行动**：
+ 重置集线器的内部状态
+ 删除所有本地保存的数据
+ 为设备做好准备，以备将来可能重新上线

**Cloud-side 行动**：
+ 移除与中心关联的所有云资源
+ 完全断开与先前账户的连接

客户通常在以下情况下启动集线器下线：
+ 更改中心的关联账户
+ 用新设备替换现有集线器

该过程可确保在集线器配置之间实现干净、安全的过渡，从而实现无缝的设备管理和帐户灵活性。

![集线器离线图](https://docs.aws.amazon.com/zh_cn/iot-mi/latest/devguide/images/iot-managedintegrations-hub-sdk-offboarding-architecture.png)


## 先决条件
<a name="hub-offboarding-prerequisites"></a>
+ 你必须有一个已载入的集线器。有关说明，请参阅 [Hub 入门设置](managedintegrations-sdk-v2-cookbook-hubsetup.md)。
+ 在位于**//data/awsiotmi/config/`iotmi_config.json`**的文件中，验证是否`iot_provisioning_state`显示了内容`PROVISIONED`。
+ 确认中引用的永久证书和密钥`iotmi_config.json`存在于其指定路径中。
+ 确保代理 HubOnboarding、置备器和 MQTT 代理已正确配置并正在运行。
+ 确认集线器没有子设备。在继续操作之前，请使用 [ DeleteManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_DeleteManagedThing.html)API 移除所有子设备。

## Hub SDK 场外流程
<a name="hub-offboarding-process"></a>

请按照以下步骤退出集线器：

### 检索 hub\_managed\_thing ID
<a name="hub-offboarding-retrieve-hub"></a>

 该`iotmi_config.json`文件用于存储托管集成中心的托管事物 ID。此标识符是允许中心与 AWS IoT 托管集成服务通信的关键信息。托管事物 ID 存储在 JSON 文件的 **rw**（读写）部分的字段下`managed_thing_id`。这在以下示例配置中可以看出：

```
{
      "ro": {
          "iot_provisioning_method": "FLEET_PROVISIONING",
          "iot_claim_cert_path": "{{PATH}}",
          "iot_claim_pk_path": "{{PATH}}",
          "UPC": "{{UPC}}",
          "sh_endpoint_url": "{{ENDPOINT_URL}}",
          "SN": "{{SN}}",
          "fp_template_name": "{{TEMPLATENAME}}"
      },
      "rw": {
          "iot_provisioning_state": "PROVISIONED",
          "client_id": "{{ID}}",
          "managed_thing_id": "{{ID}}",
          "iot_permanent_cert_path": "{{CERT_PATH}}",
          "iot_permanent_pk_path": "{{KEY}}",
          "metadata": {
              "last_updated_epoch_time": 1747766125
          }
      }
}
```

### 向机外集线器发送命令
<a name="hub-offboarding-send-cmd"></a>

 使用您的账户凭证，并使用上一节中`managed_thing_id`检索到的凭据运行命令：

```
aws iot-managed-integrations delete-managed-thing \
    --identifier {{HUB_MANAGED_THING_ID}}
```

### 验证集线器已下线
<a name="hub-offboarding-process-cmd"></a>

 使用您的账户凭证，并使用上一节中`managed_thing_id`检索到的凭据运行命令：

```
aws iot-managed-integrations get-managed-thing \
    --identifier {{HUB_MANAGED_THING_ID}}
```

### 成功和失败场景
<a name="hub-offboarding-scenarios"></a>

#### 成功场景
<a name="hub-offboarding-success-scenarios"></a>

 如果成功执行了移出集线器的命令，则预计会出现以下示例响应：

```
{
      "Message" : "Managed Thing resource not found."   
}
```

 此外，如果集线器离线命令成功，则`iotmi_config.json`会观察到以下示例。验证 **rw** 部分是否仅包含可选`iot_provisioning_state`的**元数据**。缺少**元数据**是可以接受的。 `iot_provisioning_state`必须是 **NOT\_** PROVISIONED。

```
{
      "ro": {
          "iot_provisioning_method": "FLEET_PROVISIONING",
          "iot_claim_cert_path": "{{PATH}}",
          "iot_claim_pk_path": "{{PATH}}",
          "UPC": "1234567890101",
          "sh_endpoint_url": "{{ENDPOINT_URL}}",
          "SN": "1234567890101",
          "fp_template_name": "test-template"
      },
      "rw": {
          "iot_provisioning_state": "NOT_PROVISIONED",
          "metadata": {
              "last_updated_epoch_time": 1747766125
          }
      }
}
```

#### 失败场景
<a name="hub-offboarding-failure-scenarios"></a>

 如果下线集线器的命令失败，则预计会出现以下示例响应：

```
{
      "Arn" : "{{ARN}}",
      "CreatedAt" : 1.748968266655E9,
      "Id" : "{{ID}}",
      "ProvisioningStatus" : "DELETE_IN_PROGRESS",
      "Role" : "CONTROLLER",
      "SerialNumber" : "{{SERIAL_NO}}",
      "Tags" : { },
      "UniversalProductCode" : "{{UPC}}",
      "UpdatedAt" : 1.748968272107E9
}
```
+  如果**ProvisioningStatus**是`DELETE_IN_PROGRESS`，请按照 [Hub 恢复](#hub-recovery)中的说明进行操作。
+  如果不**ProvisioningStatus**是`DELETE_IN_PROGRESS`，则在托管集成云中关闭集线器的命令要么失败，要么托管集成云未收到该命令。按照 [Hub 恢复](#hub-recovery)中的说明进行操作。
+  如果离线失败，则您的`iotmi_config.json`文件将类似于下面的示例文件。

```
{
      "ro": {
          "iot_provisioning_method": "FLEET_PROVISIONING",
          "iot_claim_cert_path": "PATH",
          "iot_claim_pk_path": "PATH",
          "UPC": "123456789101",
          "sh_endpoint_url": "ENDPOINT_URL",
          "SN": "123456789101",
          "fp_template_name": "test-template"
      },
      "rw": {
          "iot_provisioning_state": "PROVISIONED",
          "client_id": "ID",
          "managed_thing_id": "ID",
          "iot_permanent_cert_path": "PATH",
          "iot_permanent_pk_path": "PATH",
          "metadata": {
              "last_updated_epoch_time": 1747766125
          }
      }
}
```

## （可选）下线后 Hub SDK
<a name="hub-offboarding-post-actions"></a>

**重要**  
 以下场景列出了在离线 Hub SDK 失败后要采取的可选操作，或者您是否想在离线后重新加入集线器时要采取的操作。

**Re-onboard**  <a name="re-onboard"></a>
如果成功下线，请按照[第 3 步：创建托管事物（队列配置）](managedintegrations-sdk-v2-cookbook-hubsetup.md#managedintegrations-sdk-v2-cookbook-managedthing)以及其余的板载流程进行加载 Hub SDK。

**集线器恢复**  <a name="hub-recovery"></a>  
**设备中心成功下线和云端下线失败**  
 如果 [ GetManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetManagedThing)API 调用未返回`Managed Thing resource not found`消息，但文件`iotmi_config.json`已被移除。有关示例 json 文件，请参阅[成功场景](#hub-offboarding-success-scenarios)。  
要从这种情况中恢复，请参阅[强制删除](#forced-deletion)。  
**设备中心下线失败**  
 这种情况是指文件`iotmi_config.json`未正确卸载。有关示例 json 文件，请参阅[失败场景](#hub-offboarding-failure-scenarios)。  
要从这种情况中恢复，请参阅[强制删除](#forced-deletion)。如果仍未脱机，`iotmi_config.json`则必须将集线器恢复出厂设置。  
**设备中心离线和云端离线失败**  
 在这种情况下，仍`iotmi_config.json`未脱机，集线器状态为`ACTIVATED`、或。`DISCOVERED`  
 要从这种情况中恢复，请参阅[强制删除](#forced-deletion)。如果强制删除失败或仍未脱机，`iotmi_config.json`则必须将集线器恢复出厂设置。  
**集线器处于离线状态且集线器状态为 DELETE\_IN\_PROGRESS**  
 在这种情况下，集线器处于离线状态，云端会收到离线命令。  
 要从这种情况中恢复，请参阅[强制删除](#forced-deletion)。

**强制删除**  <a name="forced-deletion"></a>
要在设备中心未成功下线的情况下删除云资源，请按照以下步骤操作。此操作可能会导致云端和设备状态不一致，从而可能导致将来的操作出现问题。  
使用集线器`managed_thing_id`和 f **orc** e 参数调用 [ DeleteManagedThing ](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_DeleteManagedThing)API：  

```
aws iot-managed-integrations delete-managed-thing \
  --identifier {{HUB_MANAGED_THING_ID}} \
  --force
```
 接下来，调用 [ GetManagedThing ](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetManagedThing)API 并验证它是否返回`Managed Thing resource not found`。这确认云资源已被删除。  
 不建议使用这种方法，因为它可能导致云和设备状态不一致。通常，在尝试删除云资源之前，最好确保设备中心成功下线。