APP下载

基于百度云的物联网应用搭建

2023-06-17王苇棋陈文印吴同德陈亚平谢飞武吴科甲

物联网技术 2023年6期
关键词:服务端网关代码

王苇棋,陈文印,吴同德,陈亚平,谢飞武,吴科甲

(福建信息职业技术学院,福建 福州 350000)

0 引 言

物联网是计算机、电子、通信等应用技术的集中体现,是近些年科技发展的几种体现,是人民生活的重要技术支撑。随着物联网应用技术涉足的产业越来越广、实际应用越来越多、相关产品越来越丰富,物联网已经成为了一个千亿级的行业市场[1-3]。

随着物联网行业迅速发展,带动了物联网云服务应用的提升,国内代表厂商有百度、阿里、腾讯、小米、海尔等。按照商业模式的不同,物联网云平台可以分为公有云和私有云。公有云物联网平台一般由相关企业提供,开放了大量物联网服务和接口,方便设备接入和管理。物联网公有云对设备的协议有更为严格规定,且大部分物联网管理应用功能由厂家定义。而物联网私有云平台是用户自己搭建底层运行框架,自定义业务逻辑功能,使用灵活但开发维护门槛高。近年来,部分公有云厂家也提供私有云部署业务,可以为客户定制开发功能。对于个人用户而言,想开发一套自己的物联网私有云系统,一般还需要租用一台云服务器。

利用百度物联网云平台提供的一种通用的MQTT 发布订阅功能,可以将私有云物联网平台部署到自己的个人计算机上。将百度物联网云平台当作一个数据转发中心,把设备上报的数据转发给部署私有云的服务端。同理,私有云也可以利用百度云将控制指令下发到设备。这样,就可以无需租用云服务器也能实现对设备进行数据采集和控制下发,能够降低私有云的开发门槛,缩短项目验证周期。

通过测试验证表明,该方案实用性强、快速可靠,能有效提高私有云开发效率。若设计得当,还可以作为物联网应用个人开发者的实际业务系统。

1 总体设计

基于百度云的物联网应用系统的核心是具有MQTT 发布订阅功能的百度云平台,设备端包括采集设备和转换协议的智能网关,业务端是一个私有云服务端。

系统的通信协议使用了百度提供的MQTT。MQTT 协议的角色可以分为服务代理端(Broker)和客户端(Client),代理服务器可以支持多种服务质量,客户端根据功能划分为发布者(Publish)和订阅者(Subscribe),客户端通过协议与代理服务器进行连接[4]。总体架构如图1所示。

图1 总体架构图

百度云平台作为数据透传的中转站,不处理具体业务逻辑。设备和私有云都是MQTT 客户端,利用发布订阅功能实现数据交互,进而进行设备远程监控和运维升级。

物联网网关通过RS 485 等采集总线和ModBus 等采集协议获取到采集设备的数据后,将数据按照百度云规定的格式打包后发给平台。接收到平台的控制指令后,将指令转换成控制设备可识别的信号,实现设备间联动控制。

采集控制设备具有环境数据采集与控制功能,例如植物工厂中的温湿度、CO2、LED 补光灯、光照传感器、喷灌等。要具备现场通信能力和协议处理能力,接收处理网关下发的终端命令[5]。

私有云服务端是运行物联网业务逻辑功能的主体,由于百度云的存在,服务端只需要能够连上网络即可实现业务数据采集。因此,服务端的载体可以是个人计算机、手机APP,甚至是嵌入式设备,在开发上更为灵活方便。

2 百度云配置

2.1 百度物联云平台与MQTT

百度物联网云平台是面向物联网行业开发的云管理平台,它提供设备接入与管理、规则引擎及物联网边缘等功能[6]。云端可接入、管理设备并建立安全可靠的连接;规则引擎提供物联网设备与云平台其他产品之间的数据互传;物联网边缘可将云计算能力拓展至用户现场,并且在工作条件差的区域也可以提供计算服务。

MQTT(消息队列遥测传输)是一种基于发布订阅(Publish Subscribe)模式的“轻量级”通信协议,该协议构建于TCPIP 协议簇上。为了适应硬件功能不稳定或者网络条件差等情况下而设计的一款发布订阅型消息协议。它的最大优势在于可以提供实时可靠的消息传递服务,用很少的代码和有限的带宽连接远程设备,低开销、低带宽,因此被广泛应用于物联网、小型设备、移动应用等领域[7]。云平台配置流程包括创建IoTCore 实例、创建模板、创建设备、获取连接信息、测试MQTT 通信。

2.2 云平台配置

百度云平台作为物联网网关、私有云服务端的“中介”,提供了MQTT 服务,需要注册账号并生成通信密钥,实现智能设备与云端之间建立安全的连接,防止设备被不法分子攻击。

(1)创建IoTCore 实例

在使用物联网核心套件前,需要创建一个百度智能云账号,登录后在云平台开通IoTCore,点击“创建IoTCore”,输入名称与描述,即可创建实例。

(2)创建模板

设备模板是提供当前设备的主题描述,默认的设备模板包含两个主题。按照图2和图3步骤新创建SertoCli 和ClitoSer 两个主题。

图2 创建一个模板

图3 创建主题

(3)创建设备

填写设备名称、认证方式、描述、设备模板,其中认证方式选密钥认证,描述可以不写。

(4)获取连接信息

在云平台配置好设备信息后,自动生成新的设备信息和连接密钥。进入设备详情页,在连接信息栏目,点击右侧图标,即可查看设备信息:IoTCoreId、DeviceKey 和DeviceSecret。

