更新时间:2024-06-14 GMT+08:00

设备消息上报

概述

消息上报是设备直接将数据传到云端,通过数据流转功能将数据转发到应用侧或华为云其他云服务的一种方式。平台对设备上报的消息不进行解析和存储,不需要建立产品模型便可以使用。

图1 设备消息上报流程

使用场景

平台对设备上报的数据不进行解析和存储,需要通过数据转发规则转发到华为云其他云服务上进行存储和处理的场景。

使用限制

  • 单个消息内容不大于1M。
  • 单个MQTT连接最大带宽1MB/s。
  • 单个MQTT连接每秒最大上行消息数量为50条(一次请求为一条)。

使用说明

图2 设备消息上报操作流程
  1. 创建产品与设备:创建产品流程、创建设备流程。
  2. 设备鉴权:平台验证设备是否具有接入权限。
  3. 设备消息上报:设备通过MQTT/HTTPS等协议发送消息数据。

    按照不同的设备协议,调用的接口不一样,下面分别介绍MQTT、HTTPS协议消息上报的样例:

    MQTT:通过消息上报接口MQTT协议消息上报上报数据到物联网平台。

    • MQTT消息上报Topic样例如下:
      $oc/devices/{device_id}/sys/messages/up    
    • MQTT消息上报数据格式样例如下:
      {
          "content": {"hello":"123"} 
      }
    HTTPS:通过消息上报接口HTTP协议消息上报上报数据到物联网平台,其中access_token获取参考:HTTPS设备鉴权。HTTPS消息上报样例如下:
    POST https://{endpoint}/v5/devices/{device_id}/sys/messages/up 
    Content-Type: application/json
    access_token: d144a524-1997-4b99-94bf-f27128da8a34
    {
        "name": "name",
        "id": "id",
        "content": "messageUp"
    }

    协议接口详情请参考:MQTT协议消息上报HTTP协议消息上报

  4. 数据转发:可以通过数据流转功能转发到应用侧或华为云其他云服务上进行进一步处理。

消息上报JAVA SDK使用示例

本部分介绍如何使用JAVA SDK进行消息上报的开发。本示例使用的开发环境为JDK 1.8及以上版本。

配置设备侧SDK步骤如下:

  1. SDK代码获取:SDK下载
  2. 配置设备侧SDK的Maven依赖。

    <dependency>
    	<groupId>com.huaweicloud</groupId>
    	<artifactId>iot-device-sdk-java</artifactId>
    	<version>1.1.4</version>
    </dependency>

  3. 配置设备侧SDK,设备连接参数。

    //加载iot平台的ca证书,获取连接参考:https://support.huaweicloud.com/devg-iothub/iot_02_1004.html#section3
    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 = "secret";
    //创建设备
    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. 在设备接入控制台,进入设备 > 所有设备,单击具体设备,启动消息跟踪
  2. 设备端运行设备侧SDK代码,设备侧消息上报日志格式样例如下:

    图3 java SDK消息上报结果log

  3. 消息跟踪显示结果如下,平台已经收到设备的消息上报,并且已经触发流转规则:

    图4 消息跟踪-消息上报