
# 设备孪生工作原理
边缘节点纳管后，会在边缘节点上安装Edge Agent，其中终端设备管理相关组件如下所示。
- EdgeHub：WebSocket客户端，包括同步云端资源更新、报告边缘节点和终端设备信息到云端等功能。
- DeviceTwin：设备孪生，负责存储终端设备状态并将设备状态同步到云端。
- EventBus：与MQTT服务器交互的客户端，为其他组件提供订阅和发布消息的功能。
- MQTT broker：MQTT服务器。
图1终端设备管理   
![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001214402798.png "点击放大")
终端设备、边缘节点、IEF通信的过程中，设备孪生（DeviceTwin）起到了一个非常重要的作用，设备孪生保持设备的动态数据，包括特定背景下的设备专有实时数据，例如灯的开、关状态。
设备孪生具有与物理设备相同的特性，便于终端设备与应用之间进行更好地通信。应用发送的命令首先到达设备孪生，设备孪生根据应用设置的Expected State（期望的状态）进行状态更新，此外终端设备实时反馈自身的Actual State（真实的状态），设备孪生同时记录设备的Actual State和Expected State。这种方式也使终端设备在离线状况下再次上线时，终端设备的状态也能得到同步。
设备孪生的参考示例如下。
```
{
    "device": {
        "id": "989e4fc8-9f24-44d7-9f9c-a0bd3bfb1949",
        "description": "my home light",
        "name": "light",
        "state": "online",
        "twin": {
            "powerstatus": {
                "expected": {
                    "value": "ON"
                },
                "actual": {
                    "value": "OFF"
                },
                "metadata": {
                    "type": "string"
                }
            }
        }
    }
}
```
这个名为"light"的设备定义一个名为"powerstatus"的孪生属性，期望值（expected）是ON，而实际值（actual）是OFF。
下面看下这个终端设备与边缘节点和IEF通信的过程。
#### 终端设备上报实际状态到云端
终端设备上报实际状态到云端的过程如[图2]所示。
图2设备上报状态   
![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001214562782.png "点击放大")
1. 终端设备将实际状态（Actual State）实时上报给MQTT broker。
2. EventBus从MQTT broker收到订阅消息，消息内容包含终端设备的实际状态。
3. EventBus把终端设备实际状态发送给DeviceTwin，DeviceTwin在边缘节点存储终端设备实际状态。
4. DeviceTwin同步实际状态给WebSocket客户端EdgeHub。
5. EdgeHub发送消息给IEF。
 
#### 云端修改孪生属性控制终端设备状态
图3修改终端设备状态   
![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001258962677.png "点击放大")
1. 在IEF中修改终端设备的孪生属性，IEF将终端设备期望状态（Expected State）发送给边缘节点的EdgeHub。
2. EdgeHub发送终端设备期望状态消息到DeviceTwin，DeviceTwin在边缘节点存储终端设备期望状态。
3. 终端设备实时发消息给MQTT broker查询终端设备期望状态。
4. EventBus接收到从MQTT broker发过来的消息。
5. EventBus根据消息去查询终端设备期望状态。
6. DeviceTwin反馈当前终端设备期望状态给EventBus。
7. EventBus发送设终端备期望状态的结果给MQTT broker。
8. 终端设备从MQTT broker收到订阅消息，根据期望状态调整实际状态。
 
