

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

# 将您的集线器加入托管集成
<a name="managedintegrations-sdk-v2-cookbook-usinghub"></a>

通过配置所需的目录结构、证书和设备配置文件，将您的中心设备设置为与托管集成进行通信。本节介绍集线器载入子系统组件如何协同工作、证书和配置文件的存储位置、如何创建和修改设备配置文件以及完成集线器配置过程的步骤。

## Hub 入门子系统
<a name="managedintegrations-sdk-v2-cookbook-hubsubsystem"></a>

集线器载入子系统使用以下核心组件来管理设备配置和配置：

**Hub 入门组件**  
通过协调中心状态、配置方法和身份验证材料来管理中心入职流程。

**设备配置文件**  
在设备上存储重要的集线器配置数据，包括：  
+ 设备配置状态（已配置或未配置） 
+ 证书和密钥位置 
+ 身份验证信息其他 SDK 进程（例如 MQTT 代理）将引用此文件来确定集线器状态和连接设置。

**证书处理程序接口**  
提供用于读取和写入设备证书和密钥的实用程序接口。你可以实现这个接口来使用：  
+ 文件系统存储 
+ 硬件安全模块 (HSM) 
+ 可信平台模块 (TPM) 
+ 定制安全存储解决方案 

**MQTT 代理组件**  
使用以下方法管理 device-to-cloud通信：  
+ 预配置的客户端证书和密钥 
+ 配置文件中的设备状态信息 
+ 与托管集成的 MQTT 连接 

下图描述了集线器载入子系统架构及其组件。如果您不使用 AWS IoT Greengrass，则可以忽略图中的该组件。

