一、前言
上一篇文章中,已经实现了虚拟数据上云,本文我们将进行上位机客户端的开发,即通过调用阿里云IOT物联网云平台的SDK,开发能获取传感器的遥感数据。
二、云平台操作
调用API需要用户的AccessKey Secret,这意味着客户端将取得主体账号的所有权限。为了防止恶意用户通过客户端软件获取到全部权限对已部署的系统造成损害,因此建议创建子账号,并对其授予相关的设备的权限。
通过子账号的AccessKey ID以及AccessKey Secret连接云平台,对云平台设备进行操作等。可以点击下面的链接进入。
Token管理:AccessKey管理页面
或者点击左侧菜单栏中的访问控制,随后再进入子菜单中的 "身份管理" - "用户" 页面。
至此,两种方式均进入本页面。
随后,点击创建用户,并勾选 "OpenApi调用访问" 选项,随后点击确认完成创建。
选中该用户,点击 "添加权限",由于本账号只需要读取传感器数据,为了安全起见,我们只需要给他授予对物联网云平台的只读权限。
点击确认,即授权完成。
值得注意的是,由于我们对账号开启OpenApi的调用权限,而开启此权限的账号其相关信息在网页关闭后不再显示,因此我们需要将本页面上显示出的AccessKey ID以及AccessKey Secret保存下来,便于复用。
随后,我们使用阿里云物联网平台的SDK创建自己的应用程序,亦或者使用官方发布的Demo,并在其工程内新建我们的程序类,完成下面的开发。
三、程序设计
首先,打开上次博客中的数据上报程序,上报虚拟数据,并可以在云平台进行数据查看。
程序开始运行。此时,在阿里云平台,可以看到随机上传的数据。
打开从云平台获取数据的程序,下述文件是程序运行需要引入的类:
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.iot.model.v20180120.QueryDevicePropertyStatusRequest;
import com.aliyuncs.iot.model.v20180120.QueryDevicePropertyStatusResponse;
在程序中声明我们需要用到的参数:
第一步,初始化客户端连接对象。
IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, secret);
// 初始化client
client = new DefaultAcsClient(profile); //初始化SDK客户端
第二步,构建数据查询请求。
QueryDevicePropertyStatusRequest request = new QueryDevicePropertyStatusRequest();
request.setRegionId(regionId);
request.setIotInstanceId(iotid);
request.setDeviceName(deviceName);
request.setProductKey(deviceProductkey);
第三步,获取返回值,并对数据进行解析输出。
try {
// 发起查询设备属性请求
QueryDevicePropertyStatusResponse response = client.getAcsResponse(request);
// 处理查询结果
// 可以从response中获取传感器的数据
// 获取传感器数据
String string=JSON.toJSONString(response);
// 解析JSON数据
JsonParser parser = new JsonParser();
JsonObject jsonObject = (JsonObject) parser.parse(string);
// 获取数据字段
JsonObject data = (JsonObject) jsonObject.get("data");
JsonArray list = (JsonArray) data.get("list");
//将传感器数据输出
System.out.println("传感器数据:" + list.get(0).getAsJsonObject().get("value"));
} catch (ClientException e) {
// 处理异常
e.printStackTrace();
}
关于上述Json数据的解析思路,可以参照阿里云的API文档:
QueryDevicePropertyStatus接口使用说明
随后,我们将上述代码封装成一个方法,在主函数中创建子线程并持续调用该方法,以达到持续获取数据。
可以看到,上述代码已经能够实时获取设备数据,在此基础上,我们可以通过变成来自定义一些策略,以完成对数据变化的实时响应,完善一个物联网系统。
四、源代码
本栏目关于阿里云的全部源代码已上传GitHub,Csdn可以提供GitHub免费加速下载。
西西菜鸟-阿里云物联网相关源码