针对不同项目需求创建相应IoT Core 实例库,在库中添加需要的物联网传感器,从而获取传感器采集传输的相应的实时数据,实现云端部署管理[8]。

2.3 MQTT 数据收发

2.3.1 生成用户名和密码

MQTT 测试需要将获取到的设备信息生成登录用户名和密码,然后通过MQTT 测试工具或者软件实现通信,具体流程可以分为以下几个步骤:

(1)生成用户名

创建设备时选的认证方式为密钥认证后需通过拼接连接成用户名,使用拿到的IoTCoreId、DeviceKey 和DeviceSecret,生成MQTT 连接所需的用户名及密码。用户名具体拼接如下:

{adp_type}@{IoTCoreId}|{DeviceKey}|{timestamp}|{algorithm_type}

具体含义见表1所列。

表1 用户名字段定义

例如:IoTCoreId 为"avmbgrk",DeviceKey 为"zwgcDevice",则用户名可以为"thingidp@avmbgrk|zwgcDevice|0|MD5"。

(2)生成密码

组合加密字符串具体拼接如下:

{DeviceKey}&{timestamp}&{algorithm_type}{DeviceSecret}

具体含义见表2所列。

表2 用户名字段定义

例如:DeviceKey 为"zwgcDevice",DeviceSecret 为"oGciBvqglTuaVKlu",则加密字符串可以为"zwgcDevice&0&MD5oGciBvqglTuaVKlu"。

使用MD5 对加密字符串的UTF-8 字符集比特数组进行加密,并将结果转换为小写形式,密码为“53b1e44951df2329 70a624d8dc4945c8”。

具体Python 参考代码如下:

2.3.2 MQTT 数据收发

MQTT 数据收发功能测试可以使用mqtt.fx 等软件进行测试,使用方法与网络调试助手类似。本文提供一种基于Python 代码的MQTT 数据收发测试方法。

本文MQTT 代码是基于Anaconda 环境,Python 版本为3.7.6,需要安装paho-mqtt 模块,可以通过指令安装,也可以通过Anaconda 环境管理功能进行安装。

使用paho-mqtt 模块前需要导入相关模块,然后需要编写连接回调函数和收到消息的回调函数,紧接着连接到对应的服务端,最后启动线程服务就完成了paho-mqtt 功能开发。具体Python 参考代码如下:

通过发布消息函数,发布到对应主题就可以接受到对应的数据:

In [6]:mqttser.publish(topicSertoCli,'{data:"mqttser1"}',qos = 1)

mqttser.publish(topicSertoCli,'{data:"mqttser2"}',qos = 1)

Out[6]:

dev_onmsg,$iot/zwgcDevice/user/SertoCli ,b’{data:"mqttser1"}’

dev_onmsg,$iot/zwgcDevice/user/SertoCli ,b’{data:"mqttser2"}'

3 服务端与设备端功能设计与实现

3.1 服务端与设备端设计

私有云服务端主要流程包括生成登录账号和密码、登录百度云平台、通过MQTT 发送控制指令、通过MQTT 接收遥测数据等,具体流程如图4所示。

图4 服务端流程

接收到遥测数据后,根据需求进行处理,例如对数据进行解析、将报文存储到数据库中、将数据转发至展示平台、对数据进行告警判断等[9]。

当发生告警时或者人为下发控制指令等情况需要对设备进行远程控制时,服务端将命令通过MQTT 服务端下发至网关,网关解析命令后实现对远程设备进行调控。

设备端网关功能主要是硬件设备初始化、生成登录账号和密码、登录百度云平台、接收服务端控制指令、采集传感器数据并上报,具体流程如图5所示。

图5 设备端流程

硬件部分最重要的是智能网关模块,网关一般包括采集电路、通信模块、主控模块。智能网关模块主要负责将采集到的传感器数据打包后上传至云平台,解析云平台下发的指令并执行,复杂的智能网关模块还应具有边缘计算能力。

3.2 参考测试代码

为了更方便测试,首先将Token 生成相关代码封装成一个BaiduMqttTockenClass 类,将所有用到的参数存到类里,具体Python 参考代码如下。同理,将MQTT 连接功能封装成一个BaiduMqttConClass 类,将所有连接过程封装到类里。

服务端测试代码首先要创建一个MQTT 连接,并订阅设备上报主题用于接收设备上报的数据,具体Python 参考代码如下:

测试代码模拟一个服务端下发控制指令过程,每隔1 s,交替下发风扇开启和关闭指令,具体Python 参考代码如下:

同理,设备端测试代码首先要创建一个MQTT 连接,并订阅服务端下发指令主题,用于接收服务端下发的指令,具体Python 参考代码如下:

测试代码模拟一个设备端上报数据的过程,每隔2 s,随机生成温度和湿度值,并上报至服务端,具体Python 参考代码如下:

4 测 试

测试运行结果具体Python 参考代码如下,服务端每隔2 s 接收到设备端上报的数据,设备端每隔1 s 接收到服务端下发的指令。

5 结 语

本文的研究充分证明了该物联网模型的可行性和实用性,提供了一套搭建简易物联网模型的思路,实现了用户快速搭建一套物联网项目的需求。在此基础上,开发者可以增加数据库系统、可视化界面等其他模块以便于构建一套更完整的物联网系统。

注:本文通讯作者为陈文印。

猜你喜欢

服务端网关代码
基于改进RPS技术的IPSEC VPN网关设计
创世代码
创世代码
创世代码
创世代码
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
LTE Small Cell网关及虚拟网关技术研究
应对气候变化需要打通“网关”