您的位置:首页 > 大数据 > 物联网

基于华为云物联网平台从设备接入到应用服务器读取设备数据的整套流程(包含搭建简单的服务器)

2020-02-01 22:48 1481 查看

文章目录

  • 应用侧开发
  • 设备管理商用平台
  • 应用侧开发
  • Postman模拟应用接入
  • 结语
  • 前言

    第一次写博客,有不足之处请谅解。
    网上华为云的使用案列太少了,踩了一个多月的坑,终于把一套流程简单的走完了一遍,包含平台侧开发和应用侧开发。已有真实设备接入IoT平台的可以忽略Mqtt.Fx的模拟接入和平台侧开发!若不需要开发应用侧,可以通过Postman模拟应用侧,后文都会详细介绍。
    华为的IoT只要设置对了订阅路径,数据就会自动推送到你所设置的订阅路径(即自己搭建的简易服务器),所以北向应用的重点就是设置订阅路径

    本文章基于Java开发,功能较为简单:
    1.Mqtt.Fx(后文简称fx)模拟设备接入华为的设备管理平台,设备管理平台可接收fx上报的数据。
    2.通过官方Java API进行消息订阅,搭建应用服务器,接收IoT平台推送的数据,显示在IDEA控制台。
    效果图如下:



    扩展功能:手机app获取服务器数据并实时刷新显示。

    所需软件:Mqtt.fx,tomcat,IDEA,eclipse(JavaEE版),软件的安装与配置自行查找和完成,使用都比较简单,不需要太多的基础知识。
    关于设备管理和开发者中心的差别,前者基于商用可能收费,步骤较为复杂,后者一般用于测试,操作较为简单,可免费使用。两者操作差别不大,下文都会讲述。

    下面开始整套流程的具体操作,大部分根据华为官方文档步骤走,有坑的地方我会补充。

    开发者中心

    平台侧开发

    使用开发者中心快速体验(华为云官方文档)

    大致步骤参考上方官方文档,下面是需要改动或者注意的地方(请根据自己掌握的内容自行跳过多余部分)

    1.设备注册

    根据文档完成开发中心申请和创建项目,第二步产品在线开发时,创建产品时注意,接入应用层协议类型为MQTT数据格式为JSON,其他内容自定义(LWM2M数据格式时二进制码流,需要编解码插件,没有接触,不是很清楚)

    进入profile定义时,可根据自己设备想要的功能和参数自定义。(profile官方定义为产品模型,需要定义服务名称和属性列表,这两类参数在后面数据传输时很重要)我是如下定义的,可自定义简单点的。

    完成此步骤后,官方文档后面的编解码插件在线开发,使用在/离线模拟器调试等操作可以忽略,有兴趣的可以去了解。
    下面,点击侧边栏的“设备管理”,新增真实设备,选择刚刚注册号的产品,自定义“设备名称”和“设备标识”。

    注册成功会生成设备ID和密钥,请复制粘贴保存好,用fx连接时有用!!!

    2.Mqtt.Fx连接IoT平台

    Mqtt作为模拟设备,接入IoT平台(华为云官方文档)
    官方文档的第一步和第二步我们已经在“1.设备注册”中完成,直接进入“连接鉴权”,此步骤官方文档过于赘述(想知道各个参数的意义可详细阅读),我们只需要打开下载的mqttClientIdGenerator-19.2.0.jar,输入之前保存的ID和密钥,点击旁边的“Generate”,保存生成的信息。

    打开MQTT.FX软件,继续按照官方文档配置鉴权参数和下载和配置证书。配置中的Broken Address在开发者中心的“对接信息”中有(我不知道每个人的是不是都一样)

    连接成功后可看到如下界面

    连接成功后,可上报数据,上报后的数据可在“设备详情”中的“历史数据”查看。

    至此,Mqtt.Fx模拟设备接入华为的开发者中心,开发者中心平台可接收fx上报的数据全过程结束。

    应用侧开发

    开发者中心接收到了数据,会自动往设定的服务器推送设备变更信息,所以我们第一步要搭建一个简单的服务器

    1.搭建服务器

    打开IDEA新建一个JavaEE项目,工程名称等自定义。

    配置tomcat(请自行百度IDEA如何配置Tomcat),在src下新建一个Servlet

    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/dataChange/")
    public class GetData extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("get");
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("post");
    BufferedReader br = req.getReader();
    String line = br.readLine();
    System.out.println(line);
    }
    }

    成功运行后,自动跳出一个网页,应该显示的是“$END”,在网页连接后面加上“dataChange”(如,我自动跳出的是“http://localhost:8080/”就访问http://localhost:8080/dataChange/),控制台打印了“get”,说明服务器可正常运行。
    此时,最重要的一步,也是我卡了几个星期的原因!!!使用花生壳进行内网穿透此时你的服务器只是运行在你的电脑上面,你电脑只有私网ID没有公网IP,外网访问不到,所以要使用花生壳进行内网穿透。

    2.花生壳内网穿透

    以下为简单描述,不清楚可以百度。
    访问花生壳官网,登录和注册会自动给你一个可以用的免费域名。选择“内网映射”并配置信息。

    开始使用后,若访问http://(给你的域名)/dataChange/,控制台显示get,说明穿透成功。

    3.开发者中心设置订阅路径


    需要订阅哪种信息就配置哪种信息的订阅路径,我配置了设备信息变化设备数据变化
    若订阅成功:

    此时用Mqtt.fx连接开发者中心,并推送数据,IDEA的控制台会显示开发者中心上报给你的信息。

    至此,整套流程全部完毕!后续可以获取平台传过来的Json数据做具体操作。若需要安装获取服务器数据并解析显示的话,我有时间再更新。

    设备管理商用平台

    平台侧开发

    1.设备注册

    和开发者中心的设备注册没有太大差别,创建产品和设备,记得保存ID和密钥!但没有创建产品profile的地方,可以在开发者中心创建好了,导出,再导入到设备管理平台。

    2.MQTT.FX.接入平台

    也和开发者中心的接入没有太大差别,注意的是打开MQTT.FX软件,配置中的Broken Address在设备接入的“对接信息”中有

    应用侧开发

    之前说的设备管理的操作步骤较为复杂就在这里!!!
    第一步(搭建服务器)和第二步(花生壳内网穿透)都和开发者中心一样,需要先参照上文完成相关操作,主要是第三步,并没有可以设置订阅路径的地方,需要调用官方的Java API。
    使用Java API Demo调测(官方文档)
    大部分根据官方文档进行操作,建议先浏览一遍,并不需要用到所有接口。
    根据官方文档,到“应用接入”,其中“在eclipse中,选择“src > com.utils > Constant.java”,修改BASE_URL、APPID、SECRET,然后保存(Ctrl+S)。”的BASE_URL、APPID、SECRET分别在以下位置


    配置好后,再在eclipse中,选择“src > com.huawei.service.appAccessSecurity”,右键单击“Authentication.java”,选择“Run As > Java Application” 。在控制台查看响应消息的打印日志,如果获得accessToken,说明鉴权成功,API可用,配置信息正确。
    下面,坑来了!
    首先,直接参考官方文档中的“数据上报”设置订阅路径,“订阅数据”这个接口我用老有问题,不确实是不是我的问题,但“数据上报”是可以完成设置订阅路径的操作的。
    注意:官方文档中的“在eclipse中,选择“src > com.huawei.testMessagePush > NotifyType.java”,修改“TEST_CALLBACK_BASE_URL”,填写本地IP地址和端口号,端口号不能被本地其它程序占用。”中TEST_CALLBACK_BASE_URL并不是填写本地IP和端口,而是通过花生壳内网穿透后的网站,即:http://(给你的域名)/dataChange/(如果你是按照我的操作搭建的服务器的话)
    然后,右键单击“src > com.huawei.testMessagePush > TestSubscribeAllServiceNotification.java”,选择“Run As > Java Application” 。
    如果,在设备管理的“应用管理”中的“服务设置”中“订阅推送服务(HTTP/HTTPS)”下显示了回调地址列表,说明设置订阅路径成功。

    此时用Mqtt.fx连接设备管理IoT平台,并推送数据,IDEA的控制台会显示开发者中心上报给你的信息。

    Postman模拟应用接入

    Postman模拟应用接入(官方文档)
    这个根据官方文档基本都可以操作成功,我就不详细讲解了。

    结语

    最后,有什么问题可以在评论区留言,看到了并且可以解决就会答复,有什么不足也可以和我提出。

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    木有感情的瓦力 发布了1 篇原创文章 · 获赞 0 · 访问量 94 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: