设备管理 IoTDM(联通用户专用)-Agent Lite SDK使用指南(Java)(联通用户专用):数据上报和数据发布

时间:2023-11-01 16:20:05

数据上报和数据发布

设备或网关向 物联网平台 上报数据可以通过调用SDK的“设备服务数据上报”接口或“数据发布”接口:

  • “设备服务数据上报”接口:deviceId,requstId和serviceId由SDK组装为消息的header;serviceProperties由SDK组装为消息的body。消息组装格式为JSON。

    注册观察者对网关数据上报结果进行相应处理。

    123456
    //注册观察者AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();DataTransService dataTransService = DataTransService.getInstance();dataTransService.registerObserver(agentLiteDataTrans);//数据上报agentLiteDataTrans.gwDataReport();

    设备或网关登录成功后可以调用DataTransService.dataReport(int cookie, String requstId, String deviceId, String serviceId, String serviceProperties)接口上报数据。

     1 2 3 4 5 6 7 8 910111213
    public void gwDataReport() {    System.out.println(" =============   gwDataReport! ============== ");    int cookie;    Random random = new Random();    cookie = random.nextInt(65535);    String deviceId = GatewayInfo.getDeviceID();    JsonObject data = new JsonObject();    data.addProperty("storage", "10240");    data.addProperty("usedPercent", "20");    DataTransService.dataReport(cookie, null, deviceId, "Storage", data.toString());}

    数据上报成功后可以在设备的“历史数据” 中看到上报的数据了。

  • “数据发布”接口:topic固定为“/cloud/signaltrans/v2/categories/data”“serviceData”参数作为消息体(包括header和body),SDK只进行透传,不进行格式调整和组装。

    注册观察者对网关数据上报结果进行相应处理。

    123456
    //注册观察者AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();DataTransService dataTransService = DataTransService.getInstance();dataTransService.registerObserver(agentLiteDataTrans);//数据发布agentLiteDataTrans.gwDataReportByMqttDataPub();

    设备或网关登录成功后可以调用DataTransService. mqttDataPub(int cookie, String topic, int qos, byte[] serviceData)接口发布数据。

    • “topic”是要发布数据的topic。
    • “qos”是mqtt协议的一个参数。
    • “serviceData”实际上是一个json字符串,内容是健值对(可以有多组健值对)。每个健是profile中定义的属性名(propertyName),值就是具体要上报的内容了。
     1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233
    public void gwDataReportByMqttDataPub() {    System.out.println(" =============   gwDataReportByMqttDataPub! ============== ");    int cookie;    Random random = new Random();    cookie = random.nextInt(65535);    String deviceId = GatewayInfo.getDeviceID();    JsonObject headerData = new JsonObject();    headerData.addProperty("method", "PUT");    String fromStr = "/device/"+deviceId+"/services/Storage";    String toStr = "/data/v1.1.0/devices/"+deviceId+"/services/Storage";    headerData.addProperty("from", fromStr);    headerData.addProperty("to", toStr);    headerData.addProperty("access_token", GatewayInfo.getAccessToken());    SimpleDateFormat df = new SimpleDateFormat(MSG_TIMESTAMP_FORMAT);    df.setTimeZone(TimeZone.getTimeZone("UTC"));    String curTime = df.format(new Date(System.currentTimeMillis()));    headerData.addProperty("timestamp", curTime);    headerData.addProperty("eventTime", curTime);    JsonObject bodyData = new JsonObject();    bodyData.addProperty("storage", "10240");    bodyData.addProperty("usedPercent", "18");    JsonObject mqttMsg = new JsonObject();    mqttMsg.add("header", headerData);    mqttMsg.add("body", bodyData);    DataTransService.mqttDataPub(cookie, "/cloud/signaltrans/v2/categories/data", 1, mqttMsg.toString().getBytes());}
support.huaweicloud.com/devg-IoT/iot_02_5118.html