# 设备消息上报
#### 概述
消息上报是设备直接将数据传到云端，通过数据流转功能将数据转发到应用侧或华为云其他云服务的一种方式。平台对设备上报的消息不进行解析和存储，不需要建立产品模型便可以使用。
图1设备消息上报流程   
![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001891074654.png "点击放大")
#### 使用场景
平台对设备上报的数据不进行解析和存储，需要通过[数据转发流程](https://support.huaweicloud.com/usermanual-iothub/iot_01_0024.html)转发到华为云其他云服务上进行存储和处理的场景。
#### 使用限制
- 单个消息内容不大于1M。
- 单个MQTT连接最大带宽1MB/s。
- 单个MQTT连接每秒最大上行消息数量为50条（一次请求为一条）。
 
#### 使用说明
图2设备消息上报操作流程   
![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001934474397.png "点击放大")
1. 创建产品与设备：[创建产品](https://support.huaweicloud.com/usermanual-iothub/iot_01_0054.html)流程、[注册单个设备](https://support.huaweicloud.com/usermanual-iothub/iot_01_0031.html)流程。
2. [设备鉴权](https://support.huaweicloud.com/usermanual-iothub/iot_01_0019.html)：平台验证设备是否具有接入权限。
3. 设备消息上报：设备通过MQTT/HTTPS等协议发送消息数据。 
   按照不同的设备协议，调用的接口不一样，下面分别介绍MQTT、HTTPS协议消息上报的样例：
   MQTT：通过消息上报接口[MQTT协议设备消息上报](https://support.huaweicloud.com/api-iothub/iot_06_v5_3016.html)、[使用MQTT.fx调测](https://support.huaweicloud.com/devg-iothub/iot_01_2127.html)上报数据到物联网平台。
   - MQTT消息上报Topic样例如下：
     ```
     $oc/devices/{device_id}/sys/messages/up
     ```
     
   
   - MQTT消息上报数据格式样例如下：
     ```
     {
         "content": {"hello":"123"} 
     }
     ```
     
   
   
   HTTPS：通过消息上报接口[HTTP协议消息上报](https://support.huaweicloud.com/api-iothub/iot_06_v5_7009.html)上报数据到物联网平台，其中access_token获取参考：[HTTP设备连接鉴权](https://support.huaweicloud.com/api-iothub/iot_06_v5_7008.html)。HTTPS消息上报样例如下：
   ```
   POST https://{endpoint}/v5/devices/{device_id}/sys/messages/up 
   Content-Type: application/json
   access_token: ********
   {
       "name": "name",
       "id": "id",
       "content": "messageUp"
   }
   ```
   ![](https://support.huaweicloud.com/usermanual-iothub/public_sys-resources/note_3.0-zh-cn.png)
   协议接口详情请参考：[MQTT协议设备消息上报](https://support.huaweicloud.com/api-iothub/iot_06_v5_3016.html)、[HTTP协议消息上报](https://support.huaweicloud.com/api-iothub/iot_06_v5_7009.html)。
   
   
4. 数据转发：可以通过[数据转发流程](https://support.huaweicloud.com/usermanual-iothub/iot_01_0024.html)转发到应用侧或华为云其他云服务上进行进一步处理。
 
#### 消息上报JAVA SDK使用示例
本部分介绍如何使用JAVA SDK进行消息上报的开发。本示例使用的开发环境为JDK 1.8及以上版本。
配置设备侧SDK步骤如下：
1. 获取SDK代码：[SDK下载](https://support.huaweicloud.com/sdkreference-iothub/iot_10_1002.html)。
2. 配置设备侧SDK的Maven依赖。 
   ```
   <dependency>
   <groupId>com.huaweicloud</groupId>
   <artifactId>iot-device-sdk-java</artifactId>
   <version>1.1.4</version>
   </dependency>
   ```
   
   
3. 配置设备侧SDK，设备连接参数。 
   ```
   //加载iot平台的ca证书，参考：证书资源。
   URL resource = BroadcastMessageSample.class.getClassLoader().getResource("ca.jks");
   File file = new File(resource.getPath());
   //注意格式为：ssl://接入地址:端口号。
   //接入地址获取方式：登录华为云IoTDA控制台左侧导航栏“总览”页签，在选择的实例基本信息中，单击“接入信息”。选择8883端口对应的接入地址。
   String serverUrl = "ssl://<localhost>:8883";
   //在IoT平台创建的设备ID。
   String deviceId = "<deviceId>";
   //设备ID对应的密钥。
   String deviceSecret = "<deviceSecret>";
   //创建设备
   IoTDevice device = new IoTDevice(serverUrl, deviceId, deviceSecret, file);
   if (device.init() != 0) {
       return;
   }
   ```
   
   
4. 上报设备消息： 
   ```
   device.getClient().reportDeviceMessage(new DeviceMessage("hello"), new ActionListener() {
       @Override        
       public void onSuccess(Object context) {             
           log.info("reportDeviceMessage success: ");
       }          
       @Override        
       public void onFailure(Object context, Throwable var2) {
           log.error("reportDeviceMessage fail: "+var2);         
       }     
   });
   ```
   
   
 
#### 测试验证
1. 在设备接入控制台，进入"设备 \> 所有设备"，单击具体设备，启动"消息跟踪"。 
   图3消息跟踪-启动消息跟踪   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001950378340.png "点击放大")
   
   
2. 设备端运行设备侧SDK代码，设备侧消息上报日志格式样例如下： 
   图4Java SDK消息上报结果log   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001890914730.png "点击放大")
   
   
3. "消息跟踪"显示平台已经收到设备的消息上报，并且已经触发流转规则。 
   图5消息跟踪-消息上报触发流转规则   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001950568640.png "点击放大")
   
   
 
