# 设备代理
#### 概述
在网关和子设备的拓扑关系不是固定的场景下，平台目前的固定的拓扑关系难以适配。基于此情况，平台目前推出设备代理功能。
将设备拓扑与数据转发能力解耦，子设备可以选择非拓扑关系的设备进行数据转发。
图1子设备数据上报示意图   
![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001708110622.png)
#### 使用场景
- 网关高可用方案中，主备网关的切换。如在隧道场景，设置主网关和备用网关，可在主网关网络不好或者故障时切换至备用网关进行数据传输，达到不影响数据传输，保障及时可靠地传输数据的目的。
 
- 网关故障导致更换，子设备迁移至新网关进行数据转发。目前平台当网关故障时需要将子设备删除并重新注册到新网关，使用该功能后，无需删除原网关，即可通过新网关进行数据传输。
- 可移动设备与网关不存在稳定的从属关系，由子设备自行选择网关进行数据转发。如：诊疗车搭载了医疗设备传感器，病床完成诊疗后需尽快将数据传输到医疗中心系统。为了保证信息实时传输，每个病房配置IoT网关用于上传设备中的数据。由诊疗车自主选择当前病房网关进行数据上报。
#### 功能介绍
1. 物联网平台将设备拓扑与数据转发能力解耦，对于数据转发能力支持通过一种设备代理策略来进行描述。即在平台注册设备时已经固定拓扑关系，但是可以通过其他网关进行数据转发。这种设备代理策略需要在平台进行定义和管理。代理授权主要分为两个部分：
   - 时间维度：可为代理设备的转发权限设定一定的时限，一旦过期该设备便不再具备代理能力。
   
   - 空间维度：只有加入该设备代理的设备才能转发彼此的数据（设备代理内的网关可共同转发子设备数据）。
    
2. 在同一时刻，子设备只能存在一个确定的网关，且只能通过这个网关进行数据转发，因此在对子设备进行数据转发前需要提前确定代理关系。子设备代理网关的切换必须通过[网关更新子设备状态](https://support.huaweicloud.com/api-iothub/iot_06_v5_3022.html)来实现，当上报子设备状态为在线时，平台会根据用户在平台定义好的代理策略进行校验，校验通过后平台就会在该子设备与当前网关之间建立代理关系，之后才会允许通过该代理网关进行数据转发。当上报子设备状态为离线后，会清除代理关系，禁止通过该网关进行数据转发。
 
![](https://support.huaweicloud.com/usermanual-iothub/public_sys-resources/note_3.0-zh-cn.png)
- 设备切换代理网关后，只能通过该代理网关进行数据上报等操作，通过其他网关（包括创建设备时指定的网关）上报时会校验失败。
- 平台下发子设备消息时，如果存在有效的代理关系，下发的消息将会发送到代理设备，当不存在代理关系时，会发送到子设备创建设备时指定的网关上。
- 如果您的业务需要使用该功能，请提交工单[提交工单](https://console.huaweicloud.com/ticket/?locale=zh-cn#/ticketindex/createIndex)说明您的需求。
 
#### 使用限制
- 单账号调用该接口的TPS限制最大为1/S(每秒1次请求数)。
- 单实例最大支持创建10个设备代理。
- 一个设备代理中最多能添加10个设备。
- 仅支持直连/网关设备加入设备代理，子设备不允许添加至设备代理中。
- 一个设备仅允许加入一个设备代理中。
 
#### 样例演示
1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"进入设备接入控制台。选择您的实例，单击实例卡片进入。
2. 在左侧导航栏选择"设备 \> 所有设备"，单击"注册设备"，填写相关参数，创建两个网关设备：网关一（deviceproxy-gateway1），网关二（deviceproxy-gateway2），与其对应的4个子设备gateway1-subdevice-1，gateway1-subdevice-2，gateway2-subdevice-1， gateway2-subdevice-2。 
   图2设备-注册设备代理设备   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001983155293.png "点击放大")
   
   
3. 选择"设备代理"标签，单击"创建设备代理"，创建时选择第一步创建好的两个网关设备。 
   图3设备代理-详情   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001951197524.png "点击放大")
   
   
4. 通过代理网关上报子设备状态，演示通过网关一上报网关二的子设备状态（gateway2-subdevice-2，gateway2-subdevice-1）。填入参数时请填入设备标识对应的设备id。 
   ```
   Topic: $oc/devices/{device_id}/sys/events/up
   数据格式： 
   {
           "object_device_id": "********_deviceproxy-gateway1",
   "services": [{
   "service_id": "$sub_device_manager",
   "event_type": "sub_device_update_status",
   "event_time": "20151212T121212Z",
   "paras": {
   "device_statuses": [{
   "device_id": "********_gateway2-subdevice-2",
   "status": "ONLINE"
   },
   {
   "device_id": "********_gateway2-subdevice-1",
   "status": "ONLINE"
   }
   ]
   }
   }]
   }
   ```
   
   
5. 网关一收到上报子设备状态响应。 
   ```
   Topic: $oc/devices/{device_id}/sys/events/down  
   数据格式： 
   {
      "object_device_id": "********_deviceproxy-gateway1",
      "services": [
       {
         "service_id": "$sub_device_manager",
         "event_type": "sub_device_update_status_response",
         "event_time": "20151212T121212Z",
         "event_id": "********",
         "paras": {
             "successful_devices": [
             {
               "device_id": "********_gateway2-subdevice-2",
               "status": "ONLINE"
             },
             {
               "device_id": "********_gateway2-subdevice-1",
               "status": "ONLINE"
             }
           ],
           "failed_devices": [
           ]
         }
       }
     ]
   }
   ```
   
   
6. 在控制台"所有设备"查看两个子设备为在线，表明两个子设备的代理网关已切换至deviceproxy-gateway1。后续可通过代理网关上报对子设备进行操作，此处以数据上报作为样例。 
   图4设备代理-设备状态   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001983009301.png "点击放大")
   
   
7. 通过网关一上报网关二两个子设备数据。 
   ```
   Topic:  $oc/devices/{device_id}/sys/gateway/sub_devices/properties/report  
   数据格式： 
   { 
       "devices":[ 
           { 
               "device_id":"********_gateway2-subdevice-2", 
               "services":[ 
                   { 
                       "service_id":"BasicData", 
                       "properties":{ 
                           "luminance":"12" 
                       }, 
                       "event_time":"20200702T121212Z" 
                   }
               ] 
           }, 
           { 
               "device_id":"********_gateway2-subdevice-1", 
               "services":[ 
                   { 
                       "service_id":"BasicData", 
                       "properties":{ 
                           "luminance":"66" 
                       }, 
                       "event_time":"20200702T121212Z" 
                   } 
               ] 
           } 
       ] 
   }
   ```
   
   
8. 在"设备详情"查看设备上报数据。 
   图5设备详情-设备代理子设备   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001983197829.png "点击放大")
   
   
 
