详细教程:应用侧开发Java Demo

中华小能能 发表于 2022/04/15 01:06:15 2022/04/15
【摘要】 华为云IOT的应用侧开发Java Demo使用详细教程 (IDEA 开发) 第0章 简介         最近有很多小伙伴在使用华为云IOT的应用侧开发的Java Demo时遇到一些问题,本期就教大家如何使用这个基于华为云官方提供的Java Demo,本期教程带大家做的是查询的在线状态和设备影子属性,并解析JSON数据,大家可以根据自己的需要进行二

华为云IOT的应用侧开发Java Demo使用详细教程

(IDEA 开发)

第0章 简介

  •         最近有很多小伙伴在使用华为云IOT的应用侧开发Java Demo时遇到一些问题,本期就大家如何使用这个基于华为云官方提供的Java Demo,本期教程带大家做的是查询的在线状态和设备影子属性并解析JSON数据,大家可以根据自己的需要进行二次开发,结果如下

需要参考esp8266系列设备接入华为云物联网平台(IOTDA) 并完成设备属性上报流程的小伙伴可以参考我之前发的帖子。

第1章 整体流程概述

    一、操作前的准备

    二、导入华为云官方提供的应用侧开发Java Demo工程并配置环境

    三、获取Token

    四、调用接口

第2章 具体详细步骤

一、 操作前的准备

 1、环境准备

  (1) JDKjdk-8u161-windows-x64.exe+配置环境变量

  (2) IntelliJ IDEA

  (3) apache-maven

  (4) 设备接入IOTDA

 2、 参数信息准备进入我的凭证页 准备下面信息(样例,请大家换成自己的参数,不清楚的可以参考下面的“参数来源

  (1) 华为云账号名:hw_666666_01

  (2) IAM用户名FUNIOT一般默认为账号名,此处我采用的是创建的其他IAM账户FUNIOT

  (3) IAM用户登录华为云密码ABCD1234

  (4) 项目ID09903251671035vz9u03030f

  (5) 设备ID513423536g4be_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_URLIOTDM_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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。