![\[集线器入门子系统架构。\]](http://docs.aws.amazon.com/zh_cn/iot-mi/latest/devguide/images/iot-managedintegrations-hub-onboarding-subsystem.png)


# Hub 入职设置
<a name="managedintegrations-sdk-v2-cookbook-hubsetup"></a>

在开始队列配置入门流程之前，请完成每台中心设备的这些设置步骤。本节介绍如何创建托管事物、设置目录结构和配置所需的证书。

**Topics**
+ [步骤 1：注册自定义终端节点](#managedintegrations-sdk-v2-cookbook-acc)
+ [步骤 2：创建配置文件](#managedintegrations-sdk-v2-cookbook-fleet-provision)
+ [步骤 3：创建托管事物（队列配置）](#managedintegrations-sdk-v2-cookbook-managedthing)
+ [步骤 4：创建目录结构](#managedintegrations-sdk-v2-cookbook-hubdir)
+ [第 5 步：向中心设备添加身份验证材料](#managedintegrations-sdk-v2-cookbook-copycert)
+ [步骤 6：创建设备配置文件](#managedintegrations-sdk-v2-cookbook-genconfig)
+ [第 7 步：将配置文件复制到集线器](#managedintegrations-sdk-v2-cookbook-copyconfig)

## 步骤 1：注册自定义终端节点
<a name="managedintegrations-sdk-v2-cookbook-acc"></a>

创建专用的通信端点，您的设备使用该端点与托管集成交换数据。此端点为所有 device-to-cloud消息（包括设备命令、状态更新和通知）建立安全的连接点。

**要注册终端节点**
+ 使用 [RegisterCustomEndpoint](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_RegisterCustomEndpoint.html)API 创建用于 device-to-managed集成通信的端点。

  **RegisterCustomEndpoint请求示例**

  ```
  aws iot-managed-integrations register-custom-endpoint  
  ```

  **响应：**

  ```
  {
    [ACCOUNT-PREFIX]-ats.iot.AWS-REGION.amazonaws.com
  }
  ```
**注意**  
存储端点地址。你将需要它来进行 future 设备通信。

  要返回端点信息，请使用 `GetCustomEndpoint` API。

  有关更多信息，请参阅托管集成 [GetCustomEndpoint](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetCustomEndpoint.html)API *参考指南中的 API 和 API*。[RegisterCustomEndpoint](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_RegisterCustomEndpoint.html)

## 步骤 2：创建配置文件
<a name="managedintegrations-sdk-v2-cookbook-fleet-provision"></a>

配置文件包含您的设备连接到托管集成所需的安全凭证和配置设置。

**创建队列配置文件**
+ <a name="managedintegrations-sdk-v2-cookbook-provisioning"></a>调用 [CreateProvisioningProfile](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateProvisioningProfile.html)API 生成以下内容：
  + 用于定义设备连接设置的配置模板
  + 用于设备身份验证的索赔证书和私钥
**重要**  
安全地存储索赔证书、私钥和模板 ID。您需要这些凭据才能将设备加入托管集成。如果您丢失了这些凭据，则必须创建新的配置文件。

**`CreateProvisioningProfile`请求示例**

```
aws iot-managed-integrations create-provisioning-profile \
    --provisioning-type FLEET_PROVISIONING \
    --name PROFILE_NAME
```

**响应：**

```
{
"Arn":"arn:aws:iotmanagedintegrations:AWS-REGION:ACCOUNT-ID:provisioning-profile/PROFILE-ID",
    "ClaimCertificate":
  "-----BEGIN CERTIFICATE-----
  MIICiTCCAfICCQD6m7.....w3rrszlaEXAMPLE=
  -----END CERTIFICATE-----",
    "ClaimCertificatePrivateKey":
  "-----BEGIN RSA PRIVATE KEY-----
  MIICiTCCAfICCQ...3rrszlaEXAMPLE=
 -----END RSA PRIVATE KEY-----",
    "Id": "PROFILE-ID",
    "PROFILE-NAME",
         "ProvisioningType": "FLEET_PROVISIONING"
}
```

## 步骤 3：创建托管事物（队列配置）
<a name="managedintegrations-sdk-v2-cookbook-managedthing"></a>

使用 `CreateManagedThing` API 为您的中心设备创建托管事物。每个中心都需要自己的托管东西和独特的身份验证材料。有关更多信息，请参阅《托管集成 [CreateManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateManagedThing.html)API *参考》中的 API*。

创建托管事物时，请指定以下参数：
+ `Role`：`CONTROLLER`对于不支持命令和控制的集线器，将此值设置为，否则设置为`DEVICE`。
+ `AuthenticationMaterialType`：将此值设置为`WIFI_SETUP_QR_BAR_CODE`。
+ `AuthenticationMaterial`：包括以下字段。你可以使用其中`UPC`一个，也可以同时使用，`EAN`但不能两者兼而有之。
  + `SN`: 此设备的唯一序列号
  + `UPC`: 此设备的通用产品代码
  + `EAN`: 此设备的国际商品编号

**重要**  
每台设备的身份验证材料中必须有一个唯一的序列号 (SN)。

**`CreateManagedThing`请求示例**：

```
{ 
 "Role": "CONTROLLER",
 "AuthenticationMaterialType": "WIFI_SETUP_QR_BAR_CODE",
 "AuthenticationMaterial": "SN:123456789524;UPC:829576019524"
}
```

有关更多信息，请参阅托管集成 *API 参考[CreateManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateManagedThing.html)*中的。

### （可选）获取托管事物
<a name="managedintegrations-sdk-v2-cookbook-managedthing-get"></a>

在`ProvisioningStatus`继续操作`PRE_ASSOCIATED`之前，必须先完成托管事务。有关的更多信息 ProvisioningStatus，请参阅[设备配置](https://docs.aws.amazon.com/iot-mi/latest/devguide/device-provisioning.html)。使用 `GetManagedThing` API 验证您的托管事物是否存在且已准备好进行配置。有关更多信息，请参阅托管集成 *API 参考[GetManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetManagedThing.html)*中的。

## 步骤 4：创建目录结构
<a name="managedintegrations-sdk-v2-cookbook-hubdir"></a>

为您的配置文件和证书创建目录。默认情况下，Hub 入职流程使用。`/data/aws/iotmi/config/iotmi_config.json`

您可以在配置文件中为证书和私钥指定自定义路径。本指南使用默认路径`/data/aws/iotmi/certs`。

```
mkdir -p /data/aws/iotmi/config
mkdir -p /data/aws/iotmi/certs

/data/
    aws/
        iotmi/
            config/
            certs/
```

## 第 5 步：向中心设备添加身份验证材料
<a name="managedintegrations-sdk-v2-cookbook-copycert"></a>

将证书和密钥复制到您的中心设备，然后创建设备特定的配置文件。在配置过程中，这些文件可在您的集线器和托管集成之间建立安全的通信。

**复制索赔证书和密钥**
+ 将这些身份验证文件从 `CreateProvisioningProfile` API 响应复制到您的中心设备：
  + `claim_cert.pem`: 索赔证书（适用于所有设备）
  + `claim_pk.key`: 索赔证书的私钥

  将两个文件都放在`/data/aws/iotmi/certs`目录中。
**重要**  
 以 PEM 格式存储证书和私钥时，请通过正确处理换行符来确保格式正确。对于 PEM 编码的文件，`(\n)`必须将换行符替换为实际的行分隔符，因为仅存储转义的换行符以后将无法正确检索。
**注意**  
如果您使用安全存储，请将这些凭据存储在您的安全存储位置而不是文件系统中。有关更多信息，请参阅 [创建用于安全存储的自定义证书处理程序](managedintegrations-sdk-v2-cookbook-certhandler.md)。

## 步骤 6：创建设备配置文件
<a name="managedintegrations-sdk-v2-cookbook-genconfig"></a>

创建包含唯一设备标识符、证书位置和配置设置的配置文件。SDK 在集线器启动期间使用此文件对您的设备进行身份验证、管理配置状态和存储连接设置。

**注意**  
每台集线器设备都需要自己的配置文件，其中包含唯一的设备特定值。

使用以下过程创建或修改您的配置文件，然后将其复制到集线器。
+ <a name="managedintegrations-sdk-v2-cookbook-modifyconfig-fleet"></a>**创建或修改配置文件（队列配置）**。

  在设备配置文件中配置以下必填字段：
  + 证书路径

    1. `iot_claim_cert_path`: 您的索赔证明的位置 (`claim_cert.pem`)

    1. `iot_claim_pk_path`: 您的私钥的位置 (`claim_pk.key`)

    1. 在实现安全存储证书处理程序时，这两个字段都使用 `SECURE_STORAGE`
  + 连接设置

    1. `fp_template_name`: 之前的`ProvisioningProfile`名字。

    1. `endpoint_url`：来自 `RegisterCustomEndpoint` API 响应的托管集成终端节点 URL（一个区域内的所有设备都相同）。
  + 设备标识符

    1. `SN`: 与您的 `CreateManagedThing` API 调用匹配的设备序列号（每台设备都是唯一的）

    1. `UPC`来自您的 `CreateManagedThing` API 调用的通用产品代码（此产品的所有设备都相同） 

  ```
  {
      "ro": {
          "iot_provisioning_method": "FLEET_PROVISIONING",
          "iot_claim_cert_path": "<SPECIFY_THIS_FIELD>",
          "iot_claim_pk_path": "<SPECIFY_THIS_FIELD>",
          "fp_template_name": "<SPECIFY_THIS_FIELD>",        
          "endpoint_url": "<SPECIFY_THIS_FIELD>",
          "SN": "<SPECIFY_THIS_FIELD>",
          "UPC": "<SPECIFY_THIS_FIELD>"        
      },
      "rw": {
          "iot_provisioning_state": "NOT_PROVISIONED"
      }
  }
  ```

### 配置文件的内容
<a name="managedintegrations-sdk-v2-cookbook-config-contents"></a>

查看`iotmi_config.json`文件内容。


**内容**  

| 键 | 值 | 由客户添加？ | 注意 | 
| --- | --- | --- | --- | 
| iot\$1provisioning\$1method | FLEET\$1PROVISIONING | 是 | 指定要使用的配置方法。 | 
| iot\$1claim\$1cert\$1path | 您指定的文件路径或SECURE\$1STORAGE。例如，/data/aws/iotmi/certs/claim\$1cert.pem | 是 | 指定要使用的文件路径或SECURE\$1STORAGE。 | 
| iot\$1claim\$1pk\$1path | 您指定的文件路径或SECURE\$1STORAGE。例如，/data/aws/iotmi/certs/claim\$1pk.pem | 是 | 指定要使用的文件路径或SECURE\$1STORAGE。 | 
| fp\$1template\$1name | 队列配置模板名称应等于之前使用的名称。ProvisioningProfile | 是 | 等于之前使用的名称 ProvisioningProfile | 
| endpoint\$1url | 托管集成的终端节点 URL。 | 是 | 您的设备使用此 URL 连接到托管集成云。要获取此信息，请使用 [RegisterCustomEndpoint](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_RegisterCustomEndpoint.html)API。 | 
| SN | 设备序列号。例如 AIDACKCEVSQ6C2EXAMPLE。 | 是 | 您必须为每台设备提供此唯一信息。 | 
| UPC | 设备通用产品代码。例如 841667145075。 | 是 | 您必须为设备提供此信息。 | 
| managed\$1thing\$1id | 托管事物的 ID。 | 否 | 此信息将在集线器配置后通过入职流程添加。 | 
| iot\$1provisioning\$1state | 供应状态。 | 是 | 置备状态必须设置为NOT\$1PROVISIONED。 | 
| iot\$1permanent\$1cert\$1path | 物联网证书路径。例如 /data/aws/iotmi/iot\$1cert.pem。 | 否 | 此信息将在集线器配置后通过入职流程添加。 | 
| iot\$1permanent\$1pk\$1path | 物联网私钥文件路径。例如 /data/aws/iotmi/iot\$1pk.pem。 | 否 | 此信息将在集线器配置后通过入职流程添加。 | 
| client\$1id | 将用于 MQTT 连接的客户端 ID。 | 否 | 此信息稍后由集线器配置后的入门流程添加，以供其他组件使用。 | 
| mqtt\$1keep\$1alive\$1interval | 射程为 30-1200，单位以秒为单位。默认值是 300。 | 是 | 使用它来设置 MQTT 连接的保持连接间隔。 | 
| event\$1manager\$1upper\$1bound | 默认值是 500。 | 否 | 此信息稍后由集线器配置后的入门流程添加，以供其他组件使用。 | 

## 第 7 步：将配置文件复制到集线器
<a name="managedintegrations-sdk-v2-cookbook-copyconfig"></a>

将您的配置文件复制到`/data/aws/iotmi/config`或您的自定义目录路径。您将在入门过程中提供此`HubOnboarding`二进制文件路径。

**用于舰队配置**

```
/data/
    aws/
        iotmi/
            config/
                iotmi_config.json
            certs/
                claim_cert.pem
                claim_pk.key
```