第0章 简介
最近有很多小伙伴在使用华为云IOT的应用侧开发的Java Demo时遇到一些问题,本期就教大家如何使用这个基于华为云官方提供的Java Demo,本期教程带大家做的是查询的在线状态和设备影子属性,并解析JSON数据,大家可以根据自己的需要进行二次开发,结果如下:
有需要参考esp8266系列设备接入华为云物联网平台(IOTDA) 并完成设备属性上报流程的小伙伴可以参考我之前发的图文。
第1章 整体流程概述
一、操作前的准备
二、导入华为云官方提供的应用侧开发Java Demo工程并配置环境
三、获取Token
四、调用接口
第2章 具体详细步骤
一、 操作前的准备
1、环境准备
(1) JDK
(2) IntelliJ IDEA
(3) apache-maven
(4) 设备接入IOTDA
2、 参数信息准备:进入我的凭证页 准备下面信息(样例,请大家换成自己的参数,不清楚的可以参考下面的“参数来源”)
(1) 华为云账号名:hw_666666_01
(2) IAM用户名:FUNIOT(一般默认为账号名,此处我采用的是创建的其他IAM账户:FUNIOT)
(3) IAM用户登录华为云密码:ABCD1234
(4) 项目ID:09903251671035vz9u03030f
(5) 设备ID:513423536g4be_esp8266_test01
(6) 设备属性:temp (本次教程用于查询设备影子的设备属性)
(7) IAM服务对接地址:https://iam.cn-north-4.myhuaweicloud.com (根据自己项目调整 )
(8) 接入服务对接地址:https://iotda.cn-north-4.myhuaweicloud.com (根据自己项目调整 )
3、 【参数来源】
(1) 设备ID、设备属性、产品ID可在设备接入控制台 中查看
(2) IAM:默认为华为云账号名,根据官方提示,如果您的华为云账号已升级为华为账号,不支持获取账号Token,建议您在统一身份认证 处创建IAM用户,授予该用户权限,以获取该IAM用户的Token。
二、 导入华为云官方提供的应用侧开发Java Demo工程并配置环境
1、 下载官方提供的Java Demo
链接:https://iot-developer.obs.cn-north-4.myhuaweicloud.com/javaApiDemo2.zip
此时我们得到了javaApiDemo2.zip的压缩文件,然后接下来我们解压缩文件并导入工程。
2、 导入工程并进行简单配置
(1) 导入工程:Open->路径\pom.xml->Open as Project
(2) 配置工程的本地maven仓库
File->Settings->Bulid,Execution,Deployment->Maven->User setting file,选择maven的config->setting.xml
注:一般设置好User setting file 路径后Local respository会自动更新
三、 获取Token
1、 配置IAM服务对接地址和接入服务对接地址
在IDEA中,打开“JavaApiDemo> src >main>java> com.huawei.util > Constants.java”,修改TOKEN_BASE_URL、IOTDM_BASE_URL,将我们提前准备的地址数据填入:
2、 获取IAM用户Token接口鉴权
(1) 打开JavaApiDemo -> src -> main ->java ->com.huawei.demo.auth -> Authentication.java
在88行左右填入我们设置的账号名、IAM用户名、IAM用户密码
(2) 右键运行“Authentication.main()”,查看控制台的输出结果,如果出现很长的字符串,意味着鉴权成功。
注意:这个不需要大家复制保存,系统会生成一个token.text文件,程序中每次获取token时都会优先从文件中获取之前保存的token,如果token失效(有效期为24小时),代码会重新获取新的token并保存到token.text文件中。
四、 调用接口
1、 查询设备
(1) 查看查询设备的URI:我们在官方提供的API参考文档中可以看到
(2) 添加URI:
我们打开之前配置IAM接入地址的Constants.java文件,路径:JavaApiDemo> src >main>java> com.huawei.util > Constants.java文件,加入/修改下面这句:
public static final String DEVICE_COMMAND_URL = IOTDM_BASE_URL + "/v5/iot/%s/devices/%s";
(3) 调用接口
(a) 修改参数
打开JavaApiDemo > src > main>java>com.huawei.demo.device > QueryDeviceList.java文件,将我们事先准备的相关参数填入后,右键运行“QueryDeviceList.main()”
(b) 查看运行结果
(c) JSON解析(我使用的是开源中国社区的 J SON 格式化显示工具 )
为了方便观看和分析,我们将上面得到的数据复制下来,进行json格式化一下
教程中我们需要的是查询设备在线状态,我们查看JSON数据可以发现”status”:”OFFLINE”是我们需要的,接下来我们进行解析:参考代码
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readValue(getContent, JsonNode.class);
JsonNode statusNode = jsonNode.get("status");
String statusstr = statusNode.asText();
System.out.println("status = " + statusstr);
if(statusstr.equals("OFFLINE"))
System.out.println("设备离线");
else if(statusstr.equals("ONLINE"))
System.out.println("设备在线");
【运行结果】
为了方便测试,直接使用MQTT.fx进行登陆,我们再次运行程序会发现已经查询到设备在线
2、 查询设备影子-属性
(1) 查看查询设备的URI:我们在官方提供的API参考文档中可以看到
(2) 添加URI:
我们再次打开之前配置IAM接入地址的Constants.java文件,路径:JavaApiDemo> src >main>java> com.huawei.util > Constants.java文件
加入/修改下面这句:
public static final String DEVICE_SHADOW_URL = IOTDM_BASE_URL + "/v5/iot/%s/devices/%s/shadow";
(3) 调用接口
(a) 修改参数
打开JavaApiDemo > src > main>java>com.huawei.demo.device > QueryDeviceList.java文件,将我们事先准备的相关参数填入后,右键运行“QueryDeviceList.main()”
(b) 查看运行结果
(c) JSON解析
同样,我们将上面得到的数据复制下来,进行json格式化一下
教程中我们需要的是查询设备影子的属性,我们查看JSON数据可以发现”temp”:”22”是我们需要的,接下来我们进行解析:参考代码
//解析json 例2:查询设备影子 temp属性
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readValue(getContent, JsonNode.class);
JsonNode tempNode = jsonNode.get("shadow").get(0).get("reported").get("properties").get("temp");
String tempstr = tempNode.asText();
System.out.println("temp = " + tempstr);
System.out.println("温度:" + tempstr+"℃");
【运行结果】
与控制台查看的数据一致
到这里大家就已经掌握了JAVA Demo的基本操作,大家可以试着写一个界面程序进行显示,我写了一个如文章开头所示的界面,bug很多,勉强能用,论坛里大佬很多,就不在这张贴了,有需要的小伙伴可以关注微信公众号“IOT趣制作”,回复关键字“华为云应用java”获取测试界面程序,然后直接加到JavaApiDemo > src > main>java>com.huawei.demo.device >目录下,运行main()即可。
【参考文档及链接】
华为云官方Java Demo使用说明:https://support.huaweicloud.com/devg-iothub/iot_02_3002.html
创建IAM用户教程:https://support.huaweicloud.com/usermanual-iam/iam_02_0001.html
华为云API列表:https://support.huaweicloud.com/api-iothub/iot_06_v5_0003.html
构造请求说明:https://support.huaweicloud.com/api-iothub/iot_06_v5_0090.html
认证鉴权说明:https://support.huaweicloud.com/api-iothub/iot_06_v5_0091.html
开源中国社区的JSON格式化显示工具:https://tool.oschina.net/codeformat/json/
esp8266系列设备接入华为云物联网平台(IOTDA):https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=179090