设备管理 IoTDM(联通用户专用)-Agent Lite SDK使用指南(Java)(联通用户专用):数据上报和数据发布
数据上报和数据发布
设备或网关向 物联网平台 上报数据可以通过调用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());}