设备孪生工作原理
边缘节点纳管后,会在边缘节点上安装Edge Agent,其中终端设备管理相关组件如下所示。
- EdgeHub:WebSocket客户端,包括同步云端资源更新、报告边缘节点和终端设备信息到云端等功能。
- DeviceTwin:设备孪生,负责存储终端设备状态并将设备状态同步到云端。
- EventBus:与MQTT服务器交互的客户端,为其他组件提供订阅和发布消息的功能。
- MQTT broker:MQTT服务器。
终端设备、边缘节点、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所示。
- 终端设备将实际状态(Actual State)实时上报给MQTT broker。
- EventBus从MQTT broker收到订阅消息,消息内容包含终端设备的实际状态。
- EventBus把终端设备实际状态发送给DeviceTwin,DeviceTwin在边缘节点存储终端设备实际状态。
- DeviceTwin同步实际状态给WebSocket客户端EdgeHub。
- EdgeHub发送消息给IEF。
云端修改孪生属性控制终端设备状态
- 在IEF中修改终端设备的孪生属性,IEF将终端设备期望状态(Expected State)发送给边缘节点的EdgeHub。
- EdgeHub发送终端设备期望状态消息到DeviceTwin,DeviceTwin在边缘节点存储终端设备期望状态。
- 终端设备实时发消息给MQTT broker查询终端设备期望状态。
- EventBus接收到从MQTT broker发过来的消息。
- EventBus根据消息去查询终端设备期望状态。
- DeviceTwin反馈当前终端设备期望状态给EventBus。
- EventBus发送设终端备期望状态的结果给MQTT broker。
- 终端设备从MQTT broker收到订阅消息,根据期望状态调整实际状